zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 3bfa63aa6151c339e02f36819f23ea547c41eb8f (tree)
parent 9c2d597e69d13326970daadbaf7fd14f7da64c45
Author: Tau <jonathan.haehne@hotmail.com>
Date:   Mon, 24 Jun 2024 09:30:22 +0200

ModuleDebugInfo: Discard C++ namespaces appearing in PDBs

Diffstat:
Mlib/std/debug.zig | 13++++++++++++-
Msrc/codegen/llvm.zig | 3+--
2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/lib/std/debug.zig b/lib/std/debug.zig @@ -2465,13 +2465,24 @@ pub const ModuleDebugInfo = switch (native_os) { module, relocated_address - coff_section.virtual_address, ) orelse "???"; + // While DWARF gets us just the function's own name, the PDB + // stores it qualified with its namespace by the C++ `::` + // operator. We can strip that for consistency; the + // SymbolInfo will contain the line number, which is a more + // language-neutral way of distinguishing same-named symbols + // anyway. + const symbol_simple_name = if (mem.indexOf(u8, symbol_name, "::")) |cpp_namespace| + symbol_name[cpp_namespace + 2 ..] + else + symbol_name; + const opt_line_info = try self.pdb.?.getLineNumberInfo( module, relocated_address - coff_section.virtual_address, ); return SymbolInfo{ - .symbol_name = symbol_name, + .symbol_name = symbol_simple_name, .compile_unit_name = obj_basename, .line_info = opt_line_info, }; diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig @@ -2457,8 +2457,7 @@ pub const Object = struct { // We still may want these for a Zig expression // evaluator in debuggers, but for now they are // completely useless. - .ComptimeInt, .ComptimeFloat, - .Type, .Undefined, .Null, .EnumLiteral => continue, + .ComptimeInt, .ComptimeFloat, .Type, .Undefined, .Null, .EnumLiteral => continue, else => {}, }