[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