378 lines
11 KiB
ArmAsm
378 lines
11 KiB
ArmAsm
/* This testcase is part of GDB, the GNU debugger.
|
|
|
|
Copyright 2012-2020 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/>. */
|
|
|
|
/* This test triggers a crash when a physname for a subprogram has
|
|
a method pointer to an anonymous struct as a parameter. This
|
|
situation is possible with templates and lambda expressions,
|
|
reproduced here by the following source code:
|
|
|
|
class a
|
|
{
|
|
public:
|
|
int doit (void) { return 0; }
|
|
};
|
|
|
|
class crash
|
|
{
|
|
public:
|
|
crash (int (a::*mp) (void)) {}
|
|
};
|
|
|
|
In order to avoid lambdas, the resulting output has been edited to
|
|
remove the DW_AT_name attribute from the DIEs describing "class a." */
|
|
|
|
#define OFFSET(LBL) .Ldie_ ## LBL - .Lcu1_begin
|
|
|
|
.section .debug_info
|
|
.Lcu1_begin:
|
|
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit Info */
|
|
.Lcu1_start:
|
|
.2byte 0x3 /* DWARF version number */
|
|
.4byte .Labbrev1_begin /* Offset Into Abbrev. Section */
|
|
.byte 0x4 /* Pointer Size (in bytes) */
|
|
|
|
.Ldie_b:
|
|
.uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */
|
|
.ascii "GNU C++ 4.6.3\0" /* DW_AT_producer */
|
|
.byte 0x4 /* DW_AT_language */
|
|
.ascii "anon-member-ptr.cc\0" /* DW_AT_name */
|
|
.4byte .Ldebug_line0 /* DW_AT_stmt_list */
|
|
|
|
.Ldie_31:
|
|
.uleb128 0x2 /* (DIE (0x31) DW_TAG_class_type */
|
|
#if 0
|
|
/* This is the "fudging" part... */
|
|
.ascii "a\0" /* DW_AT_name */
|
|
#endif
|
|
.byte 0x1 /* DW_AT_byte_size */
|
|
|
|
.Ldie_59:
|
|
.uleb128 0x4 /* (DIE (0x59) DW_TAG_base_type */
|
|
.byte 0x4 /* DW_AT_byte_size */
|
|
.byte 0x5 /* DW_AT_encoding */
|
|
.ascii "int\0" /* DW_AT_name */
|
|
|
|
.Ldie_60:
|
|
.uleb128 0x5 /* (DIE (0x60) DW_TAG_pointer_type) */
|
|
.byte 0x4 /* DW_AT_byte_size */
|
|
.4byte OFFSET (31) /* DW_AT_type */
|
|
|
|
.Ldie_66:
|
|
.uleb128 0x6 /* (DIE (0x66) DW_TAG_class_type) */
|
|
.ascii "crash\0" /* DW_AT_name */
|
|
.byte 0x1 /* DW_AT_byte_size */
|
|
.4byte OFFSET (8d) /* DW_AT_sibling */
|
|
|
|
.Ldie_72:
|
|
.uleb128 0x7 /* (DIE (0x72) DW_TAG_subprogram) */
|
|
.byte 0x1 /* DW_AT_external */
|
|
.ascii "crash\0" /* DW_AT_name */
|
|
.byte 0x1 /* DW_AT_accessibility */
|
|
.byte 0x1 /* DW_AT_declaration */
|
|
.4byte OFFSET (80) /* DW_AT_object_pointer */
|
|
|
|
.Ldie_80:
|
|
.uleb128 0x3 /* (DIE (0x80) DW_TAG_formal_parameter */
|
|
.4byte OFFSET (8d) /* DW_AT_type */
|
|
.byte 0x1 /* DW_AT_artificial */
|
|
|
|
.Ldie_86:
|
|
.uleb128 0x3 /* (DIE (0x86) DW_TAG_formal_parameter */
|
|
.4byte OFFSET (93) /* DW_AT_type */
|
|
.byte 0x0 /* DW_AT_artificial */
|
|
.byte 0 /* end of children of DIE 0x72 */
|
|
.byte 0 /* end of children of DIE 0x66 */
|
|
|
|
.Ldie_8d:
|
|
.uleb128 0x5 /* (DIE (0x8d) DW_TAG_pointer_type */
|
|
.byte 0x4 /* DW_AT_size */
|
|
.4byte OFFSET (66) /* DW_AT_type */
|
|
|
|
.Ldie_93:
|
|
.uleb128 0x8 /* (DIE (0x93) DW_TAG_structure_type */
|
|
.byte 0x10 /* DW_AT_byte_size */
|
|
.4byte OFFSET (b4) /* DW_AT_sibling */
|
|
|
|
.Ldie_9b:
|
|
.uleb128 0x9 /* (DIE (0x9b) DW_TAG_member */
|
|
.ascii "__pfn\0" /* DW_AT_name */
|
|
.4byte OFFSET (c8) /* DW_AT_type */
|
|
.byte 0 /* DW_AT_data_member_location */
|
|
|
|
.Ldie_a7:
|
|
.uleb128 0x9 /* (DIE (0xa7) DW_TAG_member */
|
|
.ascii "__delta\0" /* DW_AT_name */
|
|
.4byte OFFSET (ce) /* DW_AT_type */
|
|
.byte 0x8 /* DW_AT_data_member_location */
|
|
.byte 0 /* end of children of DIE 0x93 */
|
|
|
|
.Ldie_b4:
|
|
.uleb128 0xa /* (DIE (0xb4) DW_TAG_subroutine_type) */
|
|
.4byte OFFSET (59) /* DW_AT_type */
|
|
.4byte OFFSET (c1) /* DW_AT_object_pointer */
|
|
.4byte OFFSET (c8) /* DW_AT_sibling */
|
|
|
|
.Ldie_c1:
|
|
.uleb128 0x3 /* (DIE (0xc1) DW_TAG_formal_parameter) */
|
|
.4byte OFFSET (60) /* DW_AT_type */
|
|
.byte 0x1 /* DW_AT_artificial */
|
|
.byte 0 /* end of children of DIE 0xb4 */
|
|
|
|
.Ldie_c8:
|
|
.uleb128 0x5 /* (DIE (0xc8) DW_TAG_pointer_type) */
|
|
.byte 0x4 /* DW_AT_byte_size */
|
|
.4byte OFFSET (b4) /* DW_AT_type */
|
|
|
|
.Ldie_ce:
|
|
.uleb128 0x4 /* (DIE (0xce) DW_TAG_base_type) */
|
|
.byte 0x8 /* DW_AT_byte_size */
|
|
.byte 0x5 /* DW_AT_encoding */
|
|
.ascii "long int\0" /* DW_AT_name */
|
|
|
|
.Ldie_107:
|
|
.uleb128 0xc /* (DIE (0x107) DW_TAG_subprogram) */
|
|
.4byte OFFSET (72) /* DW_AT_specification */
|
|
.byte 0x2 /* DW_AT_inline */
|
|
.4byte OFFSET (115) /* DW_AT_object_pointer */
|
|
.4byte OFFSET (12a) /* DW_AT_sibling */
|
|
|
|
.Ldie_115:
|
|
.uleb128 0xd /* (DIE (0x115) DW_TAG_formal_parameter) */
|
|
.ascii "this\0" /* DW_AT_name */
|
|
.4byte OFFSET (12a) /* DW_AT_type */
|
|
.byte 0x1 /* DW_AT_artificial */
|
|
|
|
.Ldie_11f:
|
|
.uleb128 0xd /* (DIE (0x11f) DW_TAG_formal_parameter) */
|
|
.ascii "mp\0" /* DW_AT_name */
|
|
.4byte OFFSET (93) /* DW_AT_type */
|
|
.byte 0x0 /* DW_AT_artificial */
|
|
.byte 0 /* end of children of DIE 0x107 */
|
|
|
|
.Ldie_12a:
|
|
.uleb128 0xb /* (DIE (0x12a) DW_TAG_const_type) */
|
|
.4byte OFFSET (8d) /* DW_AT_type */
|
|
|
|
.Ldie_12f:
|
|
.uleb128 0xe /* (DIE (0x12f) DW_TAG_subprogram) */
|
|
.4byte OFFSET (107) /* DW_AT_abstract_origin */
|
|
.4byte 0x20 /* DW_AT_low_pc */
|
|
.4byte 0x2c /* DW_AT_high_pc */
|
|
.4byte OFFSET (14e) /* DW_AT_object_pointer */
|
|
|
|
.Ldie_14e:
|
|
.uleb128 0xf /* (DIE (0x14e) DW_TAG_formal_parameter) */
|
|
.4byte OFFSET (115) /* DW_AT_abstract_origin */
|
|
.byte 0x2 /* DW_AT_location */
|
|
.byte 0x91
|
|
.sleb128 -24
|
|
|
|
.Ldie_156:
|
|
.uleb128 0xf /* (DIE (0x156) DW_TAG_formal_parameter) */
|
|
.4byte OFFSET (11f) /* DW_at_abstract_origin */
|
|
.byte 0x2 /* DW_AT_location */
|
|
.byte 0x91
|
|
.sleb128 -40
|
|
.byte 0 /* end of children of DIE 0x12f */
|
|
.byte 0 /* end of children of DIE 0x5b */
|
|
.Lcu1_end:
|
|
|
|
/* Abbrev table */
|
|
.section .debug_abbrev
|
|
.uleb128 0x1 /* (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 0x10 /* (DW_AT_stmt_list) */
|
|
.uleb128 0x6 /* (DW_FORM_data4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0x2 /* (abbrev code) */
|
|
.uleb128 0x2 /* (TAG: DW_TAG_class_type) */
|
|
.byte 0x0 /* DW_children_no */
|
|
#if 0
|
|
/* This is the "fudging" part... */
|
|
.uleb128 0x3 /* (DW_AT_name) */
|
|
.uleb128 0x8 /* (DW_FORM_string) */
|
|
#endif
|
|
.uleb128 0xb /* (DW_AT_byte_size) */
|
|
.uleb128 0xb /* (DW_FORM_data1) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0x3 /* (abbrev code) */
|
|
.uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
|
|
.byte 0 /* DW_children_no */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x34 /* (DW_AT_artificial) */
|
|
.uleb128 0xc /* (DW_FORM_flag) */
|
|
.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 0xf /* (TAG: DW_TAG_pointer_type) */
|
|
.byte 0 /* DW_children_no */
|
|
.uleb128 0xb /* (DW_AT_byte_size) */
|
|
.uleb128 0xb /* (DW_FORM_data1) */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0x6 /* (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 0x1 /* (DW_AT_sibling) */
|
|
.uleb128 0x13
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0x7 /* (abbrev code) */
|
|
.uleb128 0x2e /* (TAG: DW_TAG_subprogram) */
|
|
.byte 0x1 /* DW_children_yes */
|
|
.uleb128 0x3f /* (DW_AT_external) */
|
|
.uleb128 0xc /* (DW_FORM_flag) */
|
|
.uleb128 0x3 /* (DW_AT_name) */
|
|
.uleb128 0x8 /* (DW_FORM_string) */
|
|
.uleb128 0x32 /* (DW_AT_accessibility) */
|
|
.uleb128 0xb /* (DW_FORM_data1) */
|
|
.uleb128 0x3c /* (DW_AT_declaration) */
|
|
.uleb128 0xc /* (DW_FORM_flag) */
|
|
.uleb128 0x64 /* (DW_AT_object_pointer) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0x8 /* (abbrev code) */
|
|
.uleb128 0x13 /* (TAG: DW_TAG_structure_type) */
|
|
.byte 0x1 /* DW_children_yes */
|
|
.uleb128 0xb /* (DW_AT_byte_size) */
|
|
.uleb128 0xb /* (DW_FORM_data1) */
|
|
.uleb128 0x1 /* (DW_AT_sibling) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0x9 /* (abbrev code) */
|
|
.uleb128 0xd /* (TAG: DW_TAG_member) */
|
|
.byte 0 /* DW_children_no */
|
|
.uleb128 0x3 /* (DW_AT_name) */
|
|
.uleb128 0x8 /* (DW_FORM_string) */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x38 /* (DW_AT_data_member_location) */
|
|
.uleb128 0xb /* (DW_FORM_data1) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0xa /* (abbrev code) */
|
|
.uleb128 0x15 /* (TAG: DW_TAG_subroutine_type) */
|
|
.byte 0x1 /* DW_children_yes */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x64 /* (DW_AT_object_pointer) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x1 /* (DW_AT_sibling) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0xb /* (abbrev code) */
|
|
.uleb128 0x26 /* (TAG: DW_TAG_const_type) */
|
|
.byte 0 /* DW_children_no */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0xc /* (abbrev code) */
|
|
.uleb128 0x2e /* (TAG: DW_TAG_subprogram) */
|
|
.byte 0x1 /* DW_children_yes */
|
|
.uleb128 0x47 /* (DW_AT_specification) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x20 /* (DW_AT_inline) */
|
|
.uleb128 0xb /* (DW_FORM_data1) */
|
|
.uleb128 0x64 /* (DW_AT_object_pointer) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x1 /* (DW_AT_sibling) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0xd /* (abbrev code) */
|
|
.uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
|
|
.byte 0 /* DW_children_no */
|
|
.uleb128 0x3 /* (DW_AT_name) */
|
|
.uleb128 0x8 /* (DW_FORM_string) */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x34 /* (DW_AT_artificial) */
|
|
.uleb128 0xc /* (DW_FORM_flag) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0xe /* (abbrev code) */
|
|
.uleb128 0x2e /* (TAG: DW_TAG_subprogram) */
|
|
.byte 0x1 /* DW_children_yes */
|
|
.uleb128 0x31 /* (DW_AT_abstract_origin) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x11 /* (DW_AT_low_pc) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x12 /* (DW_AT_high_pc) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x64 /* (DW_AT_object_pointer) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.uleb128 0xf /* (abbrev code) */
|
|
.uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
|
|
.byte 0 /* DW_children_no */
|
|
.uleb128 0x31 /* (DW_AT_abstract_origin) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x2 /* (DW_AT_location) */
|
|
.uleb128 0xa /* (DW_FORM_block) */
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
|
|
.section .debug_line
|
|
.Ldebug_line0:
|