From c37bf5283731a82e13a75a30762eaba820c165fd Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Fri, 20 Aug 2010 17:16:15 +0000 Subject: [PATCH] PR symtab/11465: * gdb.dwarf2/pr11465.exp: New test. * gdb.dwarf2/pr11465.S: New file. * gdb.dwarf2/dw2-double-set-die-type.S: New file. * gdb.dwarf2/dw2-double-set-die-type.exp: New test. --- gdb/testsuite/ChangeLog | 8 + .../gdb.dwarf2/dw2-double-set-die-type.S | 632 ++++++++++++++++++ .../gdb.dwarf2/dw2-double-set-die-type.exp | 41 ++ gdb/testsuite/gdb.dwarf2/pr11465.S | 355 ++++++++++ gdb/testsuite/gdb.dwarf2/pr11465.exp | 40 ++ 5 files changed, 1076 insertions(+) create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp create mode 100644 gdb/testsuite/gdb.dwarf2/pr11465.S create mode 100644 gdb/testsuite/gdb.dwarf2/pr11465.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a75d2574254..c44e472f93e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2010-08-20 Keith Seitz + + PR symtab/11465: + * gdb.dwarf2/pr11465.exp: New test. + * gdb.dwarf2/pr11465.S: New file. + * gdb.dwarf2/dw2-double-set-die-type.S: New file. + * gdb.dwarf2/dw2-double-set-die-type.exp: New test. + 2010-08-19 Thiago Jung Bauermann * gdb.arch/vsx-regs.exp: Remove wrong comment about testing AltiVec diff --git a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S new file mode 100644 index 00000000000..1b70f4444c3 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S @@ -0,0 +1,632 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2010 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 . */ + +/* This test triggers a complaint when gdb attempts to set a DIE's + type twice. The test was derived from the following source code: + + #include + + class a + { + private: + class b + { + public: + b () { } + }; + + std::vector list_; + }; + + What follows below is a much simplified version of the debug info generated + by gcc from the above code. */ + +#define OFFSET(LBL) .Ldie_ ## LBL - .Lcu1_begin + + .section .debug_info +.Lcu1_begin: + .4byte .Lcu1_end - .Lcu1_start # Length of Compilation Unit Info +.Lcu1_start: + .value 0x3 # DWARF version number + .long .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.4.3 20100127 (Red Hat 4.4.3-4)\0" # DW_AT_producer + .byte 0x4 # DW_AT_language + .ascii "duplicate-type.cc\0" # DW_AT_name + .long .Ldebug_line0 # DW_AT_stmt_list + +.Ldie_38: + .uleb128 0x3 # (DIE (0x38) DW_TAG_typedef) + .ascii "size_t\0" # DW_AT_name + .long OFFSET (43) # DW_AT_type + +.Ldie_43: + .uleb128 0x2 # (DIE (0x43) DW_TAG_base_type) + .byte 0x4 # DW_AT_byte_size + .byte 0x7 # DW_AT_encoding + .ascii "long unsigned int\0" # DW_AT_name + +.Ldie_4a: + .uleb128 0x4 # (DIE (0x4a) DW_TAG_namespace) + .ascii "std\0" # DW_AT_name + .long OFFSET (143) # DW_AT_sibling + +.Ldie_70: + .uleb128 0x8 # (DIE (0x70) DW_TAG_class_type) + .ascii "allocator\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + +.Ldie_76: + .uleb128 0x9 # (DIE (0x76) DW_TAG_structure_type) + .ascii "_Vector_base >\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + .long OFFSET (f7) # DW_AT_sibling + +.Ldie_80: + .uleb128 0xa # (DIE (0x80) DW_TAG_structure_type) + .ascii "_Vector_impl\0" # DW_AT_name + .byte 0x18 # DW_AT_byte_size + +.Ldie_88: + .uleb128 0xb # (DIE (0x88) DW_TAG_inheritance) + .long OFFSET (3e0) # DW_AT_type + .sleb128 0 # DW_AT_data_member_location + .byte 0x1 # DW_AT_accessibility + .byte 0x0 # end of children of DIE 0x80 + .byte 0x0 # end of children of DIE 0x76 + +.Ldie_f7: + .uleb128 0x8 # (DIE (0xf7) DW_TAG_class_type) + .ascii "vector >\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + .byte 0x0 # end of children of DIE 0x4a + +.Ldie_143: + .uleb128 0x13 # (DIE (0x143) DW_TAG_base_type) + .byte 0x4 # DW_AT_byte_size + .byte 0x5 # DW_AT_encoding + +.Ldie_162: + .uleb128 0x8 # (DIE (0x162) DW_TAG_class_type) + .ascii "new_allocator\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + +.Ldie_19f: + .uleb128 0x2 # (DIE (0x19f) DW_TAG_base_type) + .byte 0x4 # DW_AT_byte_size + .byte 0x5 # DW_AT_encoding + .ascii "int\0" # DW_AT_name + +.Ldie_1c6: + .uleb128 0x17 # (DIE (0x1c6) DW_TAG_pointer_type) + .byte 0x8 # DW_AT_byte_size + .long OFFSET (1cc) # DW_AT_type + +.Ldie_1cc: + .uleb128 0x18 # (DIE (0x1cc) DW_TAG_const_type) + +.Ldie_1cd: + .uleb128 0x2 # (DIE (0x1cd) DW_TAG_base_type) + .byte 0x1 # DW_AT_byte_size + .byte 0x6 # DW_AT_encoding + .ascii "char\0" # DW_AT_name + +.Ldie_221: + .uleb128 0x1b # (DIE (0x221) DW_TAG_class_type) + .ascii "a\0" # DW_AT_name + .byte 0x18 # DW_AT_byte_size + .long OFFSET (277) # DW_AT_sibling + +.Ldie_22b: + .uleb128 0x1b # (DIE (0x22b) DW_TAG_class_type) + .ascii "b\0" # DW_AT_name + .byte 0x1 # DW_AT_byte_size + .long OFFSET (244) # DW_AT_sibling + +.Ldie_235: + .uleb128 0x1c # (DIE (0x235) DW_TAG_subprogram) + .byte 0x1 # DW_AT_external + .ascii "b\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + +.Ldie_23c: + .uleb128 0xe # (DIE (0x23c) DW_TAG_formal_parameter) + .long OFFSET (277) # DW_AT_type + .byte 0x1 # DW_AT_artificial + .byte 0x0 # end of children of DIE 0x235 + .byte 0x0 # end of children of DIE 0x22b + +.Ldie_244: + .uleb128 0x1d # (DIE (0x244) DW_TAG_member) + .ascii "list\0" # DW_AT_name + .long OFFSET (59d) # DW_AT_type + .sleb128 0 # DW_AT_data_member_location + .byte 0x3 # DW_AT_accessibility + +.Ldie_251: + .uleb128 0x1e # (DIE (0x251) DW_TAG_subprogram) + .byte 0x1 # DW_AT_external + .ascii "a\0" # DW_AT_name + .byte 0x1 # DW_AT_artificial + .byte 0x1 # DW_AT_declaration + .long OFFSET (262) # DW_AT_sibling + +.Ldie_25b: + .uleb128 0xe # (DIE (0x25b) DW_TAG_formal_parameter) + .long OFFSET (b61) # DW_AT_type + .byte 0x1 # DW_AT_artificial + .byte 0x0 # end of children of DIE 0x251 + +.Ldie_262: + .uleb128 0x1f # (DIE (0x262) DW_TAG_subprogram) + .byte 0x1 # DW_AT_external + .ascii "~a\0" # DW_AT_name + .byte 0x1 # DW_AT_artificial + .byte 0x1 # DW_AT_declaration + +.Ldie_269: + .uleb128 0xe # (DIE (0x269) DW_TAG_formal_parameter) + .long OFFSET (b61) # DW_AT_type + .byte 0x1 # DW_AT_artificial + +.Ldie_26f: + .uleb128 0xe # (DIE (0x26f) DW_TAG_formal_parameter) + .long OFFSET (19f) # DW_AT_type + .byte 0x1 # DW_AT_artificial + .byte 0x0 # end of children of DIE 0x262 + .byte 0x0 # end of children of DIE 0x221 + +.Ldie_277: + .uleb128 0x17 # (DIE (0x277) DW_TAG_pointer_type) + .byte 0x4 # DW_AT_byte_size + .long OFFSET (22b) # DW_AT_type + +.Ldie_27d: + .uleb128 0x20 # (DIE (0x27d) DW_TAG_class_type) + .long OFFSET (162) # DW_AT_specification + .byte 0x1 # DW_AT_byte_size + .long OFFSET (3b2) # DW_AT_sibling + +.Ldie_2d0: + .uleb128 0x21 # (DIE (0x2d0) DW_TAG_subprogram) + .byte 0x1 # DW_AT_external + .ascii "address\0" # DW_AT_name + .long OFFSET (277) # DW_AT_type + .byte 0x1 # DW_AT_declaration + .long OFFSET (3b2) # DW_AT_sibling + +.Ldie_2e5: + .uleb128 0xe # (DIE (0x2e5) DW_TAG_formal_parameter) + .long OFFSET (3da) # DW_AT_type + .byte 0x1 # DW_AT_artificial + +.Ldie_2eb: + .uleb128 0xf # (DIE (0x2eb) DW_TAG_formal_parameter) + .long OFFSET (3bd) # DW_AT_type + .byte 0x0 # end of children of DIE 0x2d0 + .byte 0x0 # end of children of DIE 0x27d + +.Ldie_3b2: + .uleb128 0x17 # (DIE (0x3b2) DW_TAG_pointer_type) + .byte 0x4 # DW_AT_byte_size + .long OFFSET (3b8) # DW_AT_type + +.Ldie_3b8: + .uleb128 0x19 # (DIE (0x3b8) DW_TAG_const_type) + .long OFFSET (22b) # DW_AT_type + +.Ldie_3bd: + .uleb128 0x22 # (DIE (0x3bd) DW_TAG_reference_type) + .byte 0x4 # DW_AT_byte_size + .long OFFSET (22b) # DW_AT_type + +.Ldie_3d5: + .uleb128 0x19 # (DIE (0x3d5) DW_TAG_const_type) + .long OFFSET (27d) # DW_AT_type + +.Ldie_3da: + .uleb128 0x17 # (DIE (0x3da) DW_TAG_pointer_type) + .byte 0x4 # DW_AT_byte_size + .long OFFSET (3d5) # DW_AT_type + +.Ldie_3e0: + .Uleb128 0x20 # (DIE (0x3e0) DW_TAG_class_type) + .long OFFSET (70) # DW_AT_specification + .byte 0x1 # DW_AT_byte_size + .long OFFSET (44e) # DW_AT_sibling + +.Ldie_3ec: + .uleb128 0xb # (DIE (0x3ec) DW_TAG_inheritance) + .long OFFSET (27d) # DW_AT_type + .sleb128 0 # DW_AT_data_member_location + .byte 0x1 # DW_AT_accessibility + .byte 0x0 # end of children of DIE 0x3e0 + +.Ldie_44e: + .uleb128 0x1a # (DIE (0x44e) DW_TAG_structure_type) + .long OFFSET (76) # DW_AT_specification + .byte 0x18 # DW_AT_byte_size + .long OFFSET (505) # DW_AT_sibling + +.Ldie_505: + .uleb128 0x11 # (DIE (0x505) DW_TAG_subprogram) + .ascii "~_Vector_base\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + .long OFFSET (51f) # DW_AT_sibling + +.Ldie_512: + .uleb128 0xe # (DIE (0x512) DW_TAG_formal_parameter) + .long OFFSET (58c) # DW_AT_type + .byte 0x1 # DW_AT_artificial + +.Ldie_518: + .uleb128 0xf # (DIE (0x518) DW_TAG_formal_parameter) + .long OFFSET (19f) # DW_AT_type + .byte 0x0 # end of children of DIE 0x505 + +.Ldie_51f: + .uleb128 0x21 # (DIE (0x51f) DW_TAG_subprogram) + .byte 0x1 # DW_AT_external + .ascii "_M_allocate\0" # DW_AT_name + .long OFFSET (277) # DW_AT_type + .byte 0x1 # DW_AT_declaration + .long OFFSET (540) # DW_AT_sibling + +.Ldie_540: + .uleb128 0x11 # (DIE (0x540) DW_TAG_subprogram) + .ascii "_M_deallocate\0" # DW_AT_name + .byte 0x1 # DW_AT_declaration + .long OFFSET (562) # DW_AT_sibling + +.Ldie_551: + .uleb128 0xe # (DIE (0x551) DW_TAG_formal_parameter) + .long OFFSET (58c) # DW_AT_type + .byte 0x1 # DW_AT_artificial + +.Ldie_557: + .uleb128 0xf # (DIE (0x557) DW_TAG_formal_parameter) + .long OFFSET (277) # DW_AT_type + +.Ldie_55c: + .uleb128 0xf # (DIE (0x55c) DW_TAG_formal_parameter) + .long OFFSET (43) # DW_AT_type + .byte 0x0 # end of children of DIE 0x540 + +.Ldie_562: + .uleb128 0x5 # (DIE (0x562) DW_TAG_imported_declaration) + .long OFFSET (51f) # DW_AT_import + .byte 0x0 # end of children of DIE 0x44e + +.Ldie_586: + .uleb128 0x22 # (DIE (0x586) DW_TAG_reference_type) + .byte 0x4 # DW_AT_byte_size + .long OFFSET (3e0) # DW_AT_type + +.Ldie_58c: + .uleb128 0x17 # (DIE (0x58c) DW_TAG_pointer_type) + .byte 0x8 # DW_AT_byte_size + .long OFFSET (44e) # DW_AT_type + +.Ldie_59d: + .uleb128 0x20 # (DIE (0x59d) DW_TAG_class_type) + .long OFFSET (f7) # DW_AT_specification + .byte 0x18 # DW_AT_byte_size + .long OFFSET (b44) # DW_AT_sibling + +.Ldie_5a9: + .uleb128 0xb # (DIE (0x5a9) DW_TAG_inheritance) + .long OFFSET (44e) # DW_AT_type + .sleb128 0 # DW_AT_data_member_location + .byte 0x2 # DW_AT_accessibility + .byte 0x0 # end of children of DIE 0x59d + +.Ldie_b44: + .uleb128 0x17 # (DIE (0xb44) DW_TAG_pointer_type) + .byte 0x8 # DW_AT_byte_size + .long OFFSET (59d) # DW_AT_type + +.Ldie_b61: + .uleb128 0x17 # (DIE (0xb61) DW_TAG_pointer_type) + .byte 0x4 # DW_AT_byte_size + .long OFFSET (221) # DW_AT_type + .byte 0x0 # end of children of DIE 0xb +.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_sting) + .uleb128 0x10 # (DW_AT_stmt_list) + .uleb128 0x6 # (DW_FORM_data4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x2 # (abbrev code) + .uleb128 0x24 # (DW_TAG_base_type) + .byte 0x0 # 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 0x0 + .byte 0x0 + + .uleb128 0x3 # (abbrev code) + .uleb128 0x16 # (TAG: DW_TAG_typedef) + .byte 0x0 # DW_children_no + .uleb128 0x3 # (DW_AT_name) + .uleb128 0x8 # (DW_FORM_string) + .uleb128 0x49 # (DW_AT_type) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x4 # (abbrev code) + .uleb128 0x39 # (TAG: DW_TAG_namespace) + .byte 0x1 # DW_children_yes + .uleb128 0x3 # (DW_AT_name) + .uleb128 0x8 # (DW_FORM_string) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x5 # (abbrev code) + .uleb128 0x8 # (TAG: DW_TAG_imported_declaration) + .byte 0x0 # DW_children_no + .uleb128 0x18 # (DW_AT_import) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x8 # (abbrev code) + .uleb128 0x2 # (TAG: DW_TAG_class_type) + .byte 0x0 # DW_children_no + .uleb128 0x3 # (DW_AT_name) + .uleb128 0x8 # (DW_FORM_string) + .uleb128 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .byte 0x0 + .byte 0x0 + + .uleb128 0x9 # (abbrev code) + .uleb128 0x13 # (TAG: DW_TAG_structure_type) + .byte 0x1 # DW_children_yes + .uleb128 0x3 # (DW_AT_name) + .uleb128 0x8 # (DW_FORM_string) + .uleb128 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0xa # (abbrev code) + .uleb128 0x13 # (TAG: DW_TAG_structure_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) + .byte 0x0 + .byte 0x0 + + .uleb128 0xb # (abbrev code) + .uleb128 0x1c # (TAG: DW_TAG_inheritance) + .byte 0x0 # DW_children_no + .uleb128 0x49 # (DW_AT_type) + .uleb128 0x13 # (DW_FORM_ref4) + .uleb128 0x38 # (DW_AT_data_member_location) + .uleb128 0xd # (DW_FORM_sdata) + .uleb128 0x32 # (DW_AT_accessibility) + .uleb128 0xb # (DW_FORM_data1) + .byte 0x0 + .byte 0x0 + + .uleb128 0xe # (abbrev code) + .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) + .byte 0x0 # DW_children_no + .uleb128 0x49 # (DW_AT_type) + .uleb128 0x13 # (DW_FORM_ref4) + .uleb128 0x34 # (DW_AT_artificial) + .uleb128 0xc # (DW_FORM_flag) + .byte 0x0 + .byte 0x0 + + .uleb128 0xf # (abbrev code) + .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) + .byte 0x0 # DW_children_no + .uleb128 0x49 # (DW_AT_type) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x11 # (abbrev code) + .uleb128 0x2e # (DW_TAG_subprogram) + .byte 0x1 # DW_children_yes + .uleb128 0x3 # (DW_AT_name) + .uleb128 0x8 # (DW_FORM_string) + .uleb128 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x13 # (abbrev code) + .uleb128 0x24 # (DW_TAG_base_type) + .byte 0x0 # DW_children_no + .uleb128 0xb # (DW_AT_byte_size) + .uleb128 0xb # (DW_FORM_data1) + .uleb128 0x3e # (DW_AT_encoding) + .uleb128 0xb # (DW_FORM_data1) + .byte 0x0 + .byte 0x0 + + .uleb128 0x17 # (abbrev code) + .uleb128 0xf # (TAG: DW_TAG_pointer_type) + .byte 0x0 # 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 0x0 + .byte 0x0 + + .uleb128 0x18 # (abbrev code) + .uleb128 0x26 # (TAG: DW_TAG_const_type) + .byte 0x0 # DW_children_no + .byte 0x0 + .byte 0x0 + + .uleb128 0x19 # (abbrev code) + .uleb128 0x26 # (TAG: DW_TAG_const_type) + .byte 0x0 # DW_children_no + .uleb128 0x49 # (DW_AT_type) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x1a # (abbrev code) + .uleb128 0x13 # (TAG: DW_TAG_structure_type) + .byte 0x1 # DW_children_yes + .uleb128 0x47 # (DW_AT_specification) + .uleb128 0x13 # (DW_FORM_ref4) + .uleb128 0xb # (DW_AT_byte_size) + .uleb128 0xb # (DW_FORM_data1) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x1b # (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 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x1c # (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 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .byte 0x0 + .byte 0x0 + + .uleb128 0x1d # (abbrev code) + .uleb128 0xd # (TAG: DW_TAG_member) + .byte 0x0 # 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 0xd # (DW_FORM_sdata) + .uleb128 0x32 # (DW_AT_accessibility) + .uleb128 0xb # (DW_FORM_data1) + .byte 0x0 + .byte 0x0 + + .uleb128 0x1e # (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 0x34 # (DW_AT_artificial) + .uleb128 0xc # (DW_FORM_flag) + .uleb128 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x1f # (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 0x34 # (DW_AT_artificial) + .uleb128 0xc # (DW_FORM_flag) + .uleb128 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .byte 0x0 + .byte 0x0 + + .uleb128 0x20 # (abbrev code) + .uleb128 0x2 # (TAG: DW_TAG_class_type) + .byte 0x1 # DW_children_yes + .uleb128 0x47 # (DW_AT_specification) + .uleb128 0x13 # (DW_FORM_ref4) + .uleb128 0xb # (DW_AT_byte_size) + .uleb128 0xb # (DW_FORM_data1) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x21 # (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 0x49 # (DW_AT_type) + .uleb128 0x13 # (DW_FORM_ref4) + .uleb128 0x3c # (DW_AT_declaration) + .uleb128 0xc # (DW_FORM_flag) + .uleb128 0x1 # (DW_AT_sibling) + .uleb128 0x13 # (DW_FORM_ref4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x22 # (abbrev code) + .uleb128 0x10 # (TAG: DW_TAG_reference_type) + .byte 0x0 # 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 0x0 + .byte 0x0 diff --git a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp new file mode 100644 index 00000000000..50b11820f34 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp @@ -0,0 +1,41 @@ +# Copyright 2010 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 . + +# Test DW_TAG_inheritance using constant DW_AT_data_member_location +# introduced by GCC PR debug/40659. + +# This test can only be run on targets which support DWARF-2 and use gas. +# For now pick a sampling of likely targets. +if {![istarget *-*-linux*] + && ![istarget *-*-gnu*] + && ![istarget *-*-elf*] + && ![istarget *-*-openbsd*] + && ![istarget arm-*-eabi*] + && ![istarget powerpc-*-eabi*]} { + return 0 +} + +set testfile "dw2-double-set-die-type" +set srcfile "$testfile.S" +set executable "$testfile.x" + +if { [gdb_compile [file join $srcdir $subdir $srcfile] \ + [file join $objdir $subdir $executable] \ + object {nodebug}] != "" } { + return -1 +} + +clean_restart $executable +gdb_test "ptype a" "type = class .*" diff --git a/gdb/testsuite/gdb.dwarf2/pr11465.S b/gdb/testsuite/gdb.dwarf2/pr11465.S new file mode 100644 index 00000000000..8d805ddf83b --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/pr11465.S @@ -0,0 +1,355 @@ +/* Copyright 2010 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 . */ + +/* Compiled from: + + namespace N + { + class C + { + public: + typedef void (*t) (C); + C (t) {} + }; + typedef C::t u; + u f; + C c (f); + }; + + int + main () + { + return 0; + } +*/ + + .text +_ZN1N1cE: + .section .debug_info +d: + .long .Ldebug_info_end - 1f /* Length of CU info */ +1: + .2byte 0x2 /* DWARF version number */ + .long .Ldebug_abbrev0 /* Abbrev offset */ + .byte 0x4 /* Pointer size */ +dieb: .uleb128 0x1 /* DW_TAG_compile_unit */ + .long .LASF4 /* DW_AT_producer */ + .byte 0x4 /* DW_AT_language */ + .long .LASF5 /* DW_AT_name */ + .long .LASF6 /* DW_AT_comp_dir */ + .long 0x0 /* DW_AT_low_pc */ + .long 0x0 /* DW_AT_high_pc */ + .long 0x0 /* DW_AT_entry_pc */ +die29: .uleb128 0x2 /* DW_TAG_namespace */ + .string "N" /* DW_AT_name */ +die32: .uleb128 0x3 /* DW_TAG_class_type */ + .string "C" /* DW_AT_name */ + .byte 0x1 /* DW_AT_declaration */ +die36: .uleb128 0x4 /* DW_TAG_typedef */ + .string "u" /* DW_AT_name */ + .long die7e-d /* DW_AT_type */ +die3f: .uleb128 0x5 /* DW_TAG_variable */ + .string "f" /* DW_AT_name */ + .long .LASF0 /* DW_AT_MIPS_linkage_name */ + .long die36-d /* DW_AT_type */ + .byte 0x1 /* DW_AT_external */ + .byte 0x1 /* DW_AT_declaration */ +die4e: .uleb128 0x5 /* DW_TAG_variable */ + .string "c" /* DW_AT_name */ + .long .LASF1 /* DW_AT_MIPS_linkage_name */ + .long die5e-d /* DW_AT_type */ + .byte 0x1 /* DW_AT_external */ + .byte 0x1 /* DW_AT_declaration */ + .byte 0x0 +die5e: .uleb128 0x6 /* DW_TAG_class_type */ + .long die32-d /* DW_AT_specification */ + .byte 0x1 /* DW_AT_byte_size */ +die6a: .uleb128 0x7 /* DW_TAG_subprogram */ + .byte 0x1 /* DW_AT_external */ + .string "C" /* DW_AT_name */ + .byte 0x1 /* DW_AT_declaration */ +die71: .uleb128 0x8 /* DW_TAG_formal_parameter */ + .long die8f-d /* DW_AT_type */ + .byte 0x1 /* DW_AT_artificial */ +die77: .uleb128 0x9 /* DW_TAG_formal_parameter */ + .long die7e-d /* DW_AT_type */ + .byte 0x0 + .byte 0x0 +die7e: .uleb128 0xa /* DW_TAG_pointer_type */ + .byte 0x4 /* DW_AT_byte_size */ + .long die84-d /* DW_AT_type */ +die84: .uleb128 0xb /* DW_TAG_subroutine_type */ +die89: .uleb128 0x9 /* DW_TAG_formal_parameter */ + .long die5e-d /* DW_AT_type */ + .byte 0x0 +die8f: .uleb128 0xa /* DW_TAG_pointer_type */ + .byte 0x4 /* DW_AT_byte_size */ + .long die5e-d /* DW_AT_type */ +die95: .uleb128 0xc /* DW_TAG_subprogram */ + .long die6a-d /* DW_AT_specification */ + .byte 0x2 /* DW_AT_inline */ +die9f: .uleb128 0xd /* DW_TAG_formal_parameter */ + .long .LASF7 /* DW_AT_name */ + .long dieaf-d /* DW_AT_type */ + .byte 0x1 /* DW_AT_artificial */ +diea9: .uleb128 0x9 /* DW_TAG_formal_parameter */ + .long die7e-d /* DW_AT_type */ + .byte 0x0 +dieaf: .uleb128 0xe /* DW_TAG_const_type */ + .long die8f-d /* DW_AT_type */ +dieb4: .uleb128 0xf /* DW_TAG_subprogram */ + .long die95-d /* DW_AT_abstract_origin */ + .long _ZN1N1cE /* DW_AT_low_pc */ + .long _ZN1N1cE /* DW_AT_high_pc */ +diec9: .uleb128 0x10 /* DW_TAG_subprogram */ + .long die9f-d /* DW_AT_abstract_origin */ + .byte 2f-1f /* DW_AT_location */ +1: + .byte 0x50 /* DW_OP_reg0 */ +2: +died1: .uleb128 0x10 /* DW_TAG_formal_parameter */ + .long diea9-d /* DW_AT_abstract_origin */ + .byte 2f-1f /* DW_AT_location */ +1: + .byte 0x51 /* DW_OP_reg1 */ +2: + .byte 0x0 +dieda: .uleb128 0x11 /* DW_TAG_subprogram */ + .byte 0x1 /* DW_AT_external */ + .long .LASF8 /* DW_AT_name */ + .long dief2-d /* DW_AT_type */ + .long _ZN1N1cE /* DW_AT_low_pc */ + .long _ZN1N1cE /* DW_AT_high_pc */ +dief2: .uleb128 0x12 /* DW_TAG_base_type */ + .byte 0x4 /* DW_AT_byte_size */ + .byte 0x5 /* DW_AT_encoding */ + .string "int" /* DW_AT_name */ +die149: .uleb128 0x16 /* DW_TAG_variable */ + .long die4e-d /* DW_AT_specification */ + .byte 0x5 /* DW_AT_location */ + .byte 0x3 + .long _ZN1N1cE + .byte 0x0 +.Ldebug_info_end: + .section .debug_abbrev +.Ldebug_abbrev0: + .uleb128 0x1 /* abbrev code*/ + .uleb128 0x11 /* DW_TAG_compile_unit */ + .byte 0x1 /* DW_children_yes */ + .uleb128 0x25 /* DW_AT_producer*/ + .uleb128 0xe /* DW_FORM_strp */ + .uleb128 0x13 /* DW_AT_language */ + .uleb128 0xb /* DW_FORM_data1 */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0xe /* DW_FORM_strp */ + .uleb128 0x1b /* DW_AT_comp_dir */ + .uleb128 0xe /* DW_FORM_strp */ + .uleb128 0x11 /* DW_AT_low_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x12 /* DW_AT_high_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x52 /* DW_AT_entry_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .byte 0x0 + .byte 0x0 + .uleb128 0x2 /* abbrev code */ + .uleb128 0x39 /* DW_TAG_namespace */ + .byte 0x1 /* DW_children_yes */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .byte 0x0 + .byte 0x0 + .uleb128 0x3 /* abbrev code */ + .uleb128 0x2 /* DW_TAG_class_type */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x3c /* DW_AT_declaration */ + .uleb128 0xc /* DW_FORM_flag */ + .byte 0x0 + .byte 0x0 + .uleb128 0x4 /* abbrev code */ + .uleb128 0x16 /* DW_TAG_typedef */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .byte 0x0 + .byte 0x0 + .uleb128 0x5 /* abbrev code */ + .uleb128 0x34 /* DW_TAG_variable */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x2007 /* DW_AT_MIPS_linkage_name */ + .uleb128 0xe /* DW_FORM_strp */ + .uleb128 0x49 /* DW_AT_TYPE */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x3f /* DW_AT_external */ + .uleb128 0xc /* DW_FORM_flag */ + .uleb128 0x3c /* DW_AT_declaration */ + .uleb128 0xc /* DW_FORM_flag */ + .byte 0x0 + .byte 0x0 + .uleb128 0x6 /* abbrev code */ + .uleb128 0x2 /* DW_TAG_class_type */ + .byte 0x1 /* DW_has_children_yes */ + .uleb128 0x47 /* DW_AT_specification */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0xb /* DW_AT_byte_size */ + .uleb128 0xb /* DW_FORM_data1 */ + .byte 0x0 + .byte 0x0 + .uleb128 0x7 /* abbrev code */ + .uleb128 0x2e /* DW_TAG_subprogra */ + .byte 0x1 /* DW_has_children_yes */ + .uleb128 0x3f /* DW_AT_external */ + .uleb128 0xc /* DW_FORM_flag */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x3c /* DW_AT_declaration */ + .uleb128 0xc /* DW_FORM_flag */ + .byte 0x0 + .byte 0x0 + .uleb128 0x8 /* abbrev code */ + .uleb128 0x5 /* DW_TAG_formal_parameter */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x34 /* DW_AT_artificial */ + .uleb128 0xc /* DW_FORM_flag */ + .byte 0x0 + .byte 0x0 + .uleb128 0x9 /* abbrev code */ + .uleb128 0x5 /* DW_TAG_formal_parameter */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .byte 0x0 + .byte 0x0 + .uleb128 0xa /* abbrev code */ + .uleb128 0xf /* DW_TAG_pointer_type */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0xb /* DW_AT_byte_size */ + .uleb128 0xb /* DW_FORM_data1 */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .byte 0x0 + .byte 0x0 + .uleb128 0xb /* abbrev code */ + .uleb128 0x15 /* DW_TAG_subroutine_type */ + .byte 0x1 /* DW_has_children_yes */ + .byte 0x0 + .byte 0x0 + .uleb128 0xc /* abbrev code */ + .uleb128 0x2e /* DW_TAG_subprogram */ + .byte 0x1 /* DW_has_children_yes */ + .uleb128 0x47 /* DW_AT_specification */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x20 /* DW_AT_inline */ + .uleb128 0xb /* DW_FORM_data1 */ + .byte 0x0 + .byte 0x0 + .uleb128 0xd /* abbrev code */ + .uleb128 0x5 /* DW_TAG_formal_parameter */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0xe /* DW_FORM_strp */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x34 /* DW_AT_artificial */ + .uleb128 0xc /* DW_FORM_flag */ + .byte 0x0 + .byte 0x0 + .uleb128 0xe /* abbrev code */ + .uleb128 0x26 /* DW_TAG_const_type */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .byte 0x0 + .byte 0x0 + .uleb128 0xf /* abbrev code */ + .uleb128 0x2e /* DW_TAG_subprogram */ + .byte 0x1 /* DW_has_children_yes */ + .uleb128 0x31 /* DW_AT_abstract_origin */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x11 /* DW_AT_low_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x12 /* DW_AT_high_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .byte 0x0 + .byte 0x0 + .uleb128 0x10 /* abbrev code */ + .uleb128 0x5 /* DW_TAG_formal_parameter */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x31 /* DW_AT_abstract_origin */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x2 /* DW_AT_location */ + .uleb128 0xa /* DW_FORM_block1 */ + .byte 0x0 + .byte 0x0 + .uleb128 0x11 /* abbrev code */ + .uleb128 0x2e /* DW_TAG_subprogram */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x3f /* DW_AT_external */ + .uleb128 0xc /* DW_FORM_flag */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0xe /* DW_FORM_strp */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x11 /* DW_AT_low_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x12 /* DW_AT_high_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .byte 0x0 + .byte 0x0 + .uleb128 0x12 /* abbrev code */ + .uleb128 0x24 /* DW_TAG_base_type */ + .byte 0x0 /* DW_has_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 0x0 + .byte 0x0 + .uleb128 0x16 /* abbrev code */ + .uleb128 0x34 /* DW_TAG_variable */ + .byte 0x0 /* DW_has_children_no */ + .uleb128 0x47 /* DW_AT_specification */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x2 /* DW_AT_location */ + .uleb128 0xa /* DW_FORM_block1 */ + .byte 0x0 + .byte 0x0 + .byte 0x0 + .section .debug_str +.LASF0: + .string "_ZN1N1fE" +.LASF7: + .string "this" +.LASF6: + .string "" +.LASF8: + .string "main" +.LASF1: + .string "_ZN1N1cE" +.LASF5: + .string "pr11465.cc" +.LASF4: + .string "GNU C++ 4.4.2" + .ident "GCC: (GNU) 4.4.2" diff --git a/gdb/testsuite/gdb.dwarf2/pr11465.exp b/gdb/testsuite/gdb.dwarf2/pr11465.exp new file mode 100644 index 00000000000..c5bc2f1a679 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/pr11465.exp @@ -0,0 +1,40 @@ +# Copyright 2010 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 . + +# This test can only be run on targets which support DWARF-2 and use gas. +# For now pick a sampling of likely targets. +if {![istarget *-*-linux*] + && ![istarget *-*-gnu*] + && ![istarget *-*-elf*] + && ![istarget *-*-openbsd*] + && ![istarget arm-*-eabi*] + && ![istarget powerpc-*-eabi*]} { + return 0 +} + +set testfile "pr11465" +set srcfile "$testfile.S" +set executable "$testfile.x" +set binfile [file join $objdir $subdir $executable] + +if { [gdb_compile [file join $srcdir $subdir $srcfile] \ + $binfile object {}] != "" } { + return -1 +} + +clean_restart $executable + +# Test delayed physname computations +gdb_test "p N::c.C" { = {void \(N::C \* const, void \(\*\)\(N::C\)\)}.*} -- 2.30.2