[PATCH] D83560: [DebugInfo] Added support for DW_OP_implicit_value in llvm
Sourabh Singh Tomar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 10 08:19:58 PDT 2020
SouraVX created this revision.
SouraVX added reviewers: aprantl, probinson, dblaikie, jini.susan.george, alok.
SouraVX added projects: LLVM, debug-info.
Herald added subscribers: llvm-commits, hiraditya.
llvm is missing support for DW_OP_implicit_value operation.
DW_OP_implicit_value op is indispensable for cases such as
optimized out long double variables.
For intro refer: DWARFv5 Spec Pg: 40 2.6.1.1.4 Implicit Location Descriptions
Consider the following example:
int main() {
long double ld = 3.14;
printf("dummy\n");
ld *= ld;
return 0;
}
when compiled with tunk `clang` as
`clang test.c -g -O1` produces following location description
of variable `ld`:
DW_AT_location (0x00000000:
[0x0000000000201691, 0x000000000020169b): DW_OP_constu 0xc8f5c28f5c28f800, DW_OP_stack_value, DW_OP_piece 0x8, DW_OP_constu 0x4000, DW_OP_stack_value, DW_OP_bit_piece 0x10 0x40, DW_OP_stack_value)
DW_AT_name ("ld")
Here one may notice that this representation is incorrect(DWARF4
stack could only hold integers(and only up to the size of address)).
Here the variable size itself is `128` bit.
GDB and LLDB confirms this:
(gdb) p ld
$1 = <invalid float value>
(lldb) frame variable ld
(long double) ld = <extracting data from value failed>
GCC represents/uses DW_OP_implicit_value in these sort of situations.
Based on the discussion with Jakub Jelinek regarding GCC's motivation
for using this, I concluded that DW_OP_implicit_value is most appropriate
in this case.
Link: https://gcc.gnu.org/pipermail/gcc/2020-July/233057.html
GDB seems happy after this patch:(LLDB doesn't have support
for DW_OP_implicit_value)
(gdb) p ld
p ld
$1 = 3.14000000000000012434
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D83560
Files:
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfExpression.h
llvm/test/DebugInfo/X86/DW_OP_implicit_value.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83560.277053.patch
Type: text/x-patch
Size: 6143 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200710/ed98d691/attachment.bin>
More information about the llvm-commits
mailing list