1# Copyright 2014-2024 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# Test corrupt DWARF input 17# PR gdb/15827 18 19load_lib dwarf.exp 20 21require dwarf2_support 22 23standard_testfile main.c .S 24 25# Make the DWARF used for the test. 26# 27# Here we put DW_AT_sibling DIEs into the output which 28# point off into la-la land. The whole purpose is to simulate 29# corrupt DWARF information and make sure that GDB can handle it 30# without crashing. 31 32set asm_file [standard_output_file $srcfile2] 33Dwarf::assemble $asm_file { 34 cu {} { 35 compile_unit {} { 36 declare_labels int_label 37 38 int_label: base_type { 39 {byte_size 4 sdata} 40 {name "int"} 41 } 42 43 enumeration_type { 44 {name "ENUM"} 45 {byte_size 4 sdata} 46 } { 47 enumerator { 48 {name "A"} 49 {const_value 0 sdata} 50 } 51 enumerator { 52 {name "B"} 53 {const_value 1 sdata} 54 {sibling 12345678 DW_FORM_ref4} 55 } { 56 base_type { 57 {byte_size 1 sdata} 58 {name "char"} 59 } 60 } 61 array_type { 62 {type :$int_label} 63 {sibling 12345678 DW_FORM_ref4} 64 } 65 } 66 } 67 } 68} 69 70if {[prepare_for_testing "failed to prepare" $testfile \ 71 [list $srcfile $asm_file] {nodebug}]} { 72 return -1 73} 74 75gdb_test "print 1" "= 1" "recover from corrupt DWARF" 76