[dwarfdump] Add support for -debug-line=OFFSET
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 27 Sep 2017 09:33:45 +0000 (09:33 +0000)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 27 Sep 2017 09:33:45 +0000 (09:33 +0000)
This patch adds support for passing an offset to -debug-line.

Differential revision: https://reviews.llvm.org/D38240

llvm-svn: 314288

llvm/lib/DebugInfo/DWARF/DWARFContext.cpp
llvm/test/DebugInfo/Generic/lto-comp-dir.ll
llvm/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll
llvm/test/tools/llvm-dwarfdump/X86/debug_line_offset.test [new file with mode: 0644]

index 8bb47c9..f6c8499 100644 (file)
@@ -331,12 +331,15 @@ void DWARFContext::dump(
       if (!CUDIE)
         continue;
       if (auto StmtOffset = toSectionOffset(CUDIE.find(DW_AT_stmt_list))) {
+        if (DumpOffset && *StmtOffset != *DumpOffset)
+          continue;
         DWARFDataExtractor lineData(*DObj, DObj->getLineSection(),
                                     isLittleEndian(), savedAddressByteSize);
         DWARFDebugLine::LineTable LineTable;
         uint32_t Offset = *StmtOffset;
         // Verbose dumping is done during parsing and not on the intermediate
         // representation.
+        OS << "debug_line[" << format("%16.16" PRIx64, Offset) << "]\n";
         if (DumpOpts.Verbose) {
           LineTable.parse(lineData, &Offset, &OS);
         } else {
index c624d4f..1076649 100644 (file)
@@ -8,12 +8,14 @@
 ; to refer to it.
 
 ; CHECK: .debug_line contents:
+; CHECK-NEXT: debug_line[0000000000000000]
 ; CHECK-NEXT: Line table prologue:
 ; CHECK-NOT: include_directories
 ; CHECK: file_names[   1]   0 {{.*}} a.cpp
 ; CHECK-NOT: file_names
 
-; CHECK: Line table prologue:
+; CHECK: debug_line[0000000000000039]
+; CHECK-NEXT: Line table prologue:
 ; CHECK-NOT: include_directories
 ; CHECK: file_names[   1]   0 {{.*}} b.cpp
 ; CHECK-NOT: file_names
index 40678e9..a7a9bda 100644 (file)
 
 
 ; CHECK: .debug_line contents:
+; CHECK-NEXT: debug_line[0000000000000000]
 ; CHECK-NEXT: Line table prologue:
 ; CHECK-NEXT: total_length: 0x00000038
 ; CHECK: file_names[  1]    0 0x00000000 0x00000000 simple.c
-; CHECK: Line table prologue:
+; CHECK: debug_line[000000000000003c]
+; CHECK-NEXT: Line table prologue:
 ; CHECK-NEXT: total_length: 0x00000039
 ; CHECK: file_names[  1]    0 0x00000000 0x00000000 simple2.c
 ; CHECK-NOT: file_names
 
 
 ; DWARF3: .debug_line contents:
+; DWARF3-NEXT: debug_line[0000000000000000]
 ; DWARF3-NEXT: Line table prologue:
 ; DWARF3-NEXT: total_length: 0x00000038
 ; DWARF3: file_names[  1]    0 0x00000000 0x00000000 simple.c
-; DWARF3: Line table prologue:
+; DWARF3: debug_line[000000000000003c]
+; DWARF3-NEXT: Line table prologue:
 ; DWARF3-NEXT: total_length: 0x00000039
 ; DWARF3: file_names[  1]    0 0x00000000 0x00000000 simple2.c
 ; DWARF3-NOT: file_names
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/debug_line_offset.test b/llvm/test/tools/llvm-dwarfdump/X86/debug_line_offset.test
new file mode 100644 (file)
index 0000000..4b73134
--- /dev/null
@@ -0,0 +1,28 @@
+RUN: llvm-dwarfdump %S/../../dsymutil/Inputs/basic-lto-dw4.macho.x86_64.o \
+RUN:  -debug-line=0x0 | FileCheck %s --check-prefix=CHECK-A
+
+CHECK-A: debug_line[0000000000000000]
+CHECK-A: Address            Line   Column File   ISA Discriminator Flags
+CHECK-A-NET: ------------------ ------ ------ ------ --- ------------- -------------
+CHECK-A-NET: 0x0000000000000000     26      0      1   0             0  is_stmt
+CHECK-A-NET: 0x0000000000000004     27     10      1   0             0  is_stmt prologue_end
+CHECK-A-NET: 0x0000000000000009     27      3      1   0             0
+CHECK-A-NET: 0x0000000000000074     27      3      1   0             0  end_sequence
+CHECK-A-NOT: debug_line[000000000000009a]
+
+RUN: llvm-dwarfdump %S/../../dsymutil/Inputs/basic-lto-dw4.macho.x86_64.o \
+RUN:  -debug-line=0x9a | FileCheck %s --check-prefix=CHECK-B
+
+CHECK-B-NOT: debug_line[0000000000000000]
+CHECK-B: debug_line[000000000000009a]
+CHECK-B: Address            Line   Column File   ISA Discriminator Flags
+CHECK-B-NEXT: ------------------ ------ ------ ------ --- ------------- -------------
+CHECK-B-NEXT: 0x0000000000000050     16      0      1   0             0  is_stmt
+CHECK-B-NEXT: 0x0000000000000054     12     10      1   0             0  is_stmt prologue_end
+CHECK-B-NEXT: 0x000000000000005a     17      7      1   0             0  is_stmt
+CHECK-B-NEXT: 0x000000000000005f     12     10      1   0             0  is_stmt
+CHECK-B-NEXT: 0x0000000000000067     20      1      1   0             0  is_stmt
+CHECK-B-NEXT: 0x0000000000000069     19     18      1   0             0  is_stmt
+CHECK-B-NEXT: 0x000000000000006b     19     10      1   0             0
+CHECK-B-NEXT: 0x0000000000000072     20      1      1   0             0  is_stmt
+CHECK-B-NEXT: 0x0000000000000074     20      1      1   0             0  is_stmt end_sequence