1 1.1 christos /* This testcase is part of GDB, the GNU debugger. 2 1.1 christos 3 1.11 christos Copyright 2012-2024 Free Software Foundation, Inc. 4 1.1 christos 5 1.1 christos This program is free software; you can redistribute it and/or modify 6 1.1 christos it under the terms of the GNU General Public License as published by 7 1.1 christos the Free Software Foundation; either version 3 of the License, or 8 1.1 christos (at your option) any later version. 9 1.1 christos 10 1.1 christos This program is distributed in the hope that it will be useful, 11 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 12 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 1.1 christos GNU General Public License for more details. 14 1.1 christos 15 1.1 christos You should have received a copy of the GNU General Public License 16 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 1.1 christos 18 1.1 christos /* This test triggers a crash when a physname for a subprogram has 19 1.1 christos a method pointer to an anonymous struct as a parameter. This 20 1.1 christos situation is possible with templates and lambda expressions, 21 1.1 christos reproduced here by the following source code: 22 1.1 christos 23 1.1 christos class a 24 1.1 christos { 25 1.1 christos public: 26 1.1 christos int doit (void) { return 0; } 27 1.1 christos }; 28 1.1 christos 29 1.1 christos class crash 30 1.1 christos { 31 1.1 christos public: 32 1.1 christos crash (int (a::*mp) (void)) {} 33 1.1 christos }; 34 1.1 christos 35 1.1 christos In order to avoid lambdas, the resulting output has been edited to 36 1.1 christos remove the DW_AT_name attribute from the DIEs describing "class a." */ 37 1.1 christos 38 1.1 christos #define OFFSET(LBL) .Ldie_ ## LBL - .Lcu1_begin 39 1.1 christos 40 1.1 christos .section .debug_info 41 1.1 christos .Lcu1_begin: 42 1.1 christos .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit Info */ 43 1.1 christos .Lcu1_start: 44 1.1 christos .2byte 0x3 /* DWARF version number */ 45 1.1 christos .4byte .Labbrev1_begin /* Offset Into Abbrev. Section */ 46 1.1 christos .byte 0x4 /* Pointer Size (in bytes) */ 47 1.1 christos 48 1.1 christos .Ldie_b: 49 1.1 christos .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */ 50 1.1 christos .ascii "GNU C++ 4.6.3\0" /* DW_AT_producer */ 51 1.1 christos .byte 0x4 /* DW_AT_language */ 52 1.1 christos .ascii "anon-member-ptr.cc\0" /* DW_AT_name */ 53 1.1 christos .4byte .Ldebug_line0 /* DW_AT_stmt_list */ 54 1.1 christos 55 1.1 christos .Ldie_31: 56 1.1 christos .uleb128 0x2 /* (DIE (0x31) DW_TAG_class_type */ 57 1.1 christos #if 0 58 1.1 christos /* This is the "fudging" part... */ 59 1.1 christos .ascii "a\0" /* DW_AT_name */ 60 1.1 christos #endif 61 1.1 christos .byte 0x1 /* DW_AT_byte_size */ 62 1.1 christos 63 1.1 christos .Ldie_59: 64 1.1 christos .uleb128 0x4 /* (DIE (0x59) DW_TAG_base_type */ 65 1.1 christos .byte 0x4 /* DW_AT_byte_size */ 66 1.1 christos .byte 0x5 /* DW_AT_encoding */ 67 1.1 christos .ascii "int\0" /* DW_AT_name */ 68 1.1 christos 69 1.1 christos .Ldie_60: 70 1.1 christos .uleb128 0x5 /* (DIE (0x60) DW_TAG_pointer_type) */ 71 1.1 christos .byte 0x4 /* DW_AT_byte_size */ 72 1.1 christos .4byte OFFSET (31) /* DW_AT_type */ 73 1.1 christos 74 1.1 christos .Ldie_66: 75 1.1 christos .uleb128 0x6 /* (DIE (0x66) DW_TAG_class_type) */ 76 1.1 christos .ascii "crash\0" /* DW_AT_name */ 77 1.1 christos .byte 0x1 /* DW_AT_byte_size */ 78 1.1 christos .4byte OFFSET (8d) /* DW_AT_sibling */ 79 1.1 christos 80 1.1 christos .Ldie_72: 81 1.1 christos .uleb128 0x7 /* (DIE (0x72) DW_TAG_subprogram) */ 82 1.1 christos .byte 0x1 /* DW_AT_external */ 83 1.1 christos .ascii "crash\0" /* DW_AT_name */ 84 1.1 christos .byte 0x1 /* DW_AT_accessibility */ 85 1.1 christos .byte 0x1 /* DW_AT_declaration */ 86 1.1 christos .4byte OFFSET (80) /* DW_AT_object_pointer */ 87 1.1 christos 88 1.1 christos .Ldie_80: 89 1.1 christos .uleb128 0x3 /* (DIE (0x80) DW_TAG_formal_parameter */ 90 1.1 christos .4byte OFFSET (8d) /* DW_AT_type */ 91 1.1 christos .byte 0x1 /* DW_AT_artificial */ 92 1.1 christos 93 1.1 christos .Ldie_86: 94 1.1 christos .uleb128 0x3 /* (DIE (0x86) DW_TAG_formal_parameter */ 95 1.1 christos .4byte OFFSET (93) /* DW_AT_type */ 96 1.1 christos .byte 0x0 /* DW_AT_artificial */ 97 1.1 christos .byte 0 /* end of children of DIE 0x72 */ 98 1.1 christos .byte 0 /* end of children of DIE 0x66 */ 99 1.1 christos 100 1.1 christos .Ldie_8d: 101 1.1 christos .uleb128 0x5 /* (DIE (0x8d) DW_TAG_pointer_type */ 102 1.1 christos .byte 0x4 /* DW_AT_size */ 103 1.1 christos .4byte OFFSET (66) /* DW_AT_type */ 104 1.1 christos 105 1.1 christos .Ldie_93: 106 1.1 christos .uleb128 0x8 /* (DIE (0x93) DW_TAG_structure_type */ 107 1.1 christos .byte 0x10 /* DW_AT_byte_size */ 108 1.1 christos .4byte OFFSET (b4) /* DW_AT_sibling */ 109 1.1 christos 110 1.1 christos .Ldie_9b: 111 1.1 christos .uleb128 0x9 /* (DIE (0x9b) DW_TAG_member */ 112 1.1 christos .ascii "__pfn\0" /* DW_AT_name */ 113 1.1 christos .4byte OFFSET (c8) /* DW_AT_type */ 114 1.1 christos .byte 0 /* DW_AT_data_member_location */ 115 1.1 christos 116 1.1 christos .Ldie_a7: 117 1.1 christos .uleb128 0x9 /* (DIE (0xa7) DW_TAG_member */ 118 1.1 christos .ascii "__delta\0" /* DW_AT_name */ 119 1.1 christos .4byte OFFSET (ce) /* DW_AT_type */ 120 1.1 christos .byte 0x8 /* DW_AT_data_member_location */ 121 1.1 christos .byte 0 /* end of children of DIE 0x93 */ 122 1.1 christos 123 1.1 christos .Ldie_b4: 124 1.1 christos .uleb128 0xa /* (DIE (0xb4) DW_TAG_subroutine_type) */ 125 1.1 christos .4byte OFFSET (59) /* DW_AT_type */ 126 1.1 christos .4byte OFFSET (c1) /* DW_AT_object_pointer */ 127 1.1 christos .4byte OFFSET (c8) /* DW_AT_sibling */ 128 1.1 christos 129 1.1 christos .Ldie_c1: 130 1.1 christos .uleb128 0x3 /* (DIE (0xc1) DW_TAG_formal_parameter) */ 131 1.1 christos .4byte OFFSET (60) /* DW_AT_type */ 132 1.1 christos .byte 0x1 /* DW_AT_artificial */ 133 1.1 christos .byte 0 /* end of children of DIE 0xb4 */ 134 1.1 christos 135 1.1 christos .Ldie_c8: 136 1.1 christos .uleb128 0x5 /* (DIE (0xc8) DW_TAG_pointer_type) */ 137 1.1 christos .byte 0x4 /* DW_AT_byte_size */ 138 1.1 christos .4byte OFFSET (b4) /* DW_AT_type */ 139 1.1 christos 140 1.1 christos .Ldie_ce: 141 1.1 christos .uleb128 0x4 /* (DIE (0xce) DW_TAG_base_type) */ 142 1.1 christos .byte 0x8 /* DW_AT_byte_size */ 143 1.1 christos .byte 0x5 /* DW_AT_encoding */ 144 1.1 christos .ascii "long int\0" /* DW_AT_name */ 145 1.1 christos 146 1.1 christos .Ldie_107: 147 1.1 christos .uleb128 0xc /* (DIE (0x107) DW_TAG_subprogram) */ 148 1.1 christos .4byte OFFSET (72) /* DW_AT_specification */ 149 1.1 christos .byte 0x2 /* DW_AT_inline */ 150 1.1 christos .4byte OFFSET (115) /* DW_AT_object_pointer */ 151 1.1 christos .4byte OFFSET (12a) /* DW_AT_sibling */ 152 1.1 christos 153 1.1 christos .Ldie_115: 154 1.1 christos .uleb128 0xd /* (DIE (0x115) DW_TAG_formal_parameter) */ 155 1.1 christos .ascii "this\0" /* DW_AT_name */ 156 1.1 christos .4byte OFFSET (12a) /* DW_AT_type */ 157 1.1 christos .byte 0x1 /* DW_AT_artificial */ 158 1.1 christos 159 1.1 christos .Ldie_11f: 160 1.1 christos .uleb128 0xd /* (DIE (0x11f) DW_TAG_formal_parameter) */ 161 1.1 christos .ascii "mp\0" /* DW_AT_name */ 162 1.1 christos .4byte OFFSET (93) /* DW_AT_type */ 163 1.1 christos .byte 0x0 /* DW_AT_artificial */ 164 1.1 christos .byte 0 /* end of children of DIE 0x107 */ 165 1.1 christos 166 1.1 christos .Ldie_12a: 167 1.1 christos .uleb128 0xb /* (DIE (0x12a) DW_TAG_const_type) */ 168 1.1 christos .4byte OFFSET (8d) /* DW_AT_type */ 169 1.1 christos 170 1.1 christos .Ldie_12f: 171 1.1 christos .uleb128 0xe /* (DIE (0x12f) DW_TAG_subprogram) */ 172 1.1 christos .4byte OFFSET (107) /* DW_AT_abstract_origin */ 173 1.1 christos .4byte 0x20 /* DW_AT_low_pc */ 174 1.1 christos .4byte 0x2c /* DW_AT_high_pc */ 175 1.1 christos .4byte OFFSET (14e) /* DW_AT_object_pointer */ 176 1.1 christos 177 1.1 christos .Ldie_14e: 178 1.1 christos .uleb128 0xf /* (DIE (0x14e) DW_TAG_formal_parameter) */ 179 1.1 christos .4byte OFFSET (115) /* DW_AT_abstract_origin */ 180 1.1 christos .byte 0x2 /* DW_AT_location */ 181 1.1 christos .byte 0x91 182 1.1 christos .sleb128 -24 183 1.1 christos 184 1.1 christos .Ldie_156: 185 1.1 christos .uleb128 0xf /* (DIE (0x156) DW_TAG_formal_parameter) */ 186 1.1 christos .4byte OFFSET (11f) /* DW_at_abstract_origin */ 187 1.1 christos .byte 0x2 /* DW_AT_location */ 188 1.1 christos .byte 0x91 189 1.1 christos .sleb128 -40 190 1.1 christos .byte 0 /* end of children of DIE 0x12f */ 191 1.1 christos .byte 0 /* end of children of DIE 0x5b */ 192 1.1 christos .Lcu1_end: 193 1.1 christos 194 1.1 christos /* Abbrev table */ 195 1.1 christos .section .debug_abbrev 196 1.1 christos .uleb128 0x1 /* (abbrev code) */ 197 1.1 christos .uleb128 0x11 /* (TAG: DW_TAG_compile_unit) */ 198 1.1 christos .byte 0x1 /* DW_children_yes */ 199 1.1 christos .uleb128 0x25 /* (DW_AT_producer) */ 200 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 201 1.1 christos .uleb128 0x13 /* (DW_AT_language) */ 202 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 203 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 204 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 205 1.1 christos .uleb128 0x10 /* (DW_AT_stmt_list) */ 206 1.1 christos .uleb128 0x6 /* (DW_FORM_data4) */ 207 1.1 christos .byte 0 208 1.1 christos .byte 0 209 1.1 christos 210 1.1 christos .uleb128 0x2 /* (abbrev code) */ 211 1.1 christos .uleb128 0x2 /* (TAG: DW_TAG_class_type) */ 212 1.1 christos .byte 0x0 /* DW_children_no */ 213 1.1 christos #if 0 214 1.1 christos /* This is the "fudging" part... */ 215 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 216 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 217 1.1 christos #endif 218 1.1 christos .uleb128 0xb /* (DW_AT_byte_size) */ 219 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 220 1.1 christos .byte 0 221 1.1 christos .byte 0 222 1.1 christos 223 1.1 christos .uleb128 0x3 /* (abbrev code) */ 224 1.1 christos .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */ 225 1.1 christos .byte 0 /* DW_children_no */ 226 1.1 christos .uleb128 0x49 /* (DW_AT_type) */ 227 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 228 1.1 christos .uleb128 0x34 /* (DW_AT_artificial) */ 229 1.1 christos .uleb128 0xc /* (DW_FORM_flag) */ 230 1.1 christos .byte 0 231 1.1 christos .byte 0 232 1.1 christos 233 1.1 christos .uleb128 0x4 /* (abbrev code) */ 234 1.1 christos .uleb128 0x24 /* (TAG: DW_TAG_base_type) */ 235 1.1 christos .byte 0 /* DW_children_no */ 236 1.1 christos .uleb128 0xb /* (DW_AT_byte_size) */ 237 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 238 1.1 christos .uleb128 0x3e /* (DW_AT_encoding) */ 239 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 240 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 241 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 242 1.1 christos .byte 0 243 1.1 christos .byte 0 244 1.1 christos 245 1.1 christos .uleb128 0x5 /* (abbrev code) */ 246 1.1 christos .uleb128 0xf /* (TAG: DW_TAG_pointer_type) */ 247 1.1 christos .byte 0 /* DW_children_no */ 248 1.1 christos .uleb128 0xb /* (DW_AT_byte_size) */ 249 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 250 1.1 christos .uleb128 0x49 /* (DW_AT_type) */ 251 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 252 1.1 christos .byte 0 253 1.1 christos .byte 0 254 1.1 christos 255 1.1 christos .uleb128 0x6 /* (abbrev code) */ 256 1.1 christos .uleb128 0x2 /* (TAG: DW_TAG_class_type) */ 257 1.1 christos .byte 0x1 /* DW_children_yes */ 258 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 259 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 260 1.1 christos .uleb128 0xb /* (DW_AT_byte_size) */ 261 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 262 1.1 christos .uleb128 0x1 /* (DW_AT_sibling) */ 263 1.1 christos .uleb128 0x13 264 1.1 christos .byte 0 265 1.1 christos .byte 0 266 1.1 christos 267 1.1 christos .uleb128 0x7 /* (abbrev code) */ 268 1.1 christos .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */ 269 1.1 christos .byte 0x1 /* DW_children_yes */ 270 1.1 christos .uleb128 0x3f /* (DW_AT_external) */ 271 1.1 christos .uleb128 0xc /* (DW_FORM_flag) */ 272 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 273 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 274 1.1 christos .uleb128 0x32 /* (DW_AT_accessibility) */ 275 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 276 1.1 christos .uleb128 0x3c /* (DW_AT_declaration) */ 277 1.1 christos .uleb128 0xc /* (DW_FORM_flag) */ 278 1.1 christos .uleb128 0x64 /* (DW_AT_object_pointer) */ 279 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 280 1.1 christos .byte 0 281 1.1 christos .byte 0 282 1.1 christos 283 1.1 christos .uleb128 0x8 /* (abbrev code) */ 284 1.1 christos .uleb128 0x13 /* (TAG: DW_TAG_structure_type) */ 285 1.1 christos .byte 0x1 /* DW_children_yes */ 286 1.1 christos .uleb128 0xb /* (DW_AT_byte_size) */ 287 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 288 1.1 christos .uleb128 0x1 /* (DW_AT_sibling) */ 289 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 290 1.1 christos .byte 0 291 1.1 christos .byte 0 292 1.1 christos 293 1.1 christos .uleb128 0x9 /* (abbrev code) */ 294 1.1 christos .uleb128 0xd /* (TAG: DW_TAG_member) */ 295 1.1 christos .byte 0 /* DW_children_no */ 296 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 297 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 298 1.1 christos .uleb128 0x49 /* (DW_AT_type) */ 299 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 300 1.1 christos .uleb128 0x38 /* (DW_AT_data_member_location) */ 301 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 302 1.1 christos .byte 0 303 1.1 christos .byte 0 304 1.1 christos 305 1.1 christos .uleb128 0xa /* (abbrev code) */ 306 1.1 christos .uleb128 0x15 /* (TAG: DW_TAG_subroutine_type) */ 307 1.1 christos .byte 0x1 /* DW_children_yes */ 308 1.1 christos .uleb128 0x49 /* (DW_AT_type) */ 309 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 310 1.1 christos .uleb128 0x64 /* (DW_AT_object_pointer) */ 311 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 312 1.1 christos .uleb128 0x1 /* (DW_AT_sibling) */ 313 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 314 1.1 christos .byte 0 315 1.1 christos .byte 0 316 1.1 christos 317 1.1 christos .uleb128 0xb /* (abbrev code) */ 318 1.1 christos .uleb128 0x26 /* (TAG: DW_TAG_const_type) */ 319 1.1 christos .byte 0 /* DW_children_no */ 320 1.1 christos .uleb128 0x49 /* (DW_AT_type) */ 321 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 322 1.1 christos .byte 0 323 1.1 christos .byte 0 324 1.1 christos 325 1.1 christos .uleb128 0xc /* (abbrev code) */ 326 1.1 christos .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */ 327 1.1 christos .byte 0x1 /* DW_children_yes */ 328 1.1 christos .uleb128 0x47 /* (DW_AT_specification) */ 329 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 330 1.1 christos .uleb128 0x20 /* (DW_AT_inline) */ 331 1.1 christos .uleb128 0xb /* (DW_FORM_data1) */ 332 1.1 christos .uleb128 0x64 /* (DW_AT_object_pointer) */ 333 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 334 1.1 christos .uleb128 0x1 /* (DW_AT_sibling) */ 335 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 336 1.1 christos .byte 0 337 1.1 christos .byte 0 338 1.1 christos 339 1.1 christos .uleb128 0xd /* (abbrev code) */ 340 1.1 christos .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */ 341 1.1 christos .byte 0 /* DW_children_no */ 342 1.1 christos .uleb128 0x3 /* (DW_AT_name) */ 343 1.1 christos .uleb128 0x8 /* (DW_FORM_string) */ 344 1.1 christos .uleb128 0x49 /* (DW_AT_type) */ 345 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 346 1.1 christos .uleb128 0x34 /* (DW_AT_artificial) */ 347 1.1 christos .uleb128 0xc /* (DW_FORM_flag) */ 348 1.1 christos .byte 0 349 1.1 christos .byte 0 350 1.1 christos 351 1.1 christos .uleb128 0xe /* (abbrev code) */ 352 1.1 christos .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */ 353 1.1 christos .byte 0x1 /* DW_children_yes */ 354 1.1 christos .uleb128 0x31 /* (DW_AT_abstract_origin) */ 355 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 356 1.1 christos .uleb128 0x11 /* (DW_AT_low_pc) */ 357 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 358 1.1 christos .uleb128 0x12 /* (DW_AT_high_pc) */ 359 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 360 1.1 christos .uleb128 0x64 /* (DW_AT_object_pointer) */ 361 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 362 1.1 christos .byte 0 363 1.1 christos .byte 0 364 1.1 christos 365 1.1 christos .uleb128 0xf /* (abbrev code) */ 366 1.1 christos .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */ 367 1.1 christos .byte 0 /* DW_children_no */ 368 1.1 christos .uleb128 0x31 /* (DW_AT_abstract_origin) */ 369 1.1 christos .uleb128 0x13 /* (DW_FORM_ref4) */ 370 1.1 christos .uleb128 0x2 /* (DW_AT_location) */ 371 1.1 christos .uleb128 0xa /* (DW_FORM_block) */ 372 1.1 christos .byte 0 373 1.1 christos .byte 0 374 1.1 christos .byte 0 375 1.1 christos 376 1.1 christos .section .debug_line 377 1.1 christos .Ldebug_line0: 378 1.11 christos #ifdef __arm__ 379 1.11 christos .section .note.GNU-stack,"",%progbits 380 1.11 christos #else 381 1.10 christos .section .note.GNU-stack,"",@progbits 382 1.11 christos #endif 383