Skip to content
Snippets Groups Projects
Commit c547f967 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Use GS for i686 thread pointer

parent c96b3114
No related branches found
No related tags found
No related merge requests found
...@@ -144,6 +144,20 @@ pub unsafe fn init(sp: &'static Stack) { ...@@ -144,6 +144,20 @@ pub unsafe fn init(sp: &'static Stack) {
const ARCH_GET_FS: usize = 0x1003; const ARCH_GET_FS: usize = 0x1003;
syscall!(ARCH_PRCTL, ARCH_GET_FS, &mut tp as *mut usize); 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"))] #[cfg(all(target_os = "redox", target_arch = "x86_64"))]
{ {
let mut env = syscall::EnvRegisters::default(); let mut env = syscall::EnvRegisters::default();
......
...@@ -260,12 +260,12 @@ impl Tcb { ...@@ -260,12 +260,12 @@ impl Tcb {
.expect_notls("failed to open handle for process registers"); .expect_notls("failed to open handle for process registers");
let _ = syscall::read(file, &mut env) let _ = syscall::read(file, &mut env)
.expect_notls("failed to read fsbase"); .expect_notls("failed to read gsbase");
env.gsbase = tp as u32; env.gsbase = tp as u32;
let _ = syscall::write(file, &env) let _ = syscall::write(file, &env)
.expect_notls("failed to write fsbase"); .expect_notls("failed to write gsbase");
let _ = syscall::close(file); let _ = syscall::close(file);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment