Home | History | Annotate | Line # | Download | only in gdb.dwarf2
member-ptr-forwardref.S revision 1.1.1.1
      1 /* This testcase is part of GDB, the GNU debugger.
      2 
      3    Copyright 2010-2014 Free Software Foundation, Inc.
      4 
      5    This program is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by
      7    the Free Software Foundation; either version 3 of the License, or
      8    (at your option) any later version.
      9 
     10    This program is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13    GNU General Public License for more details.
     14 
     15    You should have received a copy of the GNU General Public License
     16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     17 
     18 /* The goal of this test is to provide anonymous DW_TAG_structure_type
     19    containing __pfn + __delta (read in by quirk_gcc_member_function_pointer)
     20    before DW_TAG_structure_type of "class C" to exploit the forward reference
     21    through "__pfn" and back from DW_TAG_member "fp" of "class C".  As the
     22    compiler may place the DIEs in arbitrary order they are rather prepared as
     23    a .S file.
     24 
     25    class C;
     26    typedef int (C::*fp_t) ();
     27    fp_t fp;
     28    class C
     29      {
     30        int (C::*fp) ();
     31      } c;  */
     32 
     33 	.file	"member-ptr-forwardref.cc"
     34 	.section	.debug_abbrev,"",%progbits
     35 .Ldebug_abbrev0:
     36 	.section	.debug_info,"",%progbits
     37 .Ldebug_info0:
     38 	.section	.debug_line,"",%progbits
     39 .Ldebug_line0:
     40 	.text
     41 .Ltext0:
     42 .globl fp
     43 	.data
     44 	.align 4
     45 	.type	fp, %object
     46 	.size	fp, 8
     47 fp:
     48 	.zero	8
     49 .globl c
     50 	.align 4
     51 	.type	c, %object
     52 	.size	c, 8
     53 c:
     54 	.zero	8
     55 	.text
     56 .Letext0:
     57 	.file 1 "gdb.dwarf2/member-ptr-forwardref.cc"
     58 	.section	.debug_info
     59 	.4byte	0xa9	/* Length of Compilation Unit Info */
     60 	.2byte	0x3	/* DWARF version number */
     61 	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
     62 	.byte	0x4	/* Pointer Size (in bytes) */
     63 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
     64 	.4byte	.LASF2	/* DW_AT_producer: "GNU C++ 4.4.2 20091222 (Red Hat 4.4.2-20)" */
     65 	.byte	0x4	/* DW_AT_language */
     66 	.4byte	.LASF3	/* DW_AT_name: "gdb.dwarf2/member-ptr-forwardref.cc" */
     67 	.4byte	.LASF4	/* DW_AT_comp_dir: "gdb/testsuite" */
     68 	.4byte	.Ltext0	/* DW_AT_low_pc */
     69 	.4byte	.Letext0	/* DW_AT_high_pc */
     70 	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
     71 	.uleb128 0x2	/* (DIE (0x25) DW_TAG_typedef) */
     72 	.4byte	.LASF5	/* DW_AT_name: "fp_t" */
     73 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
     74 	.byte	0x13	/* DW_AT_decl_line */
     75 	.4byte	0x30	/* DW_AT_type */
     76 	.uleb128 0x3	/* (DIE (0x30) DW_TAG_structure_type) */
     77 	.byte	0x8	/* DW_AT_byte_size */
     78 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
     79 	.byte	0x13	/* DW_AT_decl_line */
     80 	.4byte	0x51	/* DW_AT_sibling */
     81 	.uleb128 0x4	/* (DIE (0x38) DW_TAG_member) */
     82 	.4byte	.LASF0	/* DW_AT_name: "__pfn" */
     83 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
     84 	.byte	0x13	/* DW_AT_decl_line */
     85 	.4byte	0x85	/* DW_AT_type */
     86 	.sleb128 0	/* DW_AT_data_member_location */
     87 	.uleb128 0x4	/* (DIE (0x44) DW_TAG_member) */
     88 	.4byte	.LASF1	/* DW_AT_name: "__delta" */
     89 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
     90 	.byte	0x13	/* DW_AT_decl_line */
     91 	.4byte	0x61	/* DW_AT_type */
     92 	.sleb128 4	/* DW_AT_data_member_location */
     93 	.byte	0x0	/* end of children of DIE 0x30 */
     94 	.uleb128 0x5	/* (DIE (0x51) DW_TAG_subroutine_type) */
     95 	.4byte	0x61	/* DW_AT_type */
     96 	.4byte	0x61	/* DW_AT_sibling */
     97 	.uleb128 0x6	/* (DIE (0x5a) DW_TAG_formal_parameter) */
     98 	.4byte	0x68	/* DW_AT_type */
     99 	.byte	0x1	/* DW_AT_artificial */
    100 	.byte	0x0	/* end of children of DIE 0x51 */
    101 	.uleb128 0x7	/* (DIE (0x61) DW_TAG_base_type) */
    102 	.byte	0x4	/* DW_AT_byte_size */
    103 	.byte	0x5	/* DW_AT_encoding */
    104 	.ascii "int\0"	/* DW_AT_name */
    105 	.uleb128 0x8	/* (DIE (0x68) DW_TAG_pointer_type) */
    106 	.byte	0x4	/* DW_AT_byte_size */
    107 	.4byte	0x6e	/* DW_AT_type */
    108 	.uleb128 0x9	/* (DIE (0x6e) DW_TAG_structure_type) */
    109 	.ascii "C\0"	/* DW_AT_name */
    110 	.byte	0x8	/* DW_AT_byte_size */
    111 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
    112 	.byte	0x16	/* DW_AT_decl_line */
    113 	.4byte	0x85	/* DW_AT_sibling */
    114 	.uleb128 0xa	/* (DIE (0x78) DW_TAG_member) */
    115 	.ascii "fp\0"	/* DW_AT_name */
    116 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
    117 	.byte	0x17	/* DW_AT_decl_line */
    118 	.4byte	0x30	/* DW_AT_type */
    119 	.sleb128 0	/* DW_AT_data_member_location */
    120 	.byte	0x3	/* DW_AT_accessibility */
    121 	.byte	0x0	/* end of children of DIE 0x6e */
    122 	.uleb128 0x8	/* (DIE (0x85) DW_TAG_pointer_type) */
    123 	.byte	0x4	/* DW_AT_byte_size */
    124 	.4byte	0x51	/* DW_AT_type */
    125 	.uleb128 0xb	/* (DIE (0x8b) DW_TAG_variable) */
    126 	.ascii "fp\0"	/* DW_AT_name */
    127 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
    128 	.byte	0x14	/* DW_AT_decl_line */
    129 	.4byte	0x25	/* DW_AT_type */
    130 	.byte	0x1	/* DW_AT_external */
    131 	.byte	0x5	/* DW_AT_location */
    132 	.byte	0x3	/* DW_OP_addr */
    133 	.4byte	fp
    134 	.uleb128 0xb	/* (DIE (0x9c) DW_TAG_variable) */
    135 	.ascii "c\0"	/* DW_AT_name */
    136 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
    137 	.byte	0x18	/* DW_AT_decl_line */
    138 	.4byte	0x6e	/* DW_AT_type */
    139 	.byte	0x1	/* DW_AT_external */
    140 	.byte	0x5	/* DW_AT_location */
    141 	.byte	0x3	/* DW_OP_addr */
    142 	.4byte	c
    143 	.byte	0x0	/* end of children of DIE 0xb */
    144 	.section	.debug_abbrev
    145 	.uleb128 0x1	/* (abbrev code) */
    146 	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
    147 	.byte	0x1	/* DW_children_yes */
    148 	.uleb128 0x25	/* (DW_AT_producer) */
    149 	.uleb128 0xe	/* (DW_FORM_strp) */
    150 	.uleb128 0x13	/* (DW_AT_language) */
    151 	.uleb128 0xb	/* (DW_FORM_data1) */
    152 	.uleb128 0x3	/* (DW_AT_name) */
    153 	.uleb128 0xe	/* (DW_FORM_strp) */
    154 	.uleb128 0x1b	/* (DW_AT_comp_dir) */
    155 	.uleb128 0xe	/* (DW_FORM_strp) */
    156 	.uleb128 0x11	/* (DW_AT_low_pc) */
    157 	.uleb128 0x1	/* (DW_FORM_addr) */
    158 	.uleb128 0x12	/* (DW_AT_high_pc) */
    159 	.uleb128 0x1	/* (DW_FORM_addr) */
    160 	.uleb128 0x10	/* (DW_AT_stmt_list) */
    161 	.uleb128 0x6	/* (DW_FORM_data4) */
    162 	.byte	0x0
    163 	.byte	0x0
    164 	.uleb128 0x2	/* (abbrev code) */
    165 	.uleb128 0x16	/* (TAG: DW_TAG_typedef) */
    166 	.byte	0x0	/* DW_children_no */
    167 	.uleb128 0x3	/* (DW_AT_name) */
    168 	.uleb128 0xe	/* (DW_FORM_strp) */
    169 	.uleb128 0x3a	/* (DW_AT_decl_file) */
    170 	.uleb128 0xb	/* (DW_FORM_data1) */
    171 	.uleb128 0x3b	/* (DW_AT_decl_line) */
    172 	.uleb128 0xb	/* (DW_FORM_data1) */
    173 	.uleb128 0x49	/* (DW_AT_type) */
    174 	.uleb128 0x13	/* (DW_FORM_ref4) */
    175 	.byte	0x0
    176 	.byte	0x0
    177 	.uleb128 0x3	/* (abbrev code) */
    178 	.uleb128 0x13	/* (TAG: DW_TAG_structure_type) */
    179 	.byte	0x1	/* DW_children_yes */
    180 	.uleb128 0xb	/* (DW_AT_byte_size) */
    181 	.uleb128 0xb	/* (DW_FORM_data1) */
    182 	.uleb128 0x3a	/* (DW_AT_decl_file) */
    183 	.uleb128 0xb	/* (DW_FORM_data1) */
    184 	.uleb128 0x3b	/* (DW_AT_decl_line) */
    185 	.uleb128 0xb	/* (DW_FORM_data1) */
    186 	.uleb128 0x1	/* (DW_AT_sibling) */
    187 	.uleb128 0x13	/* (DW_FORM_ref4) */
    188 	.byte	0x0
    189 	.byte	0x0
    190 	.uleb128 0x4	/* (abbrev code) */
    191 	.uleb128 0xd	/* (TAG: DW_TAG_member) */
    192 	.byte	0x0	/* DW_children_no */
    193 	.uleb128 0x3	/* (DW_AT_name) */
    194 	.uleb128 0xe	/* (DW_FORM_strp) */
    195 	.uleb128 0x3a	/* (DW_AT_decl_file) */
    196 	.uleb128 0xb	/* (DW_FORM_data1) */
    197 	.uleb128 0x3b	/* (DW_AT_decl_line) */
    198 	.uleb128 0xb	/* (DW_FORM_data1) */
    199 	.uleb128 0x49	/* (DW_AT_type) */
    200 	.uleb128 0x13	/* (DW_FORM_ref4) */
    201 	.uleb128 0x38	/* (DW_AT_data_member_location) */
    202 	.uleb128 0xd	/* (DW_FORM_sdata) */
    203 	.byte	0x0
    204 	.byte	0x0
    205 	.uleb128 0x5	/* (abbrev code) */
    206 	.uleb128 0x15	/* (TAG: DW_TAG_subroutine_type) */
    207 	.byte	0x1	/* DW_children_yes */
    208 	.uleb128 0x49	/* (DW_AT_type) */
    209 	.uleb128 0x13	/* (DW_FORM_ref4) */
    210 	.uleb128 0x1	/* (DW_AT_sibling) */
    211 	.uleb128 0x13	/* (DW_FORM_ref4) */
    212 	.byte	0x0
    213 	.byte	0x0
    214 	.uleb128 0x6	/* (abbrev code) */
    215 	.uleb128 0x5	/* (TAG: DW_TAG_formal_parameter) */
    216 	.byte	0x0	/* DW_children_no */
    217 	.uleb128 0x49	/* (DW_AT_type) */
    218 	.uleb128 0x13	/* (DW_FORM_ref4) */
    219 	.uleb128 0x34	/* (DW_AT_artificial) */
    220 	.uleb128 0xc	/* (DW_FORM_flag) */
    221 	.byte	0x0
    222 	.byte	0x0
    223 	.uleb128 0x7	/* (abbrev code) */
    224 	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
    225 	.byte	0x0	/* DW_children_no */
    226 	.uleb128 0xb	/* (DW_AT_byte_size) */
    227 	.uleb128 0xb	/* (DW_FORM_data1) */
    228 	.uleb128 0x3e	/* (DW_AT_encoding) */
    229 	.uleb128 0xb	/* (DW_FORM_data1) */
    230 	.uleb128 0x3	/* (DW_AT_name) */
    231 	.uleb128 0x8	/* (DW_FORM_string) */
    232 	.byte	0x0
    233 	.byte	0x0
    234 	.uleb128 0x8	/* (abbrev code) */
    235 	.uleb128 0xf	/* (TAG: DW_TAG_pointer_type) */
    236 	.byte	0x0	/* DW_children_no */
    237 	.uleb128 0xb	/* (DW_AT_byte_size) */
    238 	.uleb128 0xb	/* (DW_FORM_data1) */
    239 	.uleb128 0x49	/* (DW_AT_type) */
    240 	.uleb128 0x13	/* (DW_FORM_ref4) */
    241 	.byte	0x0
    242 	.byte	0x0
    243 	.uleb128 0x9	/* (abbrev code) */
    244 	.uleb128 0x13	/* (TAG: DW_TAG_structure_type) */
    245 	.byte	0x1	/* DW_children_yes */
    246 	.uleb128 0x3	/* (DW_AT_name) */
    247 	.uleb128 0x8	/* (DW_FORM_string) */
    248 	.uleb128 0xb	/* (DW_AT_byte_size) */
    249 	.uleb128 0xb	/* (DW_FORM_data1) */
    250 	.uleb128 0x3a	/* (DW_AT_decl_file) */
    251 	.uleb128 0xb	/* (DW_FORM_data1) */
    252 	.uleb128 0x3b	/* (DW_AT_decl_line) */
    253 	.uleb128 0xb	/* (DW_FORM_data1) */
    254 	.uleb128 0x1	/* (DW_AT_sibling) */
    255 	.uleb128 0x13	/* (DW_FORM_ref4) */
    256 	.byte	0x0
    257 	.byte	0x0
    258 	.uleb128 0xa	/* (abbrev code) */
    259 	.uleb128 0xd	/* (TAG: DW_TAG_member) */
    260 	.byte	0x0	/* DW_children_no */
    261 	.uleb128 0x3	/* (DW_AT_name) */
    262 	.uleb128 0x8	/* (DW_FORM_string) */
    263 	.uleb128 0x3a	/* (DW_AT_decl_file) */
    264 	.uleb128 0xb	/* (DW_FORM_data1) */
    265 	.uleb128 0x3b	/* (DW_AT_decl_line) */
    266 	.uleb128 0xb	/* (DW_FORM_data1) */
    267 	.uleb128 0x49	/* (DW_AT_type) */
    268 	.uleb128 0x13	/* (DW_FORM_ref4) */
    269 	.uleb128 0x38	/* (DW_AT_data_member_location) */
    270 	.uleb128 0xd	/* (DW_FORM_sdata) */
    271 	.uleb128 0x32	/* (DW_AT_accessibility) */
    272 	.uleb128 0xb	/* (DW_FORM_data1) */
    273 	.byte	0x0
    274 	.byte	0x0
    275 	.uleb128 0xb	/* (abbrev code) */
    276 	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
    277 	.byte	0x0	/* DW_children_no */
    278 	.uleb128 0x3	/* (DW_AT_name) */
    279 	.uleb128 0x8	/* (DW_FORM_string) */
    280 	.uleb128 0x3a	/* (DW_AT_decl_file) */
    281 	.uleb128 0xb	/* (DW_FORM_data1) */
    282 	.uleb128 0x3b	/* (DW_AT_decl_line) */
    283 	.uleb128 0xb	/* (DW_FORM_data1) */
    284 	.uleb128 0x49	/* (DW_AT_type) */
    285 	.uleb128 0x13	/* (DW_FORM_ref4) */
    286 	.uleb128 0x3f	/* (DW_AT_external) */
    287 	.uleb128 0xc	/* (DW_FORM_flag) */
    288 	.uleb128 0x2	/* (DW_AT_location) */
    289 	.uleb128 0xa	/* (DW_FORM_block1) */
    290 	.byte	0x0
    291 	.byte	0x0
    292 	.byte	0x0
    293 	.section	.debug_pubnames,"",%progbits
    294 	.4byte	0x1b	/* Length of Public Names Info */
    295 	.2byte	0x2	/* DWARF Version */
    296 	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
    297 	.4byte	0xad	/* Compilation Unit Length */
    298 	.4byte	0x8b	/* DIE offset */
    299 	.ascii "fp\0"	/* external name */
    300 	.4byte	0x9c	/* DIE offset */
    301 	.ascii "c\0"	/* external name */
    302 	.4byte	0x0
    303 	.section	.debug_pubtypes,"",%progbits
    304 	.4byte	0x1d	/* Length of Public Type Names Info */
    305 	.2byte	0x2	/* DWARF Version */
    306 	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
    307 	.4byte	0xad	/* Compilation Unit Length */
    308 	.4byte	0x25	/* DIE offset */
    309 	.ascii "fp_t\0"	/* external name */
    310 	.4byte	0x6e	/* DIE offset */
    311 	.ascii "C\0"	/* external name */
    312 	.4byte	0x0
    313 	.section	.debug_str,"MS",%progbits,1
    314 .LASF5:
    315 	.string	"fp_t"
    316 .LASF2:
    317 	.string	"GNU C++ 4.4.2 20091222 (Red Hat 4.4.2-20)"
    318 .LASF0:
    319 	.string	"__pfn"
    320 .LASF4:
    321 	.string	"gdb/testsuite"
    322 .LASF3:
    323 	.string	"gdb.dwarf2/member-ptr-forwardref.cc"
    324 .LASF1:
    325 	.string	"__delta"
    326 	.ident	"GCC: (GNU) 4.4.2 20091222 (Red Hat 4.4.2-20)"
    327 	.section	.note.GNU-stack,"",%progbits
    328