# Copyright 2018-2022 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 tests a segfault that occurs when reading inlined_subroutine DIEs # with abstract_origins pointing to DIEs in other CUs. # # See https://bugzilla.redhat.com/show_bug.cgi?id=1638798 . load_lib dwarf.exp # This test can only be run on targets which support DWARF. if {![dwarf2_support]} { return 0 } standard_testfile main.c .S # Create the DWARF. This is derived from the reproducer in the Fedora # bugzila mentioned above. For clarity, some "superfluous" DIES have # been left instead of simplifying/pruning the test further. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { declare_labels Db D72f8 D736e declare_labels D266465 D266477 D266483 D266496 D266498 D266ad3 D266ad9 \ D266ade D26b227 D26b237 declare_labels D26d8b1 D26d8c3 D26d8cf D26d944 D26d946 D26e103 D26e145 \ D26e415 D26e48c D26df00 D26df06 D26df0b D272519 D274c1a D274c42 cu {} { Db: compile_unit { {language @DW_LANG_C99} {name ""} } { D72f8: subprogram { {abstract_origin %$D272519} {low_pc 0xb9e20 addr} {high_pc 0x1f5 data4} } { D736e: inlined_subroutine { {abstract_origin %$D26b227} {low_pc 0xb9efc addr} {high_pc 0xc data4} } { formal_parameter { {abstract_origin %$D274c42} } } } } } cu {} { D266465: compile_unit { {language @DW_LANG_C99} } { D266477: typedef { {name "size_t"} {type :$D266483} } D266483: base_type { {byte_size 8 sdata} {encoding @DW_ATE_unsigned} } D266496: pointer_type { {byte_size 8 sdata} } D266498: restrict_type { {type :$D266496} } D266ad3: pointer_type { {byte_size 8 sdata} {type :$D266ade} } D266ad9: restrict_type { {type :$D266ad3} } D266ade: const_type {} D26b227: subprogram { {external 1 flag} {name "memcpy"} {type :$D266496} } { D26b237: formal_parameter { {name "__dest"} {type :$D266498} } formal_parameter { {name "__src"} {type :$D266ad9} } formal_parameter { {name "__len"} {type :$D266477} } } } } cu {} { D26d8b1: compile_unit { {language @DW_LANG_C99} } { D26d8c3: typedef { {name "size_t"} {type :$D26d8cf} } D26d8cf: base_type { {byte_size 8 sdata} {encoding @DW_ATE_unsigned} {name "long unsigned int"} } D26d944: pointer_type { {byte_size 8 sdata} } D26d946: restrict_type { {type :$D26d944} } D26e103: structure_type { {name "__object"} {byte_size 12 sdata} } { member { {name "__ob_next"} {type :$D26e145} {data_member_location 0 sdata} } } D26e145: pointer_type { {byte_size 8 sdata} {type :$D26e103} } D26e415: typedef { {name "PyObject"} {type :$D26e103} } D26e48c: pointer_type { {byte_size 8 sdata} {type :$D26e415} } D26df00: pointer_type { {byte_size 8 sdata} {type :$D26df0b} } D26df06: restrict_type { {type :$D26df00} } D26df0b: const_type {} D272519: subprogram { {name "bytes_repeat"} {type :$D26e48c} } D274c1a: subprogram { {external 1 flag} {name "memcpy"} {type :$D26d944} } { formal_parameter { {name "__dest"} {type :$D26d946} } formal_parameter { {name "__src"} {type :$D26df06} } D274c42: formal_parameter { {name "__len"} {type :$D26d8c3} } } } } } if {[prepare_for_testing "failed to prepare" $testfile \ "${asm_file} ${srcfile}" {}]} { return -1 } # All we need to do is set a breakpoint, which causes the DWARF # info to be read, to demonstrate the problem. gdb_breakpoint "bytes_repeat" message