This patch introduces support for specifing views in .loc directives, so that the...
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 21 Jul 2017 09:09:06 +0000 (10:09 +0100)
committerNick Clifton <nickc@redhat.com>
Fri, 21 Jul 2017 09:13:18 +0000 (10:13 +0100)
commitba8826a82a29a19b78c18ce4f44fe313de279af7
tree2389430a2bbbff988df9fbba2fbb79f40345d735
parent47826cdbec2548cd1d25acf4cfaf908ae88f3325
This patch introduces support for specifing views in .loc directives, so that the compiler can use the assembler to generate line number information and have the assembler determine view numbers to multiple views at the same program counter.

binutils* dwarf.c (struct State_Machine_Registers): Add view field.
(reset_state_machine): Reset view.
(process_extended_line_op): Reset view when appropriate.
(display_debug_lines_raw): Increment or reset view when appropriate.
Print nonzero views.  Support print view resets, disabled by default.
(display_debug_lines_decoded): Likewise.  Disambiguate op_code tests,
enabling printing of end_sequence.
* testsuite/binutils-all/dw2-1.W: Add nonzero views.
* testsuite/binutils-all/dw2-3.W: Likewise.
* testsuite/binutils-all/dw2-3gabi.W: Likewise.
* testsuite/binutils-all/dw5.W: Add end sequence lines.
* testsuite/binutils-all/i386/compressed-1a.d: Add nonzero views.
* testsuite/binutils-all/libdw2-compressedgabi.out: Likewise.
* testsuite/binutils-all/objdump.W: Likewise.
* testsuite/binutils-all/objdump.WL: Add end sequence lines.
* testsuite/binutils-all/x86-64/compressed-1a.d: Add nonzero views.

