Fix TLS offsets

This commit is contained in:
Jeremy Soller
2019-04-14 08:40:03 -06:00
parent cb9e779ca1
commit 47baf499bf
+10 -3
View File
@@ -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()) {