| author | |
| committer | |
| log | 26da7c8207ff73927bcc8d5608703175074e266f |
| tree | 0adac21b5b90faf37e02a3f4d3ea2b7fa7463495 |
| parent | 04f8f8ad3e5c00927a5eb64e03b5381a988ed472 |
4 files changed, 24 insertions(+), 8 deletions(-)
src/link/Elf/LinkerDefined.zig+7-2| ... | @@ -447,8 +447,13 @@ fn formatSymtab( | ... | @@ -447,8 +447,13 @@ fn formatSymtab( |
| 447 | const self = ctx.self; | 447 | const self = ctx.self; |
| 448 | const elf_file = ctx.elf_file; | 448 | const elf_file = ctx.elf_file; |
| 449 | try writer.writeAll(" globals\n"); | 449 | try writer.writeAll(" globals\n"); |
| 450 | for (self.symbols.items) |sym| { | 450 | for (self.symbols.items, 0..) |sym, i| { |
| 451 | try writer.print(" {}\n", .{sym.fmt(elf_file)}); | 451 | const ref = self.resolveSymbol(@intCast(i), elf_file); |
| 452 | if (elf_file.symbol(ref)) |ref_sym| { | ||
| 453 | try writer.print(" {}\n", .{ref_sym.fmt(elf_file)}); | ||
| 454 | } else { | ||
| 455 | try writer.print(" {s} : unclaimed\n", .{sym.name(elf_file)}); | ||
| 456 | } | ||
| 452 | } | 457 | } |
| 453 | } | 458 | } |
| 454 | 459 |
src/link/Elf/Object.zig+9-3| ... | @@ -612,7 +612,7 @@ pub fn resolveSymbols(self: *Object, elf_file: *Elf) !void { | ... | @@ -612,7 +612,7 @@ pub fn resolveSymbols(self: *Object, elf_file: *Elf) !void { |
| 612 | const first_global = self.first_global orelse return; | 612 | const first_global = self.first_global orelse return; |
| 613 | for (self.globals(), first_global..) |_, i| { | 613 | for (self.globals(), first_global..) |_, i| { |
| 614 | const esym = self.symtab.items[i]; | 614 | const esym = self.symtab.items[i]; |
| 615 | if (esym.st_shndx != elf.SHN_ABS and esym.st_shndx != elf.SHN_COMMON) { | 615 | if (esym.st_shndx != elf.SHN_ABS and esym.st_shndx != elf.SHN_COMMON and esym.st_shndx != elf.SHN_UNDEF) { |
| 616 | const atom_index = self.atoms_indexes.items[esym.st_shndx]; | 616 | const atom_index = self.atoms_indexes.items[esym.st_shndx]; |
| 617 | const atom_ptr = self.atom(atom_index) orelse continue; | 617 | const atom_ptr = self.atom(atom_index) orelse continue; |
| 618 | if (!atom_ptr.alive) continue; | 618 | if (!atom_ptr.alive) continue; |
| ... | @@ -1492,8 +1492,14 @@ fn formatSymtab( | ... | @@ -1492,8 +1492,14 @@ fn formatSymtab( |
| 1492 | try writer.print(" {}\n", .{sym.fmt(elf_file)}); | 1492 | try writer.print(" {}\n", .{sym.fmt(elf_file)}); |
| 1493 | } | 1493 | } |
| 1494 | try writer.writeAll(" globals\n"); | 1494 | try writer.writeAll(" globals\n"); |
| 1495 | for (object.globals()) |sym| { | 1495 | for (object.globals(), 0..) |sym, i| { |
| 1496 | try writer.print(" {}\n", .{sym.fmt(elf_file)}); | 1496 | const first_global = object.first_global.?; |
| 1497 | const ref = object.resolveSymbol(@intCast(i + first_global), elf_file); | ||
| 1498 | if (elf_file.symbol(ref)) |ref_sym| { | ||
| 1499 | try writer.print(" {}\n", .{ref_sym.fmt(elf_file)}); | ||
| 1500 | } else { | ||
| 1501 | try writer.print(" {s} : unclaimed\n", .{sym.name(elf_file)}); | ||
| 1502 | } | ||
| 1497 | } | 1503 | } |
| 1498 | } | 1504 | } |
| 1499 | 1505 |
src/link/Elf/SharedObject.zig+7-2| ... | @@ -493,8 +493,13 @@ fn formatSymtab( | ... | @@ -493,8 +493,13 @@ fn formatSymtab( |
| 493 | const shared = ctx.shared; | 493 | const shared = ctx.shared; |
| 494 | const elf_file = ctx.elf_file; | 494 | const elf_file = ctx.elf_file; |
| 495 | try writer.writeAll(" globals\n"); | 495 | try writer.writeAll(" globals\n"); |
| 496 | for (shared.symbols.items) |sym| { | 496 | for (shared.symbols.items, 0..) |sym, i| { |
| 497 | try writer.print(" {}\n", .{sym.fmt(elf_file)}); | 497 | const ref = shared.resolveSymbol(@intCast(i), elf_file); |
| 498 | if (elf_file.symbol(ref)) |ref_sym| { | ||
| 499 | try writer.print(" {}\n", .{ref_sym.fmt(elf_file)}); | ||
| 500 | } else { | ||
| 501 | try writer.print(" {s} : unclaimed\n", .{sym.name(elf_file)}); | ||
| 502 | } | ||
| 498 | } | 503 | } |
| 499 | } | 504 | } |
| 500 | 505 |
src/link/Elf/synthetic_sections.zig+1-1| ... | @@ -417,9 +417,9 @@ pub const ZigGotSection = struct { | ... | @@ -417,9 +417,9 @@ pub const ZigGotSection = struct { |
| 417 | _ = unused_fmt_string; | 417 | _ = unused_fmt_string; |
| 418 | const zig_got = ctx.zig_got; | 418 | const zig_got = ctx.zig_got; |
| 419 | const elf_file = ctx.elf_file; | 419 | const elf_file = ctx.elf_file; |
| 420 | const zo = elf_file.zigObjectPtr().?; | ||
| 421 | try writer.writeAll(".zig.got\n"); | 420 | try writer.writeAll(".zig.got\n"); |
| 422 | for (zig_got.entries.items, 0..) |entry, index| { | 421 | for (zig_got.entries.items, 0..) |entry, index| { |
| 422 | const zo = elf_file.zigObjectPtr().?; | ||
| 423 | const symbol = zo.symbol(entry); | 423 | const symbol = zo.symbol(entry); |
| 424 | try writer.print(" {d}@0x{x} => {d}@0x{x} ({s})\n", .{ | 424 | try writer.print(" {d}@0x{x} => {d}@0x{x} ({s})\n", .{ |
| 425 | index, | 425 | index, |