Browse Source

Correctly set tcb pointer to the end of TLS

Jeremy Soller 6 years ago
parent
commit
9f5e5f24dc
1 changed files with 2 additions and 2 deletions
  1. 2 2
      src/ld_so/linker.rs

+ 2 - 2
src/ld_so/linker.rs

@@ -39,7 +39,7 @@ unsafe fn allocate_tls(size: usize) -> Result<&'static mut [u8]> {
 
     let mut tls = slice::from_raw_parts_mut(ptr as *mut u8, size);
     let mut tcb = slice::from_raw_parts_mut((ptr as *mut u8).add(size), PAGE_SIZE);
-    *(tcb.as_mut_ptr() as *mut *mut u8) = tcb.as_mut_ptr();
+    *(tcb.as_mut_ptr() as *mut *mut u8) = tls.as_mut_ptr().add(size);
 
     #[cfg(target_arch = "x86_64")]
     {
@@ -70,7 +70,7 @@ unsafe fn allocate_tls(size: usize) -> Result<&'static mut [u8]> {
 
     let mut tls = slice::from_raw_parts_mut(ptr as *mut u8, size);
     let mut tcb = slice::from_raw_parts_mut(0xB000_0000 as *mut u8, PAGE_SIZE);
-    *(tcb.as_mut_ptr() as *mut *mut u8) = tcb.as_mut_ptr();
+    *(tcb.as_mut_ptr() as *mut *mut u8) = tls.as_mut_ptr().add(size);
 
     Ok(tls)
 }