aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-09-02 11:42:47 +0200
committerJakub Konka <kubkon@jakubkonka.com>2024-09-04 13:34:26 +0200
commit5cb51c10debd3e9542e35e22648bca2a8b59259e (patch)
tree94cb57d962197ebd93d055fb9591a459126983e0 /src/link/Elf.zig
parent6b53dc946117110907867ee67425585ae3729750 (diff)
downloadzig-5cb51c10debd3e9542e35e22648bca2a8b59259e.tar.gz
zig-5cb51c10debd3e9542e35e22648bca2a8b59259e.zip
elf: fix relocatable mode
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig32
1 files changed, 9 insertions, 23 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index b6efa66247..cdc43b2d1a 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -3577,29 +3577,15 @@ fn updateSectionSizes(self: *Elf) !void {
}
const slice = self.sections.slice();
- // for (slice.items(.shdr), slice.items(.atom_list)) |*shdr, atom_list| {
- // if (atom_list.items.len == 0) continue;
- // if (self.requiresThunks() and shdr.sh_flags & elf.SHF_EXECINSTR != 0) continue;
- // for (atom_list.items) |ref| {
- // const atom_ptr = self.atom(ref) orelse continue;
- // if (!atom_ptr.alive) continue;
- // const offset = atom_ptr.alignment.forward(shdr.sh_size);
- // const padding = offset - shdr.sh_size;
- // atom_ptr.value = @intCast(offset);
- // shdr.sh_size += padding + atom_ptr.size;
- // shdr.sh_addralign = @max(shdr.sh_addralign, atom_ptr.alignment.toByteUnits() orelse 1);
- // }
- // }
-
- // if (self.requiresThunks()) {
- // for (slice.items(.shdr), slice.items(.atom_list), 0..) |*shdr, atom_list, shndx| {
- // if (shdr.sh_flags & elf.SHF_EXECINSTR == 0) continue;
- // if (atom_list.items.len == 0) continue;
-
- // // Create jump/branch range extenders if needed.
- // try self.createThunks(shdr, @intCast(shndx));
- // }
- // }
+ if (self.requiresThunks()) {
+ for (slice.items(.shdr), slice.items(.atom_list), 0..) |*shdr, atom_list, shndx| {
+ if (shdr.sh_flags & elf.SHF_EXECINSTR == 0) continue;
+ if (atom_list.items.len == 0) continue;
+
+ // Create jump/branch range extenders if needed.
+ try self.createThunks(shdr, @intCast(shndx));
+ }
+ }
const shdrs = slice.items(.shdr);
if (self.eh_frame_section_index) |index| {