Use GS for i686 thread pointer

This commit is contained in:
Jeremy Soller
2022-08-20 21:11:18 -06:00
parent c96b3114ab
commit c547f9677f
2 changed files with 16 additions and 2 deletions
+14
View File
@@ -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();
+2 -2
View File
@@ -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);
}