Hack to use the correct TLS size for the first TLS module
This commit is contained in:
@@ -28,6 +28,7 @@ use super::{
|
||||
debug::{RTLDState, _dl_debug_state, _r_debug},
|
||||
dso::{is_pie_enabled, DSO},
|
||||
tcb::{round_up, Master, Tcb},
|
||||
ExpectTlsFree,
|
||||
PATH_SEP,
|
||||
};
|
||||
|
||||
@@ -226,6 +227,13 @@ impl Linker {
|
||||
self.next_object_id += 1;
|
||||
|
||||
if let Some(master) = tcb_master {
|
||||
if self.next_tls_module_id == 0 {
|
||||
// Hack to allocate TCB on the first TLS module
|
||||
unsafe {
|
||||
let tcb = Tcb::new(master.offset).expect_notls("failed to allocate TCB");
|
||||
tcb.activate();
|
||||
}
|
||||
}
|
||||
self.next_tls_module_id += 1;
|
||||
self.tls_size = master.offset;
|
||||
tcb_masters.push(master);
|
||||
|
||||
+1
-7
@@ -17,7 +17,7 @@ use crate::{
|
||||
ALLOCATOR,
|
||||
};
|
||||
|
||||
use super::{access::accessible, debug::_r_debug, linker::Linker, tcb::Tcb, ExpectTlsFree, PATH_SEP};
|
||||
use super::{access::accessible, debug::_r_debug, linker::Linker, tcb::Tcb, PATH_SEP};
|
||||
use crate::header::sys_auxv::{AT_ENTRY, AT_PHDR};
|
||||
use goblin::elf::header::header64::SIZEOF_EHDR;
|
||||
|
||||
@@ -213,12 +213,6 @@ 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.
|
||||
|
||||
Reference in New Issue
Block a user