diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-12 10:29:13 +0100 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-11-12 18:12:41 -0500 |
| commit | 0dab319e86f0918331be2e49dde22e9eaf93a46b (patch) | |
| tree | ea683340a274286210cd5069413500960e398e91 | |
| parent | 984c5985907fdb6f48543e3d1e27ffd4d54b0957 (diff) | |
| download | zig-0dab319e86f0918331be2e49dde22e9eaf93a46b.tar.gz zig-0dab319e86f0918331be2e49dde22e9eaf93a46b.zip | |
elf: dump PLT entries
| -rw-r--r-- | src/link/Elf.zig | 3 | ||||
| -rw-r--r-- | src/link/Elf/synthetic_sections.zig | 30 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 3aa7708190..d4cace5abe 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -6265,8 +6265,9 @@ fn fmtDumpState( try writer.print("linker_defined({d}) : (linker defined)\n", .{index}); try writer.print("{}\n", .{linker_defined.fmtSymtab(self)}); } - try writer.print("{}\n", .{self.got.fmt(self)}); try writer.print("{}\n", .{self.zig_got.fmt(self)}); + try writer.print("{}\n", .{self.got.fmt(self)}); + try writer.print("{}\n", .{self.plt.fmt(self)}); try writer.writeAll("Output COMDAT groups\n"); for (self.comdat_group_sections.items) |cg| { diff --git a/src/link/Elf/synthetic_sections.zig b/src/link/Elf/synthetic_sections.zig index 7419709afc..47e72cb1e3 100644 --- a/src/link/Elf/synthetic_sections.zig +++ b/src/link/Elf/synthetic_sections.zig @@ -935,6 +935,36 @@ pub const PltSection = struct { ilocal += 1; } } + + const FormatCtx = struct { + plt: PltSection, + elf_file: *Elf, + }; + + pub fn fmt(plt: PltSection, elf_file: *Elf) std.fmt.Formatter(format2) { + return .{ .data = .{ .plt = plt, .elf_file = elf_file } }; + } + + pub fn format2( + ctx: FormatCtx, + comptime unused_fmt_string: []const u8, + options: std.fmt.FormatOptions, + writer: anytype, + ) !void { + _ = options; + _ = unused_fmt_string; + try writer.writeAll("PLT\n"); + for (ctx.plt.symbols.items, 0..) |symbol_index, i| { + const symbol = ctx.elf_file.symbol(symbol_index); + try writer.print(" {d}@0x{x} => {d}@0x{x} ({s})\n", .{ + i, + symbol.pltAddress(ctx.elf_file), + symbol_index, + symbol.address(.{}, ctx.elf_file), + symbol.name(ctx.elf_file), + }); + } + } }; pub const GotPltSection = struct { |
