[DWARF] Replace assert with diagnostic. PR36868.
authorPaul Robinson <paul.robinson@sony.com>
Thu, 22 Mar 2018 19:37:56 +0000 (19:37 +0000)
committerPaul Robinson <paul.robinson@sony.com>
Thu, 22 Mar 2018 19:37:56 +0000 (19:37 +0000)
llvm-svn: 328235

llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
llvm/test/DebugInfo/X86/dwarfdump-line-mismatch.s [new file with mode: 0644]

index 69a6e7f4a946961e3bf94f985fd86a0e635ec78b..dbe1185417acfee69482af9321fd3effa9a33a3d 100644 (file)
@@ -551,8 +551,14 @@ bool DWARFDebugLine::LineTable::parse(DWARFDataExtractor &DebugLineData,
         // from the size of the operand.
         if (DebugLineData.getAddressSize() == 0)
           DebugLineData.setAddressSize(Len - 1);
-        else
-          assert(DebugLineData.getAddressSize() == Len - 1);
+        else if (DebugLineData.getAddressSize() != Len - 1) {
+          fprintf(stderr, "Mismatching address size at offset 0x%8.8" PRIx32
+                  " expected 0x%2.2" PRIx32 " found 0x%2.2" PRIx64 "\n",
+                  ExtOffset, DebugLineData.getAddressSize(), Len - 1);
+          // Skip the rest of the line-number program.
+          *OffsetPtr = EndOffset;
+          return false;
+        }
         State.Row.Address = DebugLineData.getRelocatedAddress(OffsetPtr);
         if (OS)
           *OS << format(" (0x%16.16" PRIx64 ")", State.Row.Address);
diff --git a/llvm/test/DebugInfo/X86/dwarfdump-line-mismatch.s b/llvm/test/DebugInfo/X86/dwarfdump-line-mismatch.s
new file mode 100644 (file)
index 0000000..a34ec6e
--- /dev/null
@@ -0,0 +1,38 @@
+# The .debug_info section says 8-byte addresses, but the assembler
+# will generate a line table with 4-byte addresses (for i686).
+
+# RUN: llvm-mc -filetype=obj -triple i686-linux-gnu %s -o - | \
+# RUN: llvm-dwarfdump -debug-line - 2>&1 | FileCheck %s
+
+# CHECK: Mismatching address size at offset 0x{{[0-9a-f]+}}
+# CHECK-SAME: expected 0x08 found 0x04
+       .text
+       .file   "reduced.c"
+       .globl  main
+main:
+       .file   1 "/tmp" "reduced.c"
+       .loc    1 2 0
+       xorl    %eax, %eax
+       retl
+       .file   2 "/tmp/repeat/repeat/repeat/repeat" "repeat.h"
+
+       .section        .debug_abbrev,"",@progbits
+       .byte   1                       # Abbreviation Code
+       .byte   17                      # DW_TAG_compile_unit
+       .byte   0                       # DW_CHILDREN_no
+       .byte   16                      # DW_AT_stmt_list
+       .byte   23                      # DW_FORM_sec_offset
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   0                       # EOM(3)
+
+        .section       .debug_info,"",@progbits
+       .long   .Lend0 - .Lbegin0       # Length of Unit
+.Lbegin0:
+       .short  4                       # DWARF version number
+       .long   .debug_abbrev           # Offset Into Abbrev. Section
+       .byte   8                       # Address Size (in bytes)
+       .byte   1                       # Abbrev [1] 0xb:0x1f DW_TAG_compile_unit
+       .long   .debug_line             # DW_AT_stmt_list
+.Lend0:
+       .section        .debug_line,"",@progbits