diff options
author | Adrian Prantl <aprantl@apple.com> | 2014-08-01 22:11:58 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2014-08-01 22:11:58 +0000 |
commit | b1416837f97cd1ec212673fb90fab0fb7df6c442 (patch) | |
tree | 22c532dbd53626600d03903704c6911f00e3d9af /llvm/docs/SourceLevelDebugging.rst | |
parent | 4184c79975256bbb9d3eec1622b99361770a6644 (diff) | |
download | llvm-b1416837f97cd1ec212673fb90fab0fb7df6c442.zip llvm-b1416837f97cd1ec212673fb90fab0fb7df6c442.tar.gz llvm-b1416837f97cd1ec212673fb90fab0fb7df6c442.tar.bz2 |
Debug info: Infrastructure to support debug locations for fragmented
variables (for example, by-value struct arguments passed in registers, or
large integer values split across several smaller registers).
On the IR level, this adds a new type of complex address operation OpPiece
to DIVariable that describes size and offset of a variable fragment.
On the DWARF emitter level, all pieces describing the same variable are
collected, sorted and emitted as DWARF expressions using the DW_OP_piece
and DW_OP_bit_piece operators.
http://reviews.llvm.org/D3373
rdar://problem/15928306
What this patch doesn't do / Future work:
- This patch only adds the backend machinery to make this work, patches
that change SROA and SelectionDAG's type legalizer to actually create
such debug info will follow. (http://reviews.llvm.org/D2680)
- Making the DIVariable complex expressions into an argument of dbg.value
will reduce the memory footprint of the debug metadata.
- The sorting/uniquing of pieces should be moved into DebugLocEntry,
to facilitate the merging of multi-piece entries.
llvm-svn: 214576
Diffstat (limited to 'llvm/docs/SourceLevelDebugging.rst')
-rw-r--r-- | llvm/docs/SourceLevelDebugging.rst | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/docs/SourceLevelDebugging.rst b/llvm/docs/SourceLevelDebugging.rst index 869d3a3..a47378e 100644 --- a/llvm/docs/SourceLevelDebugging.rst +++ b/llvm/docs/SourceLevelDebugging.rst @@ -589,6 +589,12 @@ The context is either the subprogram or block where the variable is defined. Name the source variable name. Context and line indicate where the variable was defined. Type descriptor defines the declared type of the variable. +The ``OpPiece`` operator is used for (typically larger aggregate) +variables that are fragmented across several locations. It takes two +i32 arguments, an offset and a size in bytes to describe which piece +of the variable is at this location. + + .. _format_common_intrinsics: Debugger intrinsic functions |