aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-10-11 13:27:36 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-10-16 19:33:05 +0200
commit2aa6099ad9dc5c45994101c94888deeab4ec2a06 (patch)
tree2fcb83181aeeb57c35019ef847d132b723255fe2 /src
parent8be71906d914563ea3e3e154ab948b4d78a1dcd3 (diff)
downloadzig-2aa6099ad9dc5c45994101c94888deeab4ec2a06.tar.gz
zig-2aa6099ad9dc5c45994101c94888deeab4ec2a06.zip
elf: assume only one TLS segment for now
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 1e89c38cf5..34deb7f08f 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -4685,11 +4685,13 @@ fn allocateSpecialPhdrs(self: *Elf) void {
}
// Allocate TLS phdr
+ // We assume TLS sections are laid out contiguously and that there is
+ // a single TLS segment.
if (self.phdr_tls_index) |index| {
const slice = self.shdrs.items;
const phdr = &self.phdrs.items[index];
var shndx: u16 = 0;
- outer: while (shndx < slice.len) {
+ while (shndx < slice.len) {
const shdr = slice[shndx];
if (shdr.sh_flags & elf.SHF_TLS == 0) {
shndx += 1;
@@ -4704,7 +4706,8 @@ fn allocateSpecialPhdrs(self: *Elf) void {
while (shndx < slice.len) : (shndx += 1) {
const next = slice[shndx];
- if (next.sh_flags & elf.SHF_TLS == 0) continue :outer;
+ // if (next.sh_flags & elf.SHF_TLS == 0) continue :outer; // TODO uncomment if we permit more TLS segments
+ if (next.sh_flags & elf.SHF_TLS == 0) break;
self.addShdrToPhdr(shndx, index);
}
}