[llvm] r373278 - DebugInfo: Add parsing support for debug_loc base address specifiers
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 30 17:29:13 PDT 2019
Author: dblaikie
Date: Mon Sep 30 17:29:13 2019
New Revision: 373278
URL: http://llvm.org/viewvc/llvm-project?rev=373278&view=rev
Log:
DebugInfo: Add parsing support for debug_loc base address specifiers
Added:
llvm/trunk/test/tools/llvm-dwarfdump/debug_loc_base_address.s
Modified:
llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h?rev=373278&r1=373277&r2=373278&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h Mon Sep 30 17:29:13 2019
@@ -68,7 +68,7 @@ public:
/// Return the location list at the given offset or nullptr.
LocationList const *getLocationListAtOffset(uint64_t Offset) const;
- static Expected<LocationList>
+ Expected<LocationList>
parseOneLocationList(const DWARFDataExtractor &Data, uint64_t *Offset);
};
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp?rev=373278&r1=373277&r2=373278&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp (original)
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp Mon Sep 30 17:29:13 2019
@@ -101,6 +101,7 @@ DWARFDebugLoc::parseOneLocationList(cons
if (Error Err = C.takeError())
return std::move(Err);
+
// The end of any given location list is marked by an end of list entry,
// which consists of a 0 for the beginning address offset and a 0 for the
// ending address offset.
@@ -109,9 +110,12 @@ DWARFDebugLoc::parseOneLocationList(cons
return LL;
}
- unsigned Bytes = Data.getU16(C);
- // A single location description describing the location of the object...
- Data.getU8(C, E.Loc, Bytes);
+ if (E.Begin != (AddressSize == 4 ? -1U : -1ULL)) {
+ unsigned Bytes = Data.getU16(C);
+ // A single location description describing the location of the object...
+ Data.getU8(C, E.Loc, Bytes);
+ }
+
LL.Entries.push_back(std::move(E));
}
}
Added: llvm/trunk/test/tools/llvm-dwarfdump/debug_loc_base_address.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/debug_loc_base_address.s?rev=373278&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-dwarfdump/debug_loc_base_address.s (added)
+++ llvm/trunk/test/tools/llvm-dwarfdump/debug_loc_base_address.s Mon Sep 30 17:29:13 2019
@@ -0,0 +1,34 @@
+# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o %t.o
+# RUN: llvm-dwarfdump --debug-loc %t.o | FileCheck %s
+
+# CHECK: .debug_loc contents:
+# CHECK-NEXT: 0x00000000:
+# CHECK-NEXT: [0xffffffffffffffff, 0x000000000000002a):
+# CHECK-NEXT: [0x0000000000000003, 0x0000000000000007): DW_OP_consts +3, DW_OP_stack_value
+
+ .section .debug_loc,"", at progbits
+ .quad 0xffffffffffffffff
+ .quad 42
+ .quad 3
+ .quad 7
+ .short 3 # Loc expr size
+ .byte 17 # DW_OP_consts
+ .byte 3 # 3
+ .byte 159 # DW_OP_stack_value
+ .quad 0
+ .quad 0
+ .section .debug_abbrev,"", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 0 # DW_CHILDREN_no
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"", at progbits
+ .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+ .short 4 # DWARF version number
+ .long .debug_abbrev # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] DW_TAG_compile_unit
+.Ldebug_info_end0:
More information about the llvm-commits
mailing list