| /* Copyright 2012 Free Software Foundation, Inc. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| /* Testcase to exercise the code path in bug 13961 for Fission. |
| http://gcc.gnu.org/wiki/DebugFission |
| |
| Compiled from: |
| |
| class foo |
| { |
| public: |
| int bar; |
| }; |
| |
| foo baz; |
| |
| int |
| main () |
| { |
| return 0; |
| } |
| |
| And then manually edited to insert the necessary DW_AT_specification |
| entries to trigger the desired code path. |
| There's no real need to make this architecture-specific, so it has been |
| further hand-edited to support that. |
| */ |
| |
| .file "fission-reread.cc" |
| |
| .globl baz |
| .bss |
| .align 4 |
| .type baz, @object |
| .size baz, 4 |
| baz: |
| .zero 4 |
| |
| .text |
| .Ltext0: |
| .globl main |
| .type main, @function |
| main: |
| .LFB0: |
| .file 1 "fission-reread.cc" |
| .loc 1 11 0 |
| .4byte 0 |
| .LFE0: |
| .size main, .-main |
| .Letext0: |
| |
| .section .debug_types.dwo,"G",@progbits,wt.198b7eaccef12290,comdat |
| .Ltu_start_dwo: |
| .4byte .Ltu_end_dwo - .Ltu_start_dwo - 4 # Length of Compilation Unit Info |
| .2byte 0x4 # DWARF version number |
| .4byte .Ldebug_abbrev0 # Offset Into Abbrev. Section |
| .byte 0x8 # Pointer Size (in bytes) |
| .byte 0x19 # Type Signature |
| .byte 0x8b |
| .byte 0x7e |
| .byte 0xac |
| .byte 0xce |
| .byte 0xf1 |
| .byte 0x22 |
| .byte 0x90 |
| .4byte .Ltu_class_type - .Ltu_start_dwo # Offset to Type DIE |
| .uleb128 0x1 # (DIE (0x17) DW_TAG_type_unit) |
| .byte 0x4 # DW_AT_language |
| .byte 0x73 # DW_AT_GNU_odr_signature |
| .byte 0xea |
| .byte 0x85 |
| .byte 0x23 |
| .byte 0x75 |
| .byte 0x8a |
| .byte 0x7e |
| .byte 0x87 |
| .4byte .Lskeleton_debug_line0 # DW_AT_stmt_list |
| |
| /* Manually inserted to have a DW_AT_specification refering to |
| something and appearing ahead of it. */ |
| .uleb128 0x8 /* DW_TAG_class_type */ |
| .4byte .Ltu_class_type - .Ltu_start_dwo |
| /* End of manual insertion */ |
| |
| .Ltu_class_type: |
| .uleb128 0x2 # (DIE (0x25) DW_TAG_class_type) |
| .ascii "foo\0" # DW_AT_name |
| .byte 0x4 # DW_AT_byte_size |
| .byte 0x1 # DW_AT_decl_file (fission-reread.cc) |
| .byte 0x1 # DW_AT_decl_line |
| .4byte .Ltu_int # DW_AT_sibling |
| .uleb128 0x3 # (DIE (0x31) DW_TAG_member) |
| .ascii "bar\0" # DW_AT_name |
| .byte 0x1 # DW_AT_decl_file (fission-reread.cc) |
| .byte 0x4 # DW_AT_decl_line |
| .4byte .Ltu_int # DW_AT_type |
| .byte 0 # DW_AT_data_member_location |
| .byte 0x1 # DW_AT_accessibility |
| .byte 0 # end of children of DIE 0x25 |
| .Ltu_int: |
| .uleb128 0x4 # (DIE (0x3f) DW_TAG_base_type) |
| .byte 0x4 # DW_AT_byte_size |
| .byte 0x5 # DW_AT_encoding |
| .ascii "int\0" # DW_AT_name |
| .byte 0 # end of children of DIE 0x17 |
| .Ltu_end_dwo: |
| |
| .section .debug_types,"G",@progbits,wt.198b7eaccef12290,comdat |
| .Ltu_start: |
| .4byte .Ltu_end - .Ltu_start - 4 # Length of Type Unit Info |
| .2byte 0x4 # DWARF version number |
| .4byte .Lskeleton_debug_abbrev0 # Offset Into Abbrev. Section |
| .byte 0x8 # Pointer Size (in bytes) |
| .byte 0x19 # Type Signature |
| .byte 0x8b |
| .byte 0x7e |
| .byte 0xac |
| .byte 0xce |
| .byte 0xf1 |
| .byte 0x22 |
| .byte 0x90 |
| .4byte 0 # Offset to Type DIE |
| .uleb128 0x2 # (DIE (0) DW_TAG_type_unit) |
| .ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0" # DW_AT_comp_dir |
| # Normally dwo_name would be "fission-reread.dwo". |
| # Simplification: Leave the DWO contents in the executable. |
| .ascii "fission-reread\0" # DW_AT_GNU_dwo_name |
| .4byte .Ldebug_pubnames0 # DW_AT_GNU_pubnames |
| .4byte .Ldebug_pubtypes0 # DW_AT_GNU_pubtypes |
| .4byte .Ldebug_addr0 # DW_AT_GNU_addr_base |
| .Ltu_end: |
| |
| .section .debug_info.dwo,"",@progbits |
| .Lcu_start_dwo: |
| .4byte .Lcu_end_dwo - .Lcu_start_dwo - 4 # Length of Compilation Unit Info |
| .2byte 0x4 # DWARF version number |
| .4byte .Ldebug_abbrev0 # Offset Into Abbrev. Section |
| .byte 0x8 # Pointer Size (in bytes) |
| .uleb128 0x5 # (DIE (0xb) DW_TAG_compile_unit) |
| .ascii "GNU C++ 4.6.x-fission\0" # DW_AT_producer |
| .byte 0x4 # DW_AT_language |
| .ascii "fission-reread.cc\0" # DW_AT_name |
| .ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0" # DW_AT_comp_dir |
| .byte 0 # DW_AT_GNU_dwo_id |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .Lcu_int: |
| .uleb128 0x4 # (DIE (0x7f) DW_TAG_base_type) |
| .byte 0x4 # DW_AT_byte_size |
| .byte 0x5 # DW_AT_encoding |
| .ascii "int\0" # DW_AT_name |
| .uleb128 0x6 # (DIE (0x86) DW_TAG_subprogram) |
| # DW_AT_external |
| .ascii "main\0" # DW_AT_name |
| .byte 0x1 # DW_AT_decl_file (fission-reread.cc) |
| .byte 0xa # DW_AT_decl_line |
| .4byte .Lcu_int # DW_AT_type |
| .uleb128 0 # DW_AT_low_pc |
| .8byte .LFE0-.LFB0 # DW_AT_high_pc |
| .uleb128 0x1 # DW_AT_frame_base |
| .byte 0x9c # DW_OP_call_frame_cfa |
| .uleb128 0x7 # (DIE (0x9d) DW_TAG_variable) |
| .ascii "baz\0" # DW_AT_name |
| .byte 0x1 # DW_AT_decl_file (fission-reread.cc) |
| .byte 0x7 # DW_AT_decl_line |
| .byte 0x19 # DW_AT_type |
| .byte 0x8b |
| .byte 0x7e |
| .byte 0xac |
| .byte 0xce |
| .byte 0xf1 |
| .byte 0x22 |
| .byte 0x90 |
| # DW_AT_external |
| .uleb128 0x2 # DW_AT_location |
| .byte 0xfb # DW_OP_GNU_addr_index |
| .uleb128 0x1 # (index into .debug_addr) |
| .byte 0 # end of children of DIE 0xb |
| .Lcu_end_dwo: |
| |
| .section .debug_info,"",@progbits |
| .Lskeleton_debug_info0: |
| .Lcu_start: |
| .4byte .Lcu_end - .Lcu_start - 4 # Length of Compilation Unit Info |
| .2byte 0x4 # DWARF version number |
| .4byte .Lskeleton_debug_abbrev0 # Offset Into Abbrev. Section |
| .byte 0x8 # Pointer Size (in bytes) |
| .uleb128 0x1 # (DIE (0) DW_TAG_compile_unit) |
| .8byte .Ltext0 # DW_AT_low_pc |
| .8byte .Letext0-.Ltext0 # DW_AT_high_pc |
| .4byte .Ldebug_line0 # DW_AT_stmt_list |
| .ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0" # DW_AT_comp_dir |
| # Normally dwo_name would be "fission-reread.dwo". |
| # Simplification: Leave the DWO contents in the executable. |
| .ascii "fission-reread\0" # DW_AT_GNU_dwo_name |
| .4byte .Ldebug_pubnames0 # DW_AT_GNU_pubnames |
| .4byte .Ldebug_pubtypes0 # DW_AT_GNU_pubtypes |
| .4byte .Ldebug_addr0 # DW_AT_GNU_addr_base |
| .byte 0 # DW_AT_GNU_dwo_id |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .byte 0 |
| .Lcu_end: |
| |
| .section .debug_abbrev,"",@progbits |
| .Lskeleton_debug_abbrev0: |
| .uleb128 0x1 # (abbrev code) |
| .uleb128 0x11 # (TAG: DW_TAG_compile_unit) |
| .byte 0 # DW_children_no |
| .uleb128 0x11 # (DW_AT_low_pc) |
| .uleb128 0x1 # (DW_FORM_addr) |
| .uleb128 0x12 # (DW_AT_high_pc) |
| .uleb128 0x7 # (DW_FORM_data8) |
| .uleb128 0x10 # (DW_AT_stmt_list) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .uleb128 0x1b # (DW_AT_comp_dir) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x2130 # (DW_AT_GNU_dwo_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x2134 # (DW_AT_GNU_pubnames) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .uleb128 0x2135 # (DW_AT_GNU_pubtypes) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .uleb128 0x2133 # (DW_AT_GNU_addr_base) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .uleb128 0x2131 # (DW_AT_GNU_dwo_id) |
| .uleb128 0x7 # (DW_FORM_data8) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x2 # (abbrev code) |
| .uleb128 0x41 # (TAG: DW_TAG_type_unit) |
| .byte 0 # DW_children_no |
| .uleb128 0x1b # (DW_AT_comp_dir) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x2130 # (DW_AT_GNU_dwo_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x2134 # (DW_AT_GNU_pubnames) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .uleb128 0x2135 # (DW_AT_GNU_pubtypes) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .uleb128 0x2133 # (DW_AT_GNU_addr_base) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .byte 0 |
| .byte 0 |
| .byte 0 # end of skeleton .debug_abbrev |
| .section .debug_abbrev.dwo,"",@progbits |
| .Ldebug_abbrev0: |
| .uleb128 0x1 # (abbrev code) |
| .uleb128 0x41 # (TAG: DW_TAG_type_unit) |
| .byte 0x1 # DW_children_yes |
| .uleb128 0x13 # (DW_AT_language) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x210f # (DW_AT_GNU_odr_signature) |
| .uleb128 0x7 # (DW_FORM_data8) |
| .uleb128 0x10 # (DW_AT_stmt_list) |
| .uleb128 0x17 # (DW_FORM_sec_offset) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x2 # (abbrev code) |
| .uleb128 0x2 # (TAG: DW_TAG_class_type) |
| .byte 0x1 # DW_children_yes |
| .uleb128 0x3 # (DW_AT_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0xb # (DW_AT_byte_size) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3a # (DW_AT_decl_file) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3b # (DW_AT_decl_line) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x1 # (DW_AT_sibling) |
| .uleb128 0x13 # (DW_FORM_ref4) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x3 # (abbrev code) |
| .uleb128 0xd # (TAG: DW_TAG_member) |
| .byte 0 # DW_children_no |
| .uleb128 0x3 # (DW_AT_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x3a # (DW_AT_decl_file) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3b # (DW_AT_decl_line) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x49 # (DW_AT_type) |
| .uleb128 0x13 # (DW_FORM_ref4) |
| .uleb128 0x38 # (DW_AT_data_member_location) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x32 # (DW_AT_accessibility) |
| .uleb128 0xb # (DW_FORM_data1) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x4 # (abbrev code) |
| .uleb128 0x24 # (TAG: DW_TAG_base_type) |
| .byte 0 # DW_children_no |
| .uleb128 0xb # (DW_AT_byte_size) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3e # (DW_AT_encoding) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3 # (DW_AT_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x5 # (abbrev code) |
| .uleb128 0x11 # (TAG: DW_TAG_compile_unit) |
| .byte 0x1 # DW_children_yes |
| .uleb128 0x25 # (DW_AT_producer) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x13 # (DW_AT_language) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3 # (DW_AT_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x1b # (DW_AT_comp_dir) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x2131 # (DW_AT_GNU_dwo_id) |
| .uleb128 0x7 # (DW_FORM_data8) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x6 # (abbrev code) |
| .uleb128 0x2e # (TAG: DW_TAG_subprogram) |
| .byte 0 # DW_children_no |
| .uleb128 0x3f # (DW_AT_external) |
| .uleb128 0x19 # (DW_FORM_flag_present) |
| .uleb128 0x3 # (DW_AT_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x3a # (DW_AT_decl_file) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3b # (DW_AT_decl_line) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x49 # (DW_AT_type) |
| .uleb128 0x13 # (DW_FORM_ref4) |
| .uleb128 0x11 # (DW_AT_low_pc) |
| .uleb128 0x1f01 # (DW_FORM_GNU_addr_index) |
| .uleb128 0x12 # (DW_AT_high_pc) |
| .uleb128 0x7 # (DW_FORM_data8) |
| .uleb128 0x40 # (DW_AT_frame_base) |
| .uleb128 0x18 # (DW_FORM_exprloc) |
| .byte 0 |
| .byte 0 |
| .uleb128 0x7 # (abbrev code) |
| .uleb128 0x34 # (TAG: DW_TAG_variable) |
| .byte 0 # DW_children_no |
| .uleb128 0x3 # (DW_AT_name) |
| .uleb128 0x8 # (DW_FORM_string) |
| .uleb128 0x3a # (DW_AT_decl_file) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x3b # (DW_AT_decl_line) |
| .uleb128 0xb # (DW_FORM_data1) |
| .uleb128 0x49 # (DW_AT_type) |
| .uleb128 0x20 # (DW_FORM_ref_sig8) |
| .uleb128 0x3f # (DW_AT_external) |
| .uleb128 0x19 # (DW_FORM_flag_present) |
| .uleb128 0x2 # (DW_AT_location) |
| .uleb128 0x18 # (DW_FORM_exprloc) |
| .byte 0 |
| .byte 0 |
| |
| /* Manually inserted. */ |
| .uleb128 0x8 /* abbrev code */ |
| .uleb128 0x2 /* DW_TAG_class_type */ |
| .byte 0x0 /* DW_has_children_no */ |
| .uleb128 0x47 /* DW_AT_specification */ |
| .uleb128 0x13 /* DW_FORM_ref4 */ |
| .byte 0x0 /* Terminator */ |
| .byte 0x0 /* Terminator */ |
| /* End of manual insertion. */ |
| |
| .byte 0 |
| .section .debug_pubnames,"",@progbits |
| .Ldebug_pubnames0: |
| .4byte 0x1f # Length of Public Names Info |
| .2byte 0x2 # DWARF Version |
| .4byte .Lskeleton_debug_info0 # Offset of Compilation Unit Info |
| .4byte 0xb0 # Compilation Unit Length |
| .4byte 0x86 # DIE offset |
| .ascii "main\0" # external name |
| .4byte 0x9d # DIE offset |
| .ascii "baz\0" # external name |
| .4byte 0 |
| .section .debug_pubtypes,"",@progbits |
| .Ldebug_pubtypes0: |
| .4byte 0x1e # Length of Public Type Names Info |
| .2byte 0x2 # DWARF Version |
| .4byte .Lskeleton_debug_info0 # Offset of Compilation Unit Info |
| .4byte 0xb0 # Compilation Unit Length |
| .4byte 0x7f # DIE offset |
| .ascii "int\0" # external name |
| .4byte 0x25 # DIE offset |
| .ascii "foo\0" # external name |
| .4byte 0 |
| .section .debug_aranges,"",@progbits |
| .4byte 0x2c # Length of Address Ranges Info |
| .2byte 0x2 # DWARF Version |
| .4byte .Lskeleton_debug_info0 # Offset of Compilation Unit Info |
| .byte 0x8 # Size of Address |
| .byte 0 # Size of Segment Descriptor |
| .2byte 0 # Pad to 16 byte boundary |
| .2byte 0 |
| .8byte .Ltext0 # Address |
| .8byte .Letext0-.Ltext0 # Length |
| .8byte 0 |
| .8byte 0 |
| .section .debug_line,"",@progbits |
| .Ldebug_line0: |
| .section .debug_line.dwo,"",@progbits |
| .Lskeleton_debug_line0: |
| .4byte .LELT0-.LSLT0 # Length of Source Line Info |
| .LSLT0: |
| .2byte 0x4 # DWARF Version |
| .4byte .LELTP0-.LASLTP0 # Prolog Length |
| .LASLTP0: |
| .byte 0x1 # Minimum Instruction Length |
| .byte 0x1 # Maximum Operations Per Instruction |
| .byte 0x1 # Default is_stmt_start flag |
| .byte 0xf6 # Line Base Value (Special Opcodes) |
| .byte 0xf5 # Line Range Value (Special Opcodes) |
| .byte 0xa # Special Opcode Base |
| .byte 0 # opcode: 0x1 has 0 args |
| .byte 0x1 # opcode: 0x2 has 1 args |
| .byte 0x1 # opcode: 0x3 has 1 args |
| .byte 0x1 # opcode: 0x4 has 1 args |
| .byte 0x1 # opcode: 0x5 has 1 args |
| .byte 0 # opcode: 0x6 has 0 args |
| .byte 0 # opcode: 0x7 has 0 args |
| .byte 0 # opcode: 0x8 has 0 args |
| .byte 0x1 # opcode: 0x9 has 1 args |
| .byte 0 # End directory table |
| .ascii "fission-reread.cc\0" # File Entry: 0x1 |
| .uleb128 0 |
| .uleb128 0 |
| .uleb128 0 |
| .byte 0 # End file name table |
| .LELTP0: |
| .LELT0: |
| .section .debug_addr,"",@progbits |
| .Ldebug_addr0: |
| .8byte .LFB0 # DW_AT_low_pc |
| .8byte baz # DW_AT_location |
| |
| .section .note.GNU-stack,"",@progbits |