Index: ELF/InputFiles.cpp =================================================================== --- ELF/InputFiles.cpp +++ ELF/InputFiles.cpp @@ -124,8 +124,11 @@ // The second parameter is offset in .debug_line section // for compilation unit (CU) of interest. We have only one // CU (object file), so offset is always 0. - const DWARFDebugLine::LineTable *LT = - DwarfLine->getOrParseLineTable(LineData, 0, Dwarf, nullptr); + auto LTOrErr = DwarfLine->getOrParseLineTable(LineData, 0, Dwarf, nullptr); + const DWARFDebugLine::LineTable *LT = LTOrErr.Table; + handleAllErrors(std::move(LTOrErr.Err), + [&](DebugLineError &Err) { warn(Err.message()); }, + [&](ErrorInfoBase &Err) { error(Err.message()); }); if (!LT) return; Index: test/ELF/Inputs/undef-bad-debug.s =================================================================== --- test/ELF/Inputs/undef-bad-debug.s +++ test/ELF/Inputs/undef-bad-debug.s @@ -1,7 +1,37 @@ .section .text,"ax" sym: .quad zed6 - + +.section .debug_line,"",@progbits + .long .Lunit_end - .Lunit_start # unit length +.Lunit_start: + .short 4 # version + .long .Lprologue_end - .Lprologue_start # prologue length +.Lprologue_start: + .byte 1 # minimum instruction length + .byte 1 # maximum operatiosn per instruction + .byte 1 # default is_stmt + .byte -5 # line base + .byte 14 # line range + .byte 13 # opcode base + .byte 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # standard opcode lengths + .asciz "dir" # include directories + .byte 0 + .asciz "undef-bad-debug.s" # file names + .byte 1, 0, 0 + .byte 0 + .byte 0 # extraneous byte +.Lprologue_end: + .byte 0, 9, 2 # DW_LNE_set_address + .quad sym + .byte 3 # DW_LNS_advance_line + .byte 10 + .byte 1 # DW_LNS_copy + .byte 2 # DW_LNS_advance_pc + .byte 8 + .byte 0, 1, 1 # DW_LNE_end_sequence +.Lunit_end: + .section .debug_info,"",@progbits .long .Lcu_end - .Lcu_start # Length of Unit .Lcu_start: Index: test/ELF/undef.s =================================================================== --- test/ELF/undef.s +++ test/ELF/undef.s @@ -34,6 +34,7 @@ # CHECK: >>> referenced by undef-debug.s:11 (dir{{/|\\}}undef-debug.s:11) # CHECK: >>> {{.*}}.o:(.text.2+0x0) +# CHECK: warning: parsing line table prologue at 0x00000000 should have ended at 0x00000038 but it ended at 0x00000037 # CHECK: error: undefined symbol: zed6 # CHECK: >>> referenced by {{.*}}tmp4.o:(.text+0x0)