Details
Diff Detail
Event Timeline
It looks like this is able to salvage actual variables in the wild:
Assertion failed: (false && "hi! salvaged a xor!"), function salvageDebugInfo ... Running pass 'CallGraph Pass Manager' on module '/Users/vsk/src/llvm.org-debugify/llvm/lib/Support/Regex.cpp'. Assertion failed: (false && "hi! salvaged a xor!"), function salvageDebugInfo ... Running pass 'CallGraph Pass Manager' on module '/Users/vsk/src/llvm.org-debugify/llvm/lib/Support/APInt.cpp'.
Here are some better numbers from a stage2 build of clang:
12273 SALVAGE: ADD 14184 SALVAGE: MISSED 1064 SALVAGE: OR 14 SALVAGE: SUB 259 SALVAGE: XOR
The "MISSED" case refers to binary operators we simply haven't taught salvageDebugInfo() about.
Thanks! Might be worth also measuring the size of .debug_loc as we are doing this. We may need to start compressing locations by using DWARF procedures for common patterns (DW_OP_call).
I extended this patch to salvage debug values from mul/sdiv/srem, shl/lhsr/ashr, and sub instructions (in addition to xor instructions). Next, I prepared dsyms for stage2 builds of clang (-O3 -g). Here are the results:
pre-patch --------- Segment __DWARF: 814804992 Section __debug_line: 36805639 (35.10 MB) Section __debug_pubnames: 8291810 Section __debug_pubtypes: 62606366 Section __debug_ranges: 43286544 Section __debug_loc: 122491744 (116.81 MB) Section __debug_aranges: 986672 Section __debug_info: 379630571 (362.04 MB) Section __debug_abbrev: 10685 Section __debug_str: 106914677 Section __apple_names: 35657500 Section __apple_namespac: 50616 Section __apple_types: 18069091 Section __apple_objc: 36 total 814801951 {"version":"1","file":"pre-patches-clang.dSYM/Contents/Resources/DWARF/clang-7.0","format":"Mach-O 64-bit x86-64","source functions":309766,"inlined functions":3351149,"unique source variables":1981705,"source variables":403779101,"variables with location":4127221,"scope bytes total":522119469,"scope bytes covered":305284275} post-patch ---------- Salvaging dbg.values from: mul/sdiv/srem, shl/lhsr/ashr, sub, xor Segment __DWARF: 814891008 Section __debug_line: 36806878 (35.10 MB, +0%) Section __debug_pubnames: 8291810 Section __debug_pubtypes: 62606366 Section __debug_ranges: 43287504 Section __debug_loc: 122557034 (116.88 MB, +0.06%) Section __debug_aranges: 986672 Section __debug_info: 379647347 (362.06 MB, +0%) Section __debug_abbrev: 10685 Section __debug_str: 106914677 Section __apple_names: 35658692 Section __apple_namespac: 50616 Section __apple_types: 18069091 Section __apple_objc: 36 total 814887408 {"version":"1","file":"post-patches-clang.dSYM/Contents/Resources/DWARF/clang-7.0","format":"Mach-O 64-bit x86-64","source functions":309766,"inlined functions":3351298,"unique source variables":1982115,"source variables":403824889,"variables with location":4128581,"scope bytes total":522201413,"scope bytes covered":305416207}
There is a modest increase of the debug_loc section, which indicates that users will notice a small increase in the number of available debug values, without seeing too much binary size bloat.
I also included statistics from dwarfdump: post-patch, we have 410 additional unique source variables available.