[PATCH] D69005: [dsymutil] Support and relocate base address selection entries for debug_loc
Jonas Devlieghere via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 15 16:50:15 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rG20c692a44555: [dsymutil] Support and relocate base address selection entries for debug_loc (authored by JDevlieghere).
Changed prior to commit:
https://reviews.llvm.org/D69005?vs=225111&id=225136#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69005/new/
https://reviews.llvm.org/D69005
Files:
llvm/test/tools/dsymutil/Inputs/private/tmp/baseaddr/loc1.o
llvm/test/tools/dsymutil/Inputs/private/tmp/baseaddr/loc1.x86_64
llvm/test/tools/dsymutil/X86/debug-loc-base-addr.test
llvm/tools/dsymutil/DwarfStreamer.cpp
Index: llvm/tools/dsymutil/DwarfStreamer.cpp
===================================================================
--- llvm/tools/dsymutil/DwarfStreamer.cpp
+++ llvm/tools/dsymutil/DwarfStreamer.cpp
@@ -399,6 +399,9 @@
MS->SwitchSection(MC->getObjectFileInfo()->getDwarfLocSection());
unsigned AddressSize = Unit.getOrigUnit().getAddressByteSize();
+ uint64_t BaseAddressMarker = (AddressSize == 8)
+ ? std::numeric_limits<uint64_t>::max()
+ : std::numeric_limits<uint32_t>::max();
const DWARFSection &InputSec = Dwarf.getDWARFObj().getLocSection();
DataExtractor Data(InputSec.Data, Dwarf.isLittleEndian(), AddressSize);
DWARFUnit &OrigUnit = Unit.getOrigUnit();
@@ -418,11 +421,20 @@
uint64_t Low = Data.getUnsigned(&Offset, AddressSize);
uint64_t High = Data.getUnsigned(&Offset, AddressSize);
LocSectionSize += 2 * AddressSize;
+ // End of list entry.
if (Low == 0 && High == 0) {
Asm->OutStreamer->EmitIntValue(0, AddressSize);
Asm->OutStreamer->EmitIntValue(0, AddressSize);
break;
}
+ // Base address selection entry.
+ if (Low == BaseAddressMarker) {
+ Asm->OutStreamer->EmitIntValue(BaseAddressMarker, AddressSize);
+ Asm->OutStreamer->EmitIntValue(High + Attr.second, AddressSize);
+ LocPcOffset = 0;
+ continue;
+ }
+ // Location list entry.
Asm->OutStreamer->EmitIntValue(Low + LocPcOffset, AddressSize);
Asm->OutStreamer->EmitIntValue(High + LocPcOffset, AddressSize);
uint64_t Length = Data.getU16(&Offset);
Index: llvm/test/tools/dsymutil/X86/debug-loc-base-addr.test
===================================================================
--- /dev/null
+++ llvm/test/tools/dsymutil/X86/debug-loc-base-addr.test
@@ -0,0 +1,29 @@
+RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/baseaddr/loc1.x86_64 -f -o - | llvm-dwarfdump -debug-loc - | FileCheck %s
+
+The test was compiled from a single source:
+$ cat loc1.cpp
+int f1(int i, int j) {
+ int x = 5;
+ int y = 3;
+ int r = i + j;
+ int undef;
+ x = undef;
+ y = 4;
+ return r;
+}
+__attribute__((nodebug)) void f2() {
+}
+int main() {
+ return 0;
+}
+
+CHECK: .debug_loc contents:
+CHECK: [0xffffffffffffffff, 0x0000000100000f90):
+CHECK: [0x0000000000000004, 0x0000000000000007): DW_OP_consts +3, DW_OP_stack_value
+CHECK: [0x0000000000000007, 0x0000000000000009): DW_OP_consts +4, DW_OP_stack_value
+
+CHECK: [0xffffffffffffffff, 0x0000000100000f90):
+CHECK: [0x0000000000000004, 0x0000000000000007): DW_OP_consts +5, DW_OP_stack_value
+
+CHECK: [0xffffffffffffffff, 0x0000000100000f90):
+CHECK: [0x0000000000000007, 0x0000000000000009): DW_OP_reg0 RAX
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69005.225136.patch
Type: text/x-patch
Size: 2775 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191015/a5587d24/attachment.bin>
More information about the llvm-commits
mailing list