diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-09-05 23:10:04 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-09-06 13:14:00 +0200 |
| commit | a9df098cd2dd04e2c363b439233ff2e14e198413 (patch) | |
| tree | e9b6373bcc6bd41feddc4bf00325b0c4ef2383ed /src/link/Elf/LinkerDefined.zig | |
| parent | d9fffd431a89ed4104bcc0b2165bfb9917cdd82b (diff) | |
| download | zig-a9df098cd2dd04e2c363b439233ff2e14e198413.tar.gz zig-a9df098cd2dd04e2c363b439233ff2e14e198413.zip | |
elf: make everything upside down - track by Symbol.Index rather than Atom.Index
Diffstat (limited to 'src/link/Elf/LinkerDefined.zig')
| -rw-r--r-- | src/link/Elf/LinkerDefined.zig | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/link/Elf/LinkerDefined.zig b/src/link/Elf/LinkerDefined.zig index e7cb35b769..99125a9eb6 100644 --- a/src/link/Elf/LinkerDefined.zig +++ b/src/link/Elf/LinkerDefined.zig @@ -23,14 +23,14 @@ pub fn addGlobal(self: *LinkerDefined, name: [:0]const u8, elf_file: *Elf) !u32 .st_size = 0, }); const off = try elf_file.internString("{s}", .{name}); - const gop = try elf_file.getOrCreateGlobal(off); + const gop = try elf_file.getOrPutGlobal(off); self.symbols.addOneAssumeCapacity().* = gop.index; return gop.index; } pub fn resolveSymbols(self: *LinkerDefined, elf_file: *Elf) void { for (self.symbols.items, 0..) |index, i| { - const sym_idx = @as(u32, @intCast(i)); + const sym_idx = @as(Symbol.Index, @intCast(i)); const this_sym = self.symtab.items[sym_idx]; if (this_sym.st_shndx == elf.SHN_UNDEF) continue; @@ -86,15 +86,19 @@ pub fn resolveSymbols(self: *LinkerDefined, elf_file: *Elf) void { // } // } -pub fn asFile(self: *LinkerDefined) File { - return .{ .linker_defined = self }; +pub fn sourceSymbol(self: *LinkerDefined, symbol_index: Symbol.Index) *elf.Elf64_Sym { + return &self.symtab.items[symbol_index]; } -pub inline fn getGlobals(self: *LinkerDefined) []const u32 { +pub fn globals(self: *LinkerDefined) []const Symbol.Index { return self.symbols.items; } -pub fn fmtSymtab(self: *InternalObject, elf_file: *Elf) std.fmt.Formatter(formatSymtab) { +pub fn asFile(self: *LinkerDefined) File { + return .{ .linker_defined = self }; +} + +pub fn fmtSymtab(self: *LinkerDefined, elf_file: *Elf) std.fmt.Formatter(formatSymtab) { return .{ .data = .{ .self = self, .elf_file = elf_file, @@ -102,7 +106,7 @@ pub fn fmtSymtab(self: *InternalObject, elf_file: *Elf) std.fmt.Formatter(format } const FormatContext = struct { - self: *InternalObject, + self: *LinkerDefined, elf_file: *Elf, }; @@ -115,8 +119,8 @@ fn formatSymtab( _ = unused_fmt_string; _ = options; try writer.writeAll(" globals\n"); - for (ctx.self.getGlobals()) |index| { - const global = ctx.elf_file.getSymbol(index); + for (ctx.self.globals()) |index| { + const global = ctx.elf_file.symbol(index); try writer.print(" {}\n", .{global.fmt(ctx.elf_file)}); } } |
