From 3bfa63aa6151c339e02f36819f23ea547c41eb8f Mon Sep 17 00:00:00 2001 From: Tau Date: Mon, 24 Jun 2024 09:30:22 +0200 Subject: [PATCH] ModuleDebugInfo: Discard C++ namespaces appearing in PDBs --- lib/std/debug.zig | 13 ++++++++++++- src/codegen/llvm.zig | 3 +-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/std/debug.zig b/lib/std/debug.zig index 568b49f2f6..febc0b2609 100644 --- 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 index 628b01e497..24a66f75bf 100644 --- 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 => {}, }