Browse Source

Ensure there is a stub Tcb for dynamically linked binaries

Jeremy Soller 2 years ago
parent
commit
b13e96ffb8
1 changed files with 7 additions and 1 deletions
  1. 7 1
      src/ld_so/start.rs

+ 7 - 1
src/ld_so/start.rs

@@ -17,7 +17,7 @@ use crate::{
     ALLOCATOR,
 };
 
-use super::{access::accessible, debug::_r_debug, linker::Linker, tcb::Tcb, PATH_SEP};
+use super::{access::accessible, debug::_r_debug, linker::Linker, tcb::Tcb, ExpectTlsFree, PATH_SEP};
 use crate::header::sys_auxv::{AT_ENTRY, AT_PHDR};
 use goblin::elf::header::header64::SIZEOF_EHDR;
 
@@ -213,6 +213,12 @@ pub extern "C" fn relibc_ld_so_start(sp: &'static mut Stack, ld_entry: usize) ->
         }
     };
 
+    // Ensure there is a stub Tcb
+    unsafe {
+        let tcb = Tcb::new(0).expect_notls("failed to allocate TCB");
+        tcb.activate();
+    }
+
     // if we are not running in manual mode, then the main
     // program is already loaded by the kernel and we want
     // to use it. on redox, we treat it the same.