| # Test the different error cases in the debug line parsing and how they prevent |
| # or don't prevent further dumping of section contents. |
| |
| # RUN: llvm-mc -triple x86_64-pc-linux %S/Inputs/debug_line_reserved_length.s -filetype=obj -o %t-reserved.o |
| # RUN: llvm-dwarfdump -debug-line %t-reserved.o 2> %t-reserved.err | FileCheck %s --check-prefixes=FIRST,FATAL |
| # RUN: FileCheck %s --input-file=%t-reserved.err --check-prefix=RESERVED |
| # RUN: llvm-dwarfdump -debug-line %t-reserved.o -verbose 2> %t-reserved-verbose.err | FileCheck %s --check-prefixes=FIRST,FATAL |
| # RUN: FileCheck %s --input-file=%t-reserved-verbose.err --check-prefix=RESERVED |
| |
| # We should still produce warnings for malformed tables after the specified unit. |
| # RUN: llvm-dwarfdump -debug-line=0 %t-reserved.o 2> %t-reserved-off-first.err | FileCheck %s --check-prefixes=FIRST,NOLATER |
| # RUN: FileCheck %s --input-file=%t-reserved-off-first.err --check-prefix=RESERVED |
| |
| # Stop looking for the specified unit, if a fatally-bad prologue is detected. |
| # RUN: llvm-dwarfdump -debug-line=0x4b %t-reserved.o 2> %t-reserved-off-last.err | FileCheck %s --check-prefixes=NOFIRST,NOLATER |
| # RUN: FileCheck %s --input-file=%t-reserved-off-last.err --check-prefix=RESERVED |
| |
| # RUN: llvm-mc -triple x86_64-pc-linux %S/Inputs/debug_line_malformed.s -filetype=obj -o %t-malformed.o |
| # RUN: llvm-dwarfdump -debug-line %t-malformed.o 2> %t-malformed.err | FileCheck %s --check-prefixes=FIRST,NONFATAL |
| # RUN: FileCheck %s --input-file=%t-malformed.err --check-prefixes=ALL,OTHER |
| # RUN: llvm-dwarfdump -debug-line %t-malformed.o -verbose 2> %t-malformed-verbose.err | FileCheck %s --check-prefixes=FIRST,NONFATAL |
| # RUN: FileCheck %s --input-file=%t-malformed-verbose.err --check-prefixes=ALL,OTHER |
| |
| # RUN: llvm-dwarfdump -debug-line=0 %t-malformed.o 2> %t-malformed-off-first.err | FileCheck %s --check-prefixes=FIRST,NOLATER |
| # RUN: FileCheck %s --input-file=%t-malformed-off-first.err --check-prefix=ALL |
| |
| # Don't stop looking for the later unit if non-fatal issues are found. |
| # RUN: llvm-dwarfdump -debug-line=0x183 %t-malformed.o 2> %t-malformed-off-last.err | FileCheck %s --check-prefixes=LASTONLY |
| # RUN: FileCheck %s --input-file=%t-malformed-off-last.err --check-prefix=ALL |
| |
| # FIRST: debug_line[0x00000000] |
| # FIRST: 0x000000000badbeef {{.*}} end_sequence |
| # NOFIRST-NOT: debug_line[0x00000000] |
| # NOFIRST-NOT: 0x000000000badbeef {{.*}} end_sequence |
| # NOLATER-NOT: debug_line[{{.*}}] |
| # NOLATER-NOT: end_sequence |
| |
| # For fatal issues, the following table(s) should not be dumped. |
| # FATAL: debug_line[0x00000048] |
| # FATAL-NEXT: Line table prologue |
| # FATAL-NEXT: total_length: 0xfffffffe |
| # FATAL-NOT: debug_line |
| |
| # For non-fatal prologue issues, the table prologue should be dumped, and any subsequent tables should also be. |
| # NONFATAL: debug_line[0x00000048] |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL-NOT: Address |
| # NONFATAL: debug_line[0x0000004e] |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL-NOT: Address |
| # NONFATAL: debug_line[0x00000054] |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL-NOT: Address |
| # NONFATAL: debug_line[0x00000073] |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL-NOT: Address |
| # NONFATAL: debug_line[0x000000ad] |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL-NOT: Address |
| # NONFATAL: debug_line[0x000000e7] |
| # Dumping prints the line table prologue and any valid operations up to the point causing the problem. |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL: 0x00000000abbadaba {{.*}} end_sequence |
| # NONFATAL-NOT: is_stmt |
| |
| # For minor issues, we can dump the table. |
| # NONFATAL: debug_line[0x0000013d] |
| # NONFATAL-NEXT: Line table prologue |
| # NONFATAL-NOT: debug_line[{{.*}}] |
| # NONFATAL: 0x00000000deadfade {{.*}} |
| # NONFATAL: debug_line[0x00000183] |
| # NONFATAL-NOT: debug_line[{{.*}}] |
| # NONFATAL: 0x00000000cafebabe {{.*}} end_sequence |
| # NONFATAL-NOT: debug_line[{{.*}}] |
| |
| # LASTONLY-NOT: debug_line[{{.*}}] |
| # LASTONLY: debug_line[0x00000183] |
| # LASTONLY: 0x00000000cafebabe {{.*}} end_sequence |
| |
| # RESERVED: warning: parsing line table prologue at offset 0x00000048 unsupported reserved unit length found of value 0xfffffffe |
| |
| # ALL-NOT: warning: |
| # ALL: warning: parsing line table prologue at offset 0x00000048 found unsupported version 0x00 |
| # ALL-NEXT: warning: parsing line table prologue at offset 0x0000004e found unsupported version 0x01 |
| # ALL-NEXT: warning: parsing line table prologue at 0x00000054 found an invalid directory or file table description at 0x00000073 |
| # FIXME - The latter offset in the next line should be 0xad. The filename parsing code does not notice a missing terminating byte. |
| # ALL-NEXT: warning: parsing line table prologue at 0x00000073 should have ended at 0x000000ab but it ended at 0x000000ac |
| # ALL-NEXT: warning: parsing line table prologue at 0x000000ad should have ended at 0x000000e8 but it ended at 0x000000e7 |
| # OTHER-NEXT: warning: unexpected line op length at offset 0x0000012e expected 0x02 found 0x01 |
| # OTHER-NEXT: warning: last sequence in debug line table is not terminated! |
| # ALL-NOT: warning: |