diff --git a/src/ld_so/mod.rs b/src/ld_so/mod.rs index 73c8102e4c..74f3a73150 100644 --- a/src/ld_so/mod.rs +++ b/src/ld_so/mod.rs @@ -144,6 +144,20 @@ pub unsafe fn init(sp: &'static Stack) { const ARCH_GET_FS: usize = 0x1003; syscall!(ARCH_PRCTL, ARCH_GET_FS, &mut tp as *mut usize); } + #[cfg(all(target_os = "redox", target_arch = "x86"))] + { + let mut env = syscall::EnvRegisters::default(); + + let file = syscall::open("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 gsbase"); + + let _ = syscall::close(file); + + tp = env.gsbase as usize; + } #[cfg(all(target_os = "redox", target_arch = "x86_64"))] { let mut env = syscall::EnvRegisters::default(); diff --git a/src/ld_so/tcb.rs b/src/ld_so/tcb.rs index 0e352c209a..0e281c76f6 100644 --- a/src/ld_so/tcb.rs +++ b/src/ld_so/tcb.rs @@ -260,12 +260,12 @@ impl Tcb { .expect_notls("failed to open handle for process registers"); let _ = syscall::read(file, &mut env) - .expect_notls("failed to read fsbase"); + .expect_notls("failed to read gsbase"); env.gsbase = tp as u32; let _ = syscall::write(file, &env) - .expect_notls("failed to write fsbase"); + .expect_notls("failed to write gsbase"); let _ = syscall::close(file); }