openbsd: incoporate remarks
- consolidate target_record_sp_limit and target_get_sp_limit functions for aarch64, powerpc, arm-ios and openbsd as there are all without segmented stacks (no need to duplicate functions). - rename __load_self function to rust_load_self - use a mutex inner load_self() as underline implementation is not thread-safe
This commit is contained in:
parent
3096784a3b
commit
568a451a90
3 changed files with 27 additions and 40 deletions
|
@ -227,25 +227,15 @@ pub unsafe fn record_sp_limit(limit: uint) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// aarch64 - FIXME(AARCH64): missing...
|
// aarch64 - FIXME(AARCH64): missing...
|
||||||
#[cfg(target_arch = "aarch64")]
|
|
||||||
unsafe fn target_record_sp_limit(_: uint) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// powerpc - FIXME(POWERPC): missing...
|
// powerpc - FIXME(POWERPC): missing...
|
||||||
#[cfg(target_arch = "powerpc")]
|
// arm-ios - iOS segmented stack is disabled for now, see related notes
|
||||||
|
// openbsd - segmented stack is disabled
|
||||||
|
#[cfg(any(target_arch = "aarch64",
|
||||||
|
target_arch = "powerpc",
|
||||||
|
all(target_arch = "arm", target_os = "ios"),
|
||||||
|
target_os = "openbsd"))]
|
||||||
unsafe fn target_record_sp_limit(_: uint) {
|
unsafe fn target_record_sp_limit(_: uint) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// iOS segmented stack is disabled for now, see related notes
|
|
||||||
#[cfg(all(target_arch = "arm", target_os = "ios"))] #[inline(always)]
|
|
||||||
unsafe fn target_record_sp_limit(_: uint) {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "openbsd")] #[inline(always)]
|
|
||||||
unsafe fn target_record_sp_limit(_: uint) {
|
|
||||||
// segmented stack is disabled
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The counterpart of the function above, this function will fetch the current
|
/// The counterpart of the function above, this function will fetch the current
|
||||||
|
@ -332,28 +322,18 @@ pub unsafe fn get_sp_limit() -> uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
// aarch64 - FIXME(AARCH64): missing...
|
// aarch64 - FIXME(AARCH64): missing...
|
||||||
#[cfg(target_arch = "aarch64")]
|
// powerpc - FIXME(POWERPC): missing...
|
||||||
|
// arm-ios - iOS doesn't support segmented stacks yet.
|
||||||
|
// openbsd - OpenBSD doesn't support segmented stacks.
|
||||||
|
//
|
||||||
|
// This function might be called by runtime though
|
||||||
|
// so it is unsafe to unreachable, let's return a fixed constant.
|
||||||
|
#[cfg(any(target_arch = "aarch64",
|
||||||
|
target_arch = "powerpc",
|
||||||
|
all(target_arch = "arm", target_os = "ios"),
|
||||||
|
target_os = "openbsd"))]
|
||||||
|
#[inline(always)]
|
||||||
unsafe fn target_get_sp_limit() -> uint {
|
unsafe fn target_get_sp_limit() -> uint {
|
||||||
1024
|
1024
|
||||||
}
|
}
|
||||||
|
|
||||||
// powepc - FIXME(POWERPC): missing...
|
|
||||||
#[cfg(target_arch = "powerpc")]
|
|
||||||
unsafe fn target_get_sp_limit() -> uint {
|
|
||||||
1024
|
|
||||||
}
|
|
||||||
|
|
||||||
// iOS doesn't support segmented stacks yet. This function might
|
|
||||||
// be called by runtime though so it is unsafe to mark it as
|
|
||||||
// unreachable, let's return a fixed constant.
|
|
||||||
#[cfg(all(target_arch = "arm", target_os = "ios"))] #[inline(always)]
|
|
||||||
unsafe fn target_get_sp_limit() -> uint {
|
|
||||||
1024
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "openbsd")] #[inline(always)]
|
|
||||||
unsafe fn target_get_sp_limit() -> uint {
|
|
||||||
// segmented stack is disabled
|
|
||||||
1024
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,11 +217,18 @@ pub fn load_self() -> Option<Vec<u8>> {
|
||||||
|
|
||||||
#[cfg(target_os = "openbsd")]
|
#[cfg(target_os = "openbsd")]
|
||||||
pub fn load_self() -> Option<Vec<u8>> {
|
pub fn load_self() -> Option<Vec<u8>> {
|
||||||
|
use sync::{StaticMutex, MUTEX_INIT};
|
||||||
|
|
||||||
|
static LOCK: StaticMutex = MUTEX_INIT;
|
||||||
|
|
||||||
extern {
|
extern {
|
||||||
fn __load_self() -> *const c_char;
|
fn rust_load_self() -> *const c_char;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _guard = LOCK.lock();
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let v = __load_self();
|
let v = rust_load_self();
|
||||||
if v.is_null() {
|
if v.is_null() {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -204,7 +204,7 @@ int *__dfly_error(void) { return __error(); }
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
const char * __load_self() {
|
const char * rust_load_self() {
|
||||||
static char *self = NULL;
|
static char *self = NULL;
|
||||||
|
|
||||||
if (self == NULL) {
|
if (self == NULL) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue