From b882ce527d290779e04a08b40095c2916d20309b Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Sun, 15 Dec 2019 11:19:37 -0700 Subject: [PATCH] Fix allocation of TLS masters if main image does not require TLS --- src/ld_so/linker.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs index fdedf2c2..75741c1c 100644 --- a/src/ld_so/linker.rs +++ b/src/ld_so/linker.rs @@ -220,7 +220,12 @@ impl Linker { // Copy data let mut tls_offset = tls_primary; let mut tcb_masters = Vec::new(); - let mut tls_index = 0; + // Insert main image master + tcb_masters.push(Master { + ptr: ptr::null_mut(), + len: 0, + offset: 0, + }); let mut tls_ranges = BTreeMap::new(); for (elf_name, elf) in elfs.iter() { let object = match self.objects.get(*elf_name) { @@ -299,12 +304,11 @@ impl Linker { if *elf_name == primary { tls_ranges.insert(elf_name, (0, tcb_master.range())); - tcb_masters.insert(0, tcb_master); + tcb_masters[0] = tcb_master; } else { tcb_master.offset -= tls_offset; tls_offset += vsize; - tls_index += 1; - tls_ranges.insert(elf_name, (tls_index, tcb_master.range())); + tls_ranges.insert(elf_name, (tcb_masters.len(), tcb_master.range())); tcb_masters.push(tcb_master); } } -- GitLab