Skip to content

Commit 0b0625c

Browse files
authored
Merge pull request #20062 from ziglang/macho-perf-bug
link/macho: fix perf bug in DWARF parsing
2 parents 710d745 + 42c0585 commit 0b0625c

File tree

8 files changed

+488
-525
lines changed

8 files changed

+488
-525
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,6 @@ set(ZIG_STAGE2_SOURCES
613613
src/link/MachO/Atom.zig
614614
src/link/MachO/CodeSignature.zig
615615
src/link/MachO/DebugSymbols.zig
616-
src/link/MachO/DwarfInfo.zig
617616
src/link/MachO/Dylib.zig
618617
src/link/MachO/InternalObject.zig
619618
src/link/MachO/Object.zig
@@ -625,6 +624,7 @@ set(ZIG_STAGE2_SOURCES
625624
src/link/MachO/dyld_info/Rebase.zig
626625
src/link/MachO/dyld_info/Trie.zig
627626
src/link/MachO/dyld_info/bind.zig
627+
src/link/MachO/dwarf.zig
628628
src/link/MachO/eh_frame.zig
629629
src/link/MachO/fat.zig
630630
src/link/MachO/file.zig

lib/std/Build/Step/CheckObject.zig

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,9 +1087,25 @@ const MachODumper = struct {
10871087
try writer.writeAll(symtab_label ++ "\n");
10881088

10891089
for (ctx.symtab.items) |sym| {
1090-
if (sym.stab()) continue;
10911090
const sym_name = ctx.getString(sym.n_strx);
1092-
if (sym.sect()) {
1091+
if (sym.stab()) {
1092+
const tt = switch (sym.n_type) {
1093+
macho.N_SO => "SO",
1094+
macho.N_OSO => "OSO",
1095+
macho.N_BNSYM => "BNSYM",
1096+
macho.N_ENSYM => "ENSYM",
1097+
macho.N_FUN => "FUN",
1098+
macho.N_GSYM => "GSYM",
1099+
macho.N_STSYM => "STSYM",
1100+
else => "UNKNOWN STAB",
1101+
};
1102+
try writer.print("{x}", .{sym.n_value});
1103+
if (sym.n_sect > 0) {
1104+
const sect = ctx.sections.items[sym.n_sect - 1];
1105+
try writer.print(" ({s},{s})", .{ sect.segName(), sect.sectName() });
1106+
}
1107+
try writer.print(" {s} (stab) {s}\n", .{ tt, sym_name });
1108+
} else if (sym.sect()) {
10931109
const sect = ctx.sections.items[sym.n_sect - 1];
10941110
try writer.print("{x} ({s},{s})", .{
10951111
sym.n_value,

src/link/MachO.zig

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ pub fn flushModule(self: *MachO, arena: Allocator, prog_node: *std.Progress.Node
535535

536536
try self.addUndefinedGlobals();
537537
try self.resolveSymbols();
538+
try self.parseDebugInfo();
538539
try self.resolveSyntheticSymbols();
539540

540541
try self.convertTentativeDefinitions();
@@ -1409,6 +1410,12 @@ fn markLive(self: *MachO) void {
14091410
}
14101411
}
14111412

1413+
pub fn parseDebugInfo(self: *MachO) !void {
1414+
for (self.objects.items) |index| {
1415+
try self.getFile(index).?.object.parseDebugInfo(self);
1416+
}
1417+
}
1418+
14121419
fn resolveSyntheticSymbols(self: *MachO) !void {
14131420
const internal = self.getInternalObject() orelse return;
14141421

@@ -4840,7 +4847,6 @@ const Cache = std.Build.Cache;
48404847
const CodeSignature = @import("MachO/CodeSignature.zig");
48414848
const Compilation = @import("../Compilation.zig");
48424849
pub const DebugSymbols = @import("MachO/DebugSymbols.zig");
4843-
const DwarfInfo = @import("MachO/DwarfInfo.zig");
48444850
const Dylib = @import("MachO/Dylib.zig");
48454851
const ExportTrieSection = synthetic.ExportTrieSection;
48464852
const File = @import("MachO/file.zig").File;

0 commit comments

Comments
 (0)