aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-11-12 10:29:13 +0100
committerJacob Young <jacobly0@users.noreply.github.com>2023-11-12 18:12:41 -0500
commit0dab319e86f0918331be2e49dde22e9eaf93a46b (patch)
treeea683340a274286210cd5069413500960e398e91 /src
parent984c5985907fdb6f48543e3d1e27ffd4d54b0957 (diff)
downloadzig-0dab319e86f0918331be2e49dde22e9eaf93a46b.tar.gz
zig-0dab319e86f0918331be2e49dde22e9eaf93a46b.zip
elf: dump PLT entries
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig3
-rw-r--r--src/link/Elf/synthetic_sections.zig30
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 {