aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf/Object.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-03-05 23:15:39 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-03-08 22:46:17 +0100
commit1cf45fb20916568659fcce33dfcfd97013712270 (patch)
tree60690af4f3f8b4292b236b28e0d8f1af6118fc67 /src/link/Elf/Object.zig
parentf3227598ebe9ac7e330fea0259d4290ee31e96b9 (diff)
downloadzig-1cf45fb20916568659fcce33dfcfd97013712270.tar.gz
zig-1cf45fb20916568659fcce33dfcfd97013712270.zip
elf+aarch64: implement enough to link dynamically with gcc as the driver
Diffstat (limited to 'src/link/Elf/Object.zig')
-rw-r--r--src/link/Elf/Object.zig11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig
index d1b35ad286..cc135f2f97 100644
--- a/src/link/Elf/Object.zig
+++ b/src/link/Elf/Object.zig
@@ -371,17 +371,16 @@ fn parseEhFrame(self: *Object, allocator: Allocator, handle: std.fs.File, shndx:
const relocs_shndx = for (self.shdrs.items, 0..) |shdr, i| switch (shdr.sh_type) {
elf.SHT_RELA => if (shdr.sh_info == shndx) break @as(u32, @intCast(i)),
else => {},
- } else {
- // TODO: convert into an error
- log.debug("{s}: missing reloc section for unwind info section", .{self.fmtPath()});
- return;
- };
+ } else null;
const raw = try self.preadShdrContentsAlloc(allocator, handle, shndx);
defer allocator.free(raw);
const data_start = @as(u32, @intCast(self.eh_frame_data.items.len));
try self.eh_frame_data.appendSlice(allocator, raw);
- const relocs = try self.preadRelocsAlloc(allocator, handle, relocs_shndx);
+ const relocs = if (relocs_shndx) |index|
+ try self.preadRelocsAlloc(allocator, handle, index)
+ else
+ &[0]elf.Elf64_Rela{};
defer allocator.free(relocs);
const rel_start = @as(u32, @intCast(self.relocs.items.len));
try self.relocs.appendUnalignedSlice(allocator, relocs);