Not all of the functions have entries in .debug_aranges, but there are always .debug_info entries for them. Currently, this generates aranges for all of the compilation unit if there are no .debug_arange entries (see how ParsedCUOffsets is used). But this is not completely correct, in practice, a compilation unit might have an entry in .debug_arange which doesn't cover all of the functions and it's .debug_infos still, have to be considered.
To solve the problem remove ParsedCUOffsets which is used to determine if a CU has a .debug_arages.
With this change I was able to get full locations in ASAN stack traces with llvm-symbolizer that previously were not decoded:
Before:
#2 0x7f9a8807b2bb in foo(bar<void ()>) (.../libfoo.so+0xff2bb)
After:
#2 0x7f1a85c8f2bb in fin foo(bar<void ()>) foo/foo.cpp:589
This seems odd, did something go wrong with uploading this patch?