binutils-gdb/binutils/testsuite/binutils-all/dw5.W
Alexandre Oliva ba8826a82a 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.
2017-07-21 10:13:18 +01:00

357 lines
15 KiB
OpenEdge ABL

Contents of the .debug_info section:
Compilation Unit @ offset 0x0:
Length: 0x160 \(32-bit\)
Version: 5
Abbrev Offset: 0x0
Pointer Size: 8
<0><c>: Abbrev Number: 6 \(DW_TAG_compile_unit\)
<d> DW_AT_producer : \(indirect string, offset: 0x43\): GNU C11 7.0.1 20170218 \(experimental\) -mtune=generic -march=x86-64 -gdwarf-5 -O2
<11> DW_AT_language : 29 \(C11\)
<12> DW_AT_name : \(indirect line string, offset: 0x14\): main.c
<16> DW_AT_comp_dir : \(indirect line string, offset: 0x0\):
<1a> DW_AT_ranges : 0xc
<1e> DW_AT_low_pc : 0x0
<26> DW_AT_stmt_list : 0x0
<1><2a>: Abbrev Number: 1 \(DW_TAG_base_type\)
<2b> DW_AT_byte_size : 1
<2c> DW_AT_encoding : 8 \(unsigned char\)
<2d> DW_AT_name : \(indirect string, offset: 0x94\): unsigned char
<1><31>: Abbrev Number: 1 \(DW_TAG_base_type\)
<32> DW_AT_byte_size : 2
<33> DW_AT_encoding : 7 \(unsigned\)
<34> DW_AT_name : \(indirect string, offset: 0xbc\): short unsigned int
<1><38>: Abbrev Number: 1 \(DW_TAG_base_type\)
<39> DW_AT_byte_size : 4
<3a> DW_AT_encoding : 7 \(unsigned\)
<3b> DW_AT_name : \(indirect string, offset: 0x0\): unsigned int
<1><3f>: Abbrev Number: 1 \(DW_TAG_base_type\)
<40> DW_AT_byte_size : 8
<41> DW_AT_encoding : 7 \(unsigned\)
<42> DW_AT_name : \(indirect string, offset: 0x2a\): long unsigned int
<1><46>: Abbrev Number: 1 \(DW_TAG_base_type\)
<47> DW_AT_byte_size : 1
<48> DW_AT_encoding : 6 \(signed char\)
<49> DW_AT_name : \(indirect string, offset: 0x19\): signed char
<1><4d>: Abbrev Number: 1 \(DW_TAG_base_type\)
<4e> DW_AT_byte_size : 2
<4f> DW_AT_encoding : 5 \(signed\)
<50> DW_AT_name : \(indirect string, offset: 0xef\): short int
<1><54>: Abbrev Number: 7 \(DW_TAG_base_type\)
<55> DW_AT_byte_size : 4
<56> DW_AT_encoding : 5 \(signed\)
<57> DW_AT_name : int
<1><5b>: Abbrev Number: 1 \(DW_TAG_base_type\)
<5c> DW_AT_byte_size : 8
<5d> DW_AT_encoding : 5 \(signed\)
<5e> DW_AT_name : \(indirect string, offset: 0xae\): long int
<1><62>: Abbrev Number: 1 \(DW_TAG_base_type\)
<63> DW_AT_byte_size : 8
<64> DW_AT_encoding : 7 \(unsigned\)
<65> DW_AT_name : \(indirect string, offset: 0xff\): sizetype
<1><69>: Abbrev Number: 3 \(DW_TAG_pointer_type\)
<6a> DW_AT_byte_size : 8
<6a> DW_AT_type : <0x6e>
<1><6e>: Abbrev Number: 1 \(DW_TAG_base_type\)
<6f> DW_AT_byte_size : 1
<70> DW_AT_encoding : 6 \(signed char\)
<71> DW_AT_name : \(indirect string, offset: 0xa2\): char
<1><75>: Abbrev Number: 8 \(DW_TAG_variable\)
<76> DW_AT_name : \(indirect string, offset: 0xd9\): __environ
<7a> DW_AT_decl_file : 2
<7b> DW_AT_decl_line : 546
<7d> DW_AT_type : <0x81>
<81> DW_AT_external : 1
<81> DW_AT_declaration : 1
<1><81>: Abbrev Number: 3 \(DW_TAG_pointer_type\)
<82> DW_AT_byte_size : 8
<82> DW_AT_type : <0x69>
<1><86>: Abbrev Number: 2 \(DW_TAG_variable\)
<87> DW_AT_name : \(indirect string, offset: 0xe8\): optarg
<8b> DW_AT_decl_file : 3
<8b> DW_AT_decl_line : 57
<8c> DW_AT_type : <0x69>
<90> DW_AT_external : 1
<90> DW_AT_declaration : 1
<1><90>: Abbrev Number: 2 \(DW_TAG_variable\)
<91> DW_AT_name : \(indirect string, offset: 0xa7\): optind
<95> DW_AT_decl_file : 3
<95> DW_AT_decl_line : 71
<96> DW_AT_type : <0x54>
<9a> DW_AT_external : 1
<9a> DW_AT_declaration : 1
<1><9a>: Abbrev Number: 2 \(DW_TAG_variable\)
<9b> DW_AT_name : \(indirect string, offset: 0x3c\): opterr
<9f> DW_AT_decl_file : 3
<9f> DW_AT_decl_line : 76
<a0> DW_AT_type : <0x54>
<a4> DW_AT_external : 1
<a4> DW_AT_declaration : 1
<1><a4>: Abbrev Number: 2 \(DW_TAG_variable\)
<a5> DW_AT_name : \(indirect string, offset: 0xd\): optopt
<a9> DW_AT_decl_file : 3
<a9> DW_AT_decl_line : 80
<aa> DW_AT_type : <0x54>
<ae> DW_AT_external : 1
<ae> DW_AT_declaration : 1
<1><ae>: Abbrev Number: 4 \(DW_TAG_variable\)
<af> DW_AT_name : \(indirect string, offset: 0x25\): xvar
<b3> DW_AT_decl_file : 1
<b3> DW_AT_decl_line : 2
<b4> DW_AT_type : <0x54>
<b8> DW_AT_external : 1
<b8> DW_AT_location : 9 byte block: 3 (0|34) (0|12) 0 0 0 0 (0|12) (0|34) \(DW_OP_addr: 1234\)
<1><c2>: Abbrev Number: 4 \(DW_TAG_variable\)
<c3> DW_AT_name : \(indirect string, offset: 0xcf\): yvar
<c7> DW_AT_decl_file : 1
<c7> DW_AT_decl_line : 3
<c8> DW_AT_type : <0x54>
<cc> DW_AT_external : 1
<cc> DW_AT_location : 9 byte block: 3 (0|34) (0|12) 0 0 0 0 (0|12) (0|34) \(DW_OP_addr: 1234\)
<1><d6>: Abbrev Number: 4 \(DW_TAG_variable\)
<d7> DW_AT_name : \(indirect string, offset: 0xd4\): pvar
<db> DW_AT_decl_file : 1
<db> DW_AT_decl_line : 4
<dc> DW_AT_type : <0xea>
<e0> DW_AT_external : 1
<e0> DW_AT_location : 9 byte block: 3 (0|34) (0|12) 0 0 0 0 (0|12) (0|34) \(DW_OP_addr: 1234\)
<1><ea>: Abbrev Number: 3 \(DW_TAG_pointer_type\)
<eb> DW_AT_byte_size : 8
<eb> DW_AT_type : <0x54>
<1><ef>: Abbrev Number: 9 \(DW_TAG_subprogram\)
<f0> DW_AT_external : 1
<f0> DW_AT_name : \(indirect string, offset: 0x14\): main
<f4> DW_AT_decl_file : 1
<f5> DW_AT_decl_line : 6
<f6> DW_AT_prototyped : 1
<f6> DW_AT_type : <0x54>
<fa> DW_AT_low_pc : 0x1234
<102> DW_AT_high_pc : 0x5678
<10a> DW_AT_frame_base : 1 byte block: 9c \(DW_OP_call_frame_cfa\)
<10c> DW_AT_call_all_calls: 1
<10c> DW_AT_sibling : <0x13e>
<2><110>: Abbrev Number: 5 \(DW_TAG_formal_parameter\)
<111> DW_AT_name : \(indirect string, offset: 0xb7\): argc
<115> DW_AT_decl_file : 1
<115> DW_AT_decl_line : 6
<115> DW_AT_type : <0x54>
<119> DW_AT_location : 0xc \(location list\)
<2><11d>: Abbrev Number: 5 \(DW_TAG_formal_parameter\)
<11e> DW_AT_name : \(indirect string, offset: 0x108\): argv
<122> DW_AT_decl_file : 1
<122> DW_AT_decl_line : 6
<122> DW_AT_type : <0x81>
<126> DW_AT_location : 0x23 \(location list\)
<2><12a>: Abbrev Number: 10 \(DW_TAG_call_site\)
<12b> DW_AT_call_return_pc: 0x12345
<133> DW_AT_call_origin : <0x157>
<3><137>: Abbrev Number: 11 \(DW_TAG_call_site_parameter\)
<138> DW_AT_location : 1 byte block: 55 \(DW_OP_reg5 \([^()]*\)\)
<13a> DW_AT_call_value : 1 byte block: 30 \(DW_OP_lit0\)
<3><13c>: Abbrev Number: 0
<2><13d>: Abbrev Number: 0
<1><13e>: Abbrev Number: 12 \(DW_TAG_subprogram\)
<13f> DW_AT_external : 1
<13f> DW_AT_name : \(indirect string, offset: 0xe3\): func
<143> DW_AT_decl_file : 1
<144> DW_AT_decl_line : 5
<145> DW_AT_prototyped : 1
<145> DW_AT_low_pc : 0x1234
<14d> DW_AT_high_pc : 0x5678
<155> DW_AT_frame_base : 1 byte block: 9c \(DW_OP_call_frame_cfa\)
<157> DW_AT_call_all_calls: 1
<1><157>: Abbrev Number: 13 \(DW_TAG_subprogram\)
<158> DW_AT_external : 1
<158> DW_AT_declaration : 1
<158> DW_AT_linkage_name: \(indirect string, offset: 0xf9\): alarm
<15c> DW_AT_name : \(indirect string, offset: 0xf9\): alarm
<160> DW_AT_decl_file : 2
<161> DW_AT_decl_line : 435
<1><163>: Abbrev Number: 0
Contents of the .debug_abbrev section:
Number TAG \(0x0\)
1 DW_TAG_base_type \[no children\]
DW_AT_byte_size DW_FORM_data1
DW_AT_encoding DW_FORM_data1
DW_AT_name DW_FORM_strp
DW_AT value: 0 DW_FORM value: 0
2 DW_TAG_variable \[no children\]
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_implicit_const: 3
DW_AT_decl_line DW_FORM_data1
DW_AT_type DW_FORM_ref4
DW_AT_external DW_FORM_flag_present
DW_AT_declaration DW_FORM_flag_present
DW_AT value: 0 DW_FORM value: 0
3 DW_TAG_pointer_type \[no children\]
DW_AT_byte_size DW_FORM_implicit_const: 8
DW_AT_type DW_FORM_ref4
DW_AT value: 0 DW_FORM value: 0
4 DW_TAG_variable \[no children\]
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_implicit_const: 1
DW_AT_decl_line DW_FORM_data1
DW_AT_type DW_FORM_ref4
DW_AT_external DW_FORM_flag_present
DW_AT_location DW_FORM_exprloc
DW_AT value: 0 DW_FORM value: 0
5 DW_TAG_formal_parameter \[no children\]
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_implicit_const: 1
DW_AT_decl_line DW_FORM_implicit_const: 6
DW_AT_type DW_FORM_ref4
DW_AT_location DW_FORM_sec_offset
DW_AT value: 0 DW_FORM value: 0
6 DW_TAG_compile_unit \[has children\]
DW_AT_producer DW_FORM_strp
DW_AT_language DW_FORM_data1
DW_AT_name DW_FORM_line_strp
DW_AT_comp_dir DW_FORM_line_strp
DW_AT_ranges DW_FORM_sec_offset
DW_AT_low_pc DW_FORM_addr
DW_AT_stmt_list DW_FORM_sec_offset
DW_AT value: 0 DW_FORM value: 0
7 DW_TAG_base_type \[no children\]
DW_AT_byte_size DW_FORM_data1
DW_AT_encoding DW_FORM_data1
DW_AT_name DW_FORM_string
DW_AT value: 0 DW_FORM value: 0
8 DW_TAG_variable \[no children\]
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_data1
DW_AT_decl_line DW_FORM_data2
DW_AT_type DW_FORM_ref4
DW_AT_external DW_FORM_flag_present
DW_AT_declaration DW_FORM_flag_present
DW_AT value: 0 DW_FORM value: 0
9 DW_TAG_subprogram \[has children\]
DW_AT_external DW_FORM_flag_present
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_data1
DW_AT_decl_line DW_FORM_data1
DW_AT_prototyped DW_FORM_flag_present
DW_AT_type DW_FORM_ref4
DW_AT_low_pc DW_FORM_addr
DW_AT_high_pc DW_FORM_data8
DW_AT_frame_base DW_FORM_exprloc
DW_AT_call_all_calls DW_FORM_flag_present
DW_AT_sibling DW_FORM_ref4
DW_AT value: 0 DW_FORM value: 0
10 DW_TAG_call_site \[has children\]
DW_AT_call_return_pc DW_FORM_addr
DW_AT_call_origin DW_FORM_ref4
DW_AT value: 0 DW_FORM value: 0
11 DW_TAG_call_site_parameter \[no children\]
DW_AT_location DW_FORM_exprloc
DW_AT_call_value DW_FORM_exprloc
DW_AT value: 0 DW_FORM value: 0
12 DW_TAG_subprogram \[no children\]
DW_AT_external DW_FORM_flag_present
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_data1
DW_AT_decl_line DW_FORM_data1
DW_AT_prototyped DW_FORM_flag_present
DW_AT_low_pc DW_FORM_addr
DW_AT_high_pc DW_FORM_data8
DW_AT_frame_base DW_FORM_exprloc
DW_AT_call_all_calls DW_FORM_flag_present
DW_AT value: 0 DW_FORM value: 0
13 DW_TAG_subprogram \[no children\]
DW_AT_external DW_FORM_flag_present
DW_AT_declaration DW_FORM_flag_present
DW_AT_linkage_name DW_FORM_strp
DW_AT_name DW_FORM_strp
DW_AT_decl_file DW_FORM_data1
DW_AT_decl_line DW_FORM_data2
DW_AT value: 0 DW_FORM value: 0
#...
Contents of the .debug_loclists section:
#...
Offset Begin End Expression
0000000c 0000000000001234 \(base address\)
00000015 0000000000001234 0000000000001236 \(DW_OP_reg5 \([^()]*\)\)
0000001a 0000000000001236 0000000000001239 \(DW_OP_entry_value: \(DW_OP_reg5 \([^()]*\)\); DW_OP_stack_value\)
00000022 <End of list>
00000023 0000000000001234 \(base address\)
0000002c 0000000000001234 0000000000001236 \(DW_OP_reg4 \([^()]*\)\)
00000031 0000000000001236 0000000000001239 \(DW_OP_entry_value: \(DW_OP_reg4 \([^()]*\)\); DW_OP_stack_value\)
00000039 <End of list>
Contents of the .debug_rnglists section:
Offset Begin End
0000000c 0000000000001234 0000000000001236
00000016 0000000000001234 0000000000001239
00000020 <End of list>
Raw dump of debug contents of section .debug_line:
Offset: 0x0
Length: 144
DWARF Version: 5
Prologue Length: 60
Minimum Instruction Length: 1
Maximum Ops per Instruction: 1
Initial value of 'is_stmt': 1
Line Base: -10
Line Range: 242
Opcode Base: 13
Opcodes:
Opcode 1 has 0 args
Opcode 2 has 1 args
Opcode 3 has 1 args
Opcode 4 has 1 args
Opcode 5 has 1 args
Opcode 6 has 0 args
Opcode 7 has 0 args
Opcode 8 has 0 args
Opcode 9 has 1 args
Opcode 10 has 0 args
Opcode 11 has 0 args
Opcode 12 has 1 args
The Directory Table \(offset 0x22\):
Entry Name
0 \(indirect line string, offset: 0x0\):
1 \(indirect line string, offset: 0x1\):
2 \(indirect line string, offset: 0x22\): /usr/include
The File name Table \(offset 0x34\):
Entry Dir Name
0 0 \(indirect line string, offset: 0x14\): main.c
1 1 \(indirect line string, offset: 0x1b\): main.c
2 2 \(indirect line string, offset: 0xb\): unistd.h
3 2 \(indirect line string, offset: 0x2\): getopt.h
Line Number Statements:
\[0x00000048\] Extended opcode 2: set Address to 0x1234
\[0x00000053\] Special opcode 15: advance Address by 0 to 0x1234 and Line by 5 to 6
\[0x00000054\] Extended opcode 2: set Address to 0x12346
\[0x0000005f\] Copy
\[0x00000060\] Extended opcode 2: set Address to 0x1234
\[0x0000006b\] Extended opcode 1: End of Sequence
\[0x0000006e\] Extended opcode 2: set Address to 0x1234
\[0x00000079\] Special opcode 14: advance Address by 0 to 0x1234 and Line by 4 to 5
\[0x0000007a\] Extended opcode 2: set Address to 0x1234
\[0x00000085\] Copy
\[0x00000086\] Extended opcode 2: set Address to 0x1234
\[0x00000091\] Extended opcode 1: End of Sequence
Decoded dump of debug contents of section .debug_line:
CU: ./main.c:
File name Line number Starting address View
main.c 6 0x1234
main.c 6 0x12346
main.c 6 0x1234
main.c 5 0x1234
main.c 5 0x1234
main.c 5 0x1234