aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf/LinkerDefined.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-09-05 23:10:04 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-09-06 13:14:00 +0200
commita9df098cd2dd04e2c363b439233ff2e14e198413 (patch)
treee9b6373bcc6bd41feddc4bf00325b0c4ef2383ed /src/link/Elf/LinkerDefined.zig
parentd9fffd431a89ed4104bcc0b2165bfb9917cdd82b (diff)
downloadzig-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.zig22
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)});
}
}