[PATCH] D67768: [DebugInfo] Add interface for pre-calculating the size of emitted DWARF

David Stenberg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 19 09:08:13 PDT 2019


dstenb created this revision.
dstenb added reviewers: aprantl, vsk, NikolaPrica, djtodoro.
dstenb added a project: debug-info.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
dstenb added a child revision: D67492: [DebugInfo] Add a DW_OP_LLVM_entry_value operation.

DWARF's DW_OP_entry_value operation has two operands; the first is a
ULEB128 operand that specifies the size of the second operand, which is
a DWARF block. This means that we need to be able to pre-calculate and
emit the size of DWARF expressions before emitting them. There is
currently no interface for doing this in DwarfExpression, so this patch
introduces that.

When implementing this I initially thought about running through
DwarfExpression's emission two times; first with a temporary buffer to
emit the expression, in order to being able to calculate the size of
that emitted data. However, DwarfExpression is a quite complex state
machine, so I decided against that, as it seemed like the two runs could
get out of sync, resulting in incorrect size operands. Therefore I have
implemented this in a way that we only have to run DwarfExpression once.
The idea is to emit DWARF to a temporary buffer, for which it is
possible to query the size. The data in the temporary buffer can then be
emitted to DwarfExpression's main output.

In the case of DIEDwarfExpression, a temporary DIE is used. The values
are all allocated using the same BumpPtrAllocator as for all other DIEs,
and the values are then transferred to the real value list. In the case
of DebugLocDwarfExpression, the temporary buffer is implemented using a
BufferByteStreamer which emits to a buffer in the DwarfExpression
object.


Repository:
  rL LLVM

https://reviews.llvm.org/D67768

Files:
  llvm/include/llvm/CodeGen/DIE.h
  llvm/lib/CodeGen/AsmPrinter/ByteStreamer.h
  llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
  llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h
  llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D67768.220877.patch
Type: text/x-patch
Size: 10688 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190919/4afaa169/attachment.bin>


More information about the llvm-commits mailing list