1# Copyright 2018-2020 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# This tests a segfault that occurs when reading inlined_subroutine DIEs 17# with abstract_origins pointing to DIEs in other CUs. 18# 19# See https://bugzilla.redhat.com/show_bug.cgi?id=1638798 . 20 21load_lib dwarf.exp 22 23# This test can only be run on targets which support DWARF. 24if {![dwarf2_support]} { 25 return 0 26} 27 28standard_testfile main.c .S 29 30# Create the DWARF. This is derived from the reproducer in the Fedora 31# bugzila mentioned above. For clarity, some "superfluous" DIES have 32# been left instead of simplifying/pruning the test further. 33set asm_file [standard_output_file $srcfile2] 34Dwarf::assemble $asm_file { 35 declare_labels Db D72f8 D736e 36 declare_labels D266465 D266477 D266483 D266496 D266498 D266ad3 D266ad9 \ 37 D266ade D26b227 D26b237 38 declare_labels D26d8b1 D26d8c3 D26d8cf D26d944 D26d946 D26e103 D26e145 \ 39 D26e415 D26e48c D26df00 D26df06 D26df0b D272519 D274c1a D274c42 40 41 cu {} { 42 Db: compile_unit { 43 {language @DW_LANG_C99} 44 {name "<artificial>"} 45 } { 46 D72f8: subprogram { 47 {abstract_origin %$D272519} 48 {low_pc 0xb9e20 addr} 49 {high_pc 0x1f5 data4} 50 } { 51 D736e: inlined_subroutine { 52 {abstract_origin %$D26b227} 53 {low_pc 0xb9efc addr} 54 {high_pc 0xc data4} 55 } { 56 formal_parameter { 57 {abstract_origin %$D274c42} 58 } 59 } 60 } 61 } 62 } 63 64 cu {} { 65 D266465: compile_unit { 66 {language @DW_LANG_C99} 67 } { 68 D266477: typedef { 69 {name "size_t"} 70 {type :$D266483} 71 } 72 73 D266483: base_type { 74 {byte_size 8 sdata} 75 {encoding @DW_ATE_unsigned} 76 } 77 78 D266496: pointer_type { 79 {byte_size 8 sdata} 80 } 81 82 D266498: restrict_type { 83 {type :$D266496} 84 } 85 86 D266ad3: pointer_type { 87 {byte_size 8 sdata} 88 {type :$D266ade} 89 } 90 91 D266ad9: restrict_type { 92 {type :$D266ad3} 93 } 94 95 D266ade: const_type {} 96 97 D26b227: subprogram { 98 {external 1 flag} 99 {name "memcpy"} 100 {type :$D266496} 101 } { 102 D26b237: formal_parameter { 103 {name "__dest"} 104 {type :$D266498} 105 } 106 formal_parameter { 107 {name "__src"} 108 {type :$D266ad9} 109 } 110 formal_parameter { 111 {name "__len"} 112 {type :$D266477} 113 } 114 } 115 } 116 } 117 118 cu {} { 119 D26d8b1: compile_unit { 120 {language @DW_LANG_C99} 121 } { 122 D26d8c3: typedef { 123 {name "size_t"} 124 {type :$D26d8cf} 125 } 126 127 D26d8cf: base_type { 128 {byte_size 8 sdata} 129 {encoding @DW_ATE_unsigned} 130 {name "long unsigned int"} 131 } 132 133 D26d944: pointer_type { 134 {byte_size 8 sdata} 135 } 136 137 D26d946: restrict_type { 138 {type :$D26d944} 139 } 140 141 D26e103: structure_type { 142 {name "__object"} 143 {byte_size 12 sdata} 144 } { 145 member { 146 {name "__ob_next"} 147 {type :$D26e145} 148 {data_member_location 0 sdata} 149 } 150 } 151 152 D26e145: pointer_type { 153 {byte_size 8 sdata} 154 {type :$D26e103} 155 } 156 157 D26e415: typedef { 158 {name "PyObject"} 159 {type :$D26e103} 160 } 161 162 D26e48c: pointer_type { 163 {byte_size 8 sdata} 164 {type :$D26e415} 165 } 166 167 D26df00: pointer_type { 168 {byte_size 8 sdata} 169 {type :$D26df0b} 170 } 171 172 D26df06: restrict_type { 173 {type :$D26df00} 174 } 175 176 D26df0b: const_type {} 177 178 D272519: subprogram { 179 {name "bytes_repeat"} 180 {type :$D26e48c} 181 } 182 183 D274c1a: subprogram { 184 {external 1 flag} 185 {name "memcpy"} 186 {type :$D26d944} 187 } { 188 formal_parameter { 189 {name "__dest"} 190 {type :$D26d946} 191 } 192 formal_parameter { 193 {name "__src"} 194 {type :$D26df06} 195 } 196 D274c42: formal_parameter { 197 {name "__len"} 198 {type :$D26d8c3} 199 } 200 } 201 } 202 } 203} 204 205if {[prepare_for_testing "failed to prepare" $testfile \ 206 "${asm_file} ${srcfile}" {}]} { 207 return -1 208} 209 210# All we need to do is set a breakpoint, which causes the DWARF 211# info to be read, to demonstrate the problem. 212 213gdb_breakpoint "bytes_repeat" message 214