Fix TLS offsets
This commit is contained in:
+10
-3
@@ -316,6 +316,12 @@ impl Linker {
|
||||
mmap_data.copy_from_slice(obj_data);
|
||||
},
|
||||
program_header::PT_TLS => {
|
||||
let valign = if ph.p_align > 0 {
|
||||
((ph.p_memsz + (ph.p_align - 1))/ph.p_align) * ph.p_align
|
||||
} else {
|
||||
ph.p_memsz
|
||||
} as usize;
|
||||
|
||||
let obj_data = {
|
||||
let range = ph.file_range();
|
||||
match object.get(range.clone()) {
|
||||
@@ -328,11 +334,12 @@ impl Linker {
|
||||
|
||||
let tls_data = {
|
||||
let (index, start) = if *elf_name == primary {
|
||||
(0, tls.len() - tls_primary)
|
||||
(0, tls.len() - valign)
|
||||
} else {
|
||||
tls_offset += obj_data.len();
|
||||
let start = tls.len() - (tls_offset + valign);
|
||||
tls_offset += vsize;
|
||||
tls_index += 1;
|
||||
(tls_index, tls.len() - tls_offset)
|
||||
(tls_index, start)
|
||||
};
|
||||
let range = start..start + obj_data.len();
|
||||
match tls.get_mut(range.clone()) {
|
||||
|
||||
Reference in New Issue
Block a user