diff options
Diffstat (limited to 'src')
| -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 { |
