From c547f9677fb4b8c64ecca8366eea226f55733cf9 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sat, 20 Aug 2022 21:11:18 -0600 Subject: [PATCH] Use GS for i686 thread pointer --- src/ld_so/mod.rs | 14 ++++++++++++++ src/ld_so/tcb.rs | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) 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); }