diff --git a/src/header/dlfcn/mod.rs b/src/header/dlfcn/mod.rs index 54d8498bdf..b592e7efe4 100644 --- a/src/header/dlfcn/mod.rs +++ b/src/header/dlfcn/mod.rs @@ -47,7 +47,7 @@ pub unsafe extern "C" fn dlopen(cfilename: *const c_char, flags: c_int) -> *mut )) }; - let tcb = match Tcb::current_slow() { + let tcb = match Tcb::current() { Some(tcb) => tcb, None => { ERROR.store(ERROR_NOT_SUPPORTED.as_ptr() as usize, Ordering::SeqCst); @@ -83,7 +83,7 @@ pub unsafe extern "C" fn dlsym(handle: *mut c_void, symbol: *const c_char) -> *m let symbol_str = str::from_utf8_unchecked(CStr::from_ptr(symbol).to_bytes()); - let tcb = match Tcb::current_slow() { + let tcb = match Tcb::current() { Some(tcb) => tcb, None => { ERROR.store(ERROR_NOT_SUPPORTED.as_ptr() as usize, Ordering::SeqCst); @@ -110,7 +110,7 @@ pub unsafe extern "C" fn dlsym(handle: *mut c_void, symbol: *const c_char) -> *m #[no_mangle] pub unsafe extern "C" fn dlclose(handle: *mut c_void) -> c_int { - let tcb = match Tcb::current_slow() { + let tcb = match Tcb::current() { Some(tcb) => tcb, None => { ERROR.store(ERROR_NOT_SUPPORTED.as_ptr() as usize, Ordering::SeqCst); diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs index b8cfa30b05..5bdccabe42 100644 --- a/src/ld_so/linker.rs +++ b/src/ld_so/linker.rs @@ -167,7 +167,7 @@ impl Linker { )?; unsafe { - let tcb = match Tcb::current_slow() { + let tcb = match Tcb::current() { Some(some) => some, None => Tcb::new(self.tls_size)?, }; @@ -230,7 +230,7 @@ impl Linker { if self.next_tls_module_id == 1 { // Hack to allocate TCB on the first TLS module unsafe { - if Tcb::current_slow().is_none() { + if Tcb::current().is_none() { let tcb = Tcb::new(master.offset).expect_notls("failed to allocate TCB"); tcb.activate(); } diff --git a/src/ld_so/tcb.rs b/src/ld_so/tcb.rs index 27939e642f..1e05657660 100644 --- a/src/ld_so/tcb.rs +++ b/src/ld_so/tcb.rs @@ -112,46 +112,6 @@ impl Tcb { Some(&mut *GenericTcb::::current_ptr()?.cast()) } - // FIXME(andypython): move to platform/ - pub unsafe fn current_slow() -> Option<&'static mut Self> { - #[cfg(all(target_os = "linux", target_arch = "x86_64"))] - { - use sc::nr::ARCH_PRCTL; - const ARCH_GET_FS: usize = 0x1003; - - let mut fs_base = 0usize; - sc::syscall!(ARCH_PRCTL, ARCH_GET_FS, &mut fs_base as *mut usize); - - if fs_base == 0 { - None - } else { - Some(&mut *(fs_base as *mut Self)) - } - } - - #[cfg(all(target_os = "redox", target_arch = "x86_64"))] - { - let mut env = syscall::EnvRegisters::default(); - - let file = syscall::open( - "/scheme/thisproc/current/regs/env", - syscall::O_CLOEXEC | syscall::O_RDONLY, - ) - .expect_notls("failed to open handle for process registers"); - - let _ = syscall::read(file, &mut env).expect_notls("failed to read fsbase"); - let _ = syscall::close(file); - - if env.fsbase == 0 { - return None; - } else { - return Some(&mut *(env.fsbase as *mut Self)); - } - } - - // FIXME(andypython): Implement and test on other platforms - } - /// A slice for all of the TLS data pub unsafe fn tls(&self) -> Option<&'static mut [u8]> { if self.tls_end.is_null() || self.tls_len == 0 {