gas * doc/as.texinfo (.loc): Document view support.
* dwarf2dbg.c (unused): Check offset of next in struct line_entry.
(current): Initialize view.
(force_reset_view, view_assert_failed): New variables.
(reverse_line_entry_list): New function.
(set_or_check_view): Likewise.
(dwarf2_gen_line_info_1): Call it.
(dwarf2_where): Set view to NULL.
(dwarf2_emit_insn): Return early when called before first file.
(dwarf2_directive_loc): Add view support.  Emit insn
immediately when view option is given.
(process_entries): Avoid set_address to reset view when a known
address change already implies the view reset.
(dwarf2dbg_final_check): New function.
* dwarf2dbg.h (struct dwarf2_line_info): Add view.
(dwarf2dbg_final_check): Declare.
* read.c (s_leb128): Parse expression as deferred.
* testsuite/gas/all/gas.exp: Run sleb128-9.
* testsuite/gas/all/sleb128-9.d: New.
* testsuite/gas/all/sleb128-9.l: New.
* testsuite/gas/all/sleb128-9.s: New.
* testsuite/gas/elf/dwarf2-1.d: Add nonzero views.
* testsuite/gas/elf/dwarf2-2.d: Likewise.
* testsuite/gas/elf/dwarf2-5.d: New.
* testsuite/gas/elf/dwarf2-5.s: New.
* testsuite/gas/elf/dwarf2-6.d: New.
* testsuite/gas/elf/dwarf2-6.s: New.
* testsuite/gas/elf/dwarf2-7.d: New.
* testsuite/gas/elf/dwarf2-7.s: New.
* testsuite/gas/elf/dwarf2-8.d: New.
* testsuite/gas/elf/dwarf2-8.l: New.
* testsuite/gas/elf/dwarf2-8.s: New.
* testsuite/gas/elf/dwarf2-9.d: New.
* testsuite/gas/elf/dwarf2-9.l: New.
* testsuite/gas/elf/dwarf2-9.s: New.
* testsuite/gas/elf/dwarf2-10.d: New.
* testsuite/gas/elf/dwarf2-10.l: New.
* testsuite/gas/elf/dwarf2-10.s: New.
* testsuite/gas/elf/dwarf2-11.d: New.
* testsuite/gas/elf/dwarf2-11.s: New.
* testsuite/gas/elf/dwarf2-12.d: New.
* testsuite/gas/elf/dwarf2-12.s: New.
* testsuite/gas/elf/dwarf2-13.d: New.
* testsuite/gas/elf/dwarf2-13.s: New.
* testsuite/gas/elf/dwarf2-14.d: New.
* testsuite/gas/elf/dwarf2-14.s: New.
* testsuite/gas/elf/dwarf2-15.d: New.
* testsuite/gas/elf/dwarf2-15.s: New.
* testsuite/gas/elf/dwarf2-16.d: New.
* testsuite/gas/elf/dwarf2-16.s: New.
* testsuite/gas/elf/dwarf2-17.d: New.
* testsuite/gas/elf/dwarf2-17.s: New.
* testsuite/gas/elf/dwarf2-18.d: New.
* testsuite/gas/elf/dwarf2-18.s: New.
* testsuite/gas/elf/elf.exp: Run dwarf2-5..18 tests.
* testsuite/gas/i386/dw2-compress-1.d: Add nonzero views.
* testsuite/gas/i386/dw2-compressed-1.d: Likewise.
* testsuite/gas/i386/ilp32/lns/lns-duplicate.d: Likewise.
* testsuite/gas/lns/lns-big-delta.d: Likewise.
* testsuite/gas/lns/lns-duplicate.d: Likewise.
* testsuite/gas/mips/loc-swap-2.d: Likewise.
* testsuite/gas/mips/loc-swap-3.d: Likewise.
* testsuite/gas/mips/loc-swap.d: Likewise.
* testsuite/gas/mips/micromips@loc-swap-2.d: Likewise.
* testsuite/gas/mips/micromips@loc-swap.d: Likewise.
* testsuite/gas/mips/mips16@loc-swap-2.d: Likewise.
* testsuite/gas/mips/mips16@loc-swap.d: Likewise.
* testsuite/gas/mips/mips16e@loc-swap.d: Likewise.
* write.c (write_object_file): Check pending view asserts.
(cvt_frag_to_fill): Complain about undefined leb128 operand.
72 files changed:
binutils/ChangeLog
binutils/dwarf.c
binutils/testsuite/binutils-all/dw2-1.W
binutils/testsuite/binutils-all/dw2-3.W
binutils/testsuite/binutils-all/dw2-3gabi.W
binutils/testsuite/binutils-all/dw5.W
binutils/testsuite/binutils-all/i386/compressed-1a.d
binutils/testsuite/binutils-all/libdw2-compressedgabi.out
binutils/testsuite/binutils-all/objdump.W
binutils/testsuite/binutils-all/objdump.WL
binutils/testsuite/binutils-all/x86-64/compressed-1a.d
gas/ChangeLog
gas/NEWS
gas/doc/as.texinfo
gas/dwarf2dbg.c
gas/dwarf2dbg.h
gas/read.c
gas/testsuite/gas/all/gas.exp
gas/testsuite/gas/all/sleb128-9.d [new file with mode: 0644]
gas/testsuite/gas/all/sleb128-9.l [new file with mode: 0644]
gas/testsuite/gas/all/sleb128-9.s [new file with mode: 0644]
gas/testsuite/gas/avr/large-debug-line-table.d
gas/testsuite/gas/elf/dwarf2-1.d
gas/testsuite/gas/elf/dwarf2-10.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-10.l [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-10.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-11.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-11.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-12.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-12.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-13.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-13.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-14.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-14.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-15.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-15.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-16.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-16.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-17.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-17.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-18.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-18.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-2.d
gas/testsuite/gas/elf/dwarf2-5.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-5.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-6.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-6.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-7.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-7.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-8.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-8.l [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-8.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-9.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-9.l [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf2-9.s [new file with mode: 0644]
gas/testsuite/gas/elf/elf.exp
gas/testsuite/gas/i386/dw2-compress-1.d
gas/testsuite/gas/i386/dw2-compressed-1.d
gas/testsuite/gas/i386/ilp32/lns/lns-duplicate.d
gas/testsuite/gas/lns/lns-big-delta.d
gas/testsuite/gas/lns/lns-common-1-alt.d
gas/testsuite/gas/lns/lns-duplicate.d
gas/testsuite/gas/mips/loc-swap-2.d
gas/testsuite/gas/mips/loc-swap-3.d
gas/testsuite/gas/mips/loc-swap.d
gas/testsuite/gas/mips/micromips@loc-swap-2.d
gas/testsuite/gas/mips/micromips@loc-swap.d
gas/testsuite/gas/mips/mips16@loc-swap-2.d
gas/testsuite/gas/mips/mips16@loc-swap.d
gas/testsuite/gas/mips/mips16e@loc-swap.d
gas/write.c
ld/testsuite/ld-avr/gc-section-debugline.d