[llvm-dev] DWARF: Anyone using global variable addresses in .debug_aranges?

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 26 16:35:52 PDT 2021

(I think we had some discussion about this a few years back, but can't seem
to find it in my email)

GCC doesn't put global variables/data into arranges, only functions/code -
making arranges basically (entirely? so far as I know) the same as a CU's
address range (high/low/ranges).

Clang does put global variables in aranges. The whole arange content is
driven by the emission of address attributes on DIEs.

There's currently a bug (I introduced, someone else filed recently:
https://bugs.llvm.org/show_bug.cgi?id=52187) in aranges with gmlt caused by
the highly minimal form of gmlt I implemented a few years ago that skips
subprogram DIEs for subprograms with no inlining (they have enough info in
the line table+symbol table to do good backtraces, so we can save space by
skipping the subprogram description). But this means no address attributes
are emitted for these functions, so they don't end up in the aranges table.

I think it might be simpler to fix this issue by making aranges be
identical to CU ranges - this would be consistent with GCC's use of
aranges (omitting globals) & reduce the chance of bugs of trying to keep
two different lists in LLVM's implementation.

What do folks think?

(caveat: aranges are off by default in Clang because they seem redundant
with CU ranges - I really don't understand why anyone's using them and we
don't use them at Google... but bugs is bugs I guess)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20211026/d95117fc/attachment.html>

More information about the llvm-dev mailing list