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
@ -227,25 +227,15 @@ pub unsafe fn record_sp_limit(limit: uint) {
|
||||
}
|
||||
|
||||
// aarch64 - FIXME(AARCH64): missing...
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
unsafe fn target_record_sp_limit(_: uint) {
|
||||
}
|
||||
|
||||
// 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) {
|
||||
}
|
||||
|
||||
|
||||
// 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
|
||||
@ -332,28 +322,18 @@ pub unsafe fn get_sp_limit() -> uint {
|
||||
}
|
||||
|
||||
// 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 {
|
||||
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")]
|
||||
pub fn load_self() -> Option<Vec<u8>> {
|
||||
use sync::{StaticMutex, MUTEX_INIT};
|
||||
|
||||
static LOCK: StaticMutex = MUTEX_INIT;
|
||||
|
||||
extern {
|
||||
fn __load_self() -> *const c_char;
|
||||
fn rust_load_self() -> *const c_char;
|
||||
}
|
||||
|
||||
let _guard = LOCK.lock();
|
||||
|
||||
unsafe {
|
||||
let v = __load_self();
|
||||
let v = rust_load_self();
|
||||
if v.is_null() {
|
||||
None
|
||||
} else {
|
||||
|
@ -204,7 +204,7 @@ int *__dfly_error(void) { return __error(); }
|
||||
#include <sys/sysctl.h>
|
||||
#include <limits.h>
|
||||
|
||||
const char * __load_self() {
|
||||
const char * rust_load_self() {
|
||||
static char *self = NULL;
|
||||
|
||||
if (self == NULL) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user