[PATCH] D96472: llvm-dwarfdump: fix the counting when printing DW_OP_entry_value
Adrian Prantl via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 10 17:35:37 PST 2021
aprantl created this revision.
aprantl added reviewers: vsk, JDevlieghere.
aprantl added a project: debug-info.
Herald added subscribers: cmtice, hiraditya.
Herald added a reviewer: jhenderson.
aprantl requested review of this revision.
Herald added a subscriber: MaskRay.
Herald added a project: LLVM.
The block size is in bytes, and not number of operands.
https://reviews.llvm.org/D96472
Files:
llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp
llvm/test/tools/llvm-dwarfdump/X86/debug_loc_OP_entry_value.s
Index: llvm/test/tools/llvm-dwarfdump/X86/debug_loc_OP_entry_value.s
===================================================================
--- llvm/test/tools/llvm-dwarfdump/X86/debug_loc_OP_entry_value.s
+++ llvm/test/tools/llvm-dwarfdump/X86/debug_loc_OP_entry_value.s
@@ -3,7 +3,7 @@
# CHECK: DW_TAG_variable
# CHECK-NEXT: DW_AT_name ("a")
# CHECK-NEXT: DW_AT_location
-# CHECK-NEXT: DW_OP_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value)
+# CHECK-NEXT: DW_OP_entry_value(DW_OP_breg5 RDI+0), DW_OP_stack_value)
.section .debug_str,"MS", at progbits,1
.Linfo_producer:
@@ -18,8 +18,9 @@
.short .Lloc0_end-.Lloc0_start # Loc expr size
.Lloc0_start:
.byte 163 # DW_OP_entry_value
- .byte 1 # 1
- .byte 85 # super-register DW_OP_reg5
+ .byte 2 # 2
+ .byte 117 # DW_OP_breg5
+ .byte 0 # +0
.byte 159 # DW_OP_stack_value
.Lloc0_end:
.quad 0
Index: llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFExpression.cpp
@@ -325,6 +325,7 @@
const MCRegisterInfo *RegInfo, DWARFUnit *U,
bool IsEH) const {
uint32_t EntryValExprSize = 0;
+ uint64_t EntryValStartOffset = 0;
for (auto &Op : *this) {
if (!Op.print(OS, DumpOpts, this, RegInfo, U, IsEH)) {
uint64_t FailOffset = Op.getEndOffset();
@@ -337,11 +338,12 @@
Op.getCode() == DW_OP_GNU_entry_value) {
OS << "(";
EntryValExprSize = Op.getRawOperand(0);
+ EntryValStartOffset = Op.getEndOffset();
continue;
}
if (EntryValExprSize) {
- EntryValExprSize--;
+ EntryValExprSize -= Op.getEndOffset() - EntryValStartOffset;
if (EntryValExprSize == 0)
OS << ")";
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96472.322875.patch
Type: text/x-patch
Size: 1962 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210211/732065ca/attachment.bin>
More information about the llvm-commits
mailing list