diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-03-05 23:15:39 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-03-08 22:46:17 +0100 |
| commit | 1cf45fb20916568659fcce33dfcfd97013712270 (patch) | |
| tree | 60690af4f3f8b4292b236b28e0d8f1af6118fc67 /src/link/Elf/Object.zig | |
| parent | f3227598ebe9ac7e330fea0259d4290ee31e96b9 (diff) | |
| download | zig-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.zig | 11 |
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); |
