[PATCH] D44388: [ELF] Rework debug line parsing to use llvm::Error (LLD-side)
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 12 11:00:51 PDT 2018
(I will say "LTOrErr" is a slightly confusing variable name, given the
prevalence of "LTO" as a known acronym... )
On Mon, Mar 12, 2018 at 8:27 AM James Henderson via Phabricator via
llvm-commits <llvm-commits at lists.llvm.org> wrote:
> jhenderson created this revision.
> jhenderson added reviewers: ruiu, espindola.
> Herald added subscribers: arichardson, emaste.
>
> This is a companion change to https://reviews.llvm.org/D44382. That
> change changes the debug line parser interface to report LLVM errors, and
> to improve the error/warning reporting mechanism to not use fprintf(stderr,
> ...).
>
> As noted in the description on https://reviews.llvm.org/D44382, these
> warnings were not using the errs() stream, and so were not always being
> flushed properly by LLD on shutdown. To test this, I have extended the
> bad-debug undefined symbol message case to show that a corresponding
> warning is printed, if the debug line cannot be parsed.
>
>
> Repository:
> rLLD LLVM Linker
>
> https://reviews.llvm.org/D44388
>
> Files:
> ELF/InputFiles.cpp
> test/ELF/Inputs/undef-bad-debug.s
> test/ELF/undef.s
>
>
> 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)
>
> 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,"", at 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,"", at progbits
> .long .Lcu_end - .Lcu_start # Length of Unit
> .Lcu_start:
> 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;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180312/4a43210a/attachment.html>
More information about the llvm-commits
mailing list