Currently the backtrace emitted on windows when llvm-symbolizer is not available looks like:
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: c:\\u\\br2\\bin\\ld.lld.exe -o C:\\Users\\BDUNBO~1\\AppData\\Local\\Temp\\lit-tmp-8ymp966z\\tmpztn1fyw1 0x00007FF64EE51D20 (0x0000000000000083 0x00007FF64EEFCAA1 0x0000000000000000 0x000001750CD01140) 0x00007FF64EEFC9DB (0x0000000000000000 0x0000000703B8EBA9 0x0000017603357418 0x0000000000000001) ...
This is not useful in many circumstance as the program counter (RIP) (the numbers in the left-most column) cannot be easily decoded because the addresses have the containing module's run-time base address added into them, but we don't know what those base addresses are. This change emits a module offset rather than an address.
Example output after this change:
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: c:\\u\\br2\\bin\\ld.lld.exe -o C:\\Users\\BDUNBO~1\\AppData\\Local\\Temp\\lit-tmp-8ymp966z\\tmpztn1fyw1 0x00007FF64EE51D20 (0x0000000000000083 0x00007FF64EEFCAA1 0x0000000000000000 0x000001750CD01140), c:\u\br2\bin\ld.lld.exe(0x0000000000B70000) + 0x17E8F7 byte(s) 0x00007FF64EEFC9DB (0x0000000000000000 0x0000000703B8EBA9 0x0000017603357418 0x0000000000000001), C:\WINDOWS\SYSTEM32\ntdll.dll(0x0000000077560000) + 0x46E2C byte(s) ...
Note that the above output is an example of the output when file and line information cannot be retrieved for symbols. This is reasonably likely, for example if the .pdb files were not shipped with the toolchain binaries. If the file and line info can be retrieved lines like the following would be output:
0x00007FF64EE51D20 (0x0000000000000083 0x00007FF64EEFCAA1 0x0000000000000000 0x000001750CD01140), C:\WINDOWS\SYSTEM32\ntdll.dll(0x0000000077560000) + 0x46E2C byte(s), RtlAllocateHeap() + 0x109C byte(s)
I propose we scrap this parameter printing. I've never found it useful. It's a bunch of hex noise that makes the crash report look scary. My understanding is that doesn't work well on win64, since it assumes parameters are homed into the shadow stack space, which Clang doesn't generally do.