[PATCH] D70081: DWARFDebugLoclists: add location list "interpretation" logic

Pavel Labath via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 11 07:00:16 PST 2019


labath created this revision.
labath added reviewers: dblaikie, probinson, JDevlieghere, aprantl, SouraVX.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
labath marked an inline comment as done.
labath added inline comments.


================
Comment at: llvm/test/DebugInfo/X86/loclists-dwp.ll:22-25
+; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000000, 0x0000000000000006): DW_OP_reg5 RDI)
 
 ; CHECK:      DW_AT_location [DW_FORM_sec_offset]   (0x00000000
+; CHECK-NEXT: DW_LLE_startx_length (0x0000000000000000, 0x0000000000000000): DW_OP_reg5 RDI)
----------------
This is the test I was talking about above. It's sole purpose is to test handling of dwp files, but one cannot resolve addresses properly just by looking at the dwp file -- it doesn't have the address pool, and llvm-dwarfdump does not have the ability to provide it right now. By maintaining the ability to print _something_ in this case, we can keep the test, and make dumps of dwp/dwo files more useful.


This patch extracts the logic for computing the "absolute" locations,
which was partially present in the debug_loclists dumper, completes it,
and moves it into a separate function. This makes it possible to later
reuse the same logic for uses other than dumping.

The dumper is changed to reuse the location list interpreter, and its
format is changed somewhat. In "verbose" mode it prints the "raw" value
of a location list, the interpreted location (if available) and the
expression itself. In non-verbose mode it prints only one of the
location forms: it prefers the interpreted form, but falls back to the
"raw" format if interpretation is not possible (for instance, because we
were not given a base address, or the resolution of indirect addresses
failed).

This patch also undos some of the changes made in D69672 <https://reviews.llvm.org/D69672>, namely the
part about making all functions static. The main reason for this is that
I learned that the original approach (dumping only fully resolved
locations) meant that it was impossible to rewrite one of the existing
tests. To make that possible (and make the "inline location" dump work
in more cases), I now reuse the same dumping mechanism as is used for
section-based dumping. As this required having more objects know about
the various location lists classes, it seemed like a good idea to create
an interface abstracting the difference between them.

Therefore, I now create a DWARFLocationTable class, which will serve as
a base class for the location list classes. DWARFDebugLoclists is made
to inherit from that. DWARFDebugLoc will follow.

Another positive effect of this change is that section-based dumping
code will not need to use templates (as originally) envisioned, and that
the argument lists of the dumping functions become shorter.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D70081

Files:
  llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
  llvm/include/llvm/DebugInfo/DWARF/DWARFLocationExpression.h
  llvm/lib/DebugInfo/DWARF/DWARFContext.cpp
  llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
  llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
  llvm/test/CodeGen/X86/debug-loclists.ll
  llvm/test/DebugInfo/X86/fission-ranges.ll
  llvm/test/DebugInfo/X86/loclists-dwp.ll
  llvm/test/tools/llvm-dwarfdump/X86/debug_loc_dwo.s
  llvm/test/tools/llvm-dwarfdump/X86/debug_loclists.s
  llvm/test/tools/llvm-dwarfdump/X86/debug_loclists_startx_length.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70081.228686.patch
Type: text/x-patch
Size: 29534 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191111/7613e05a/attachment-0001.bin>


More information about the llvm-commits mailing list