mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
834eaf9201
PR gdb/29128 points out a crash in the new DWARF index code. This happens if the aranges for a CU claims a PC, but the symtab that is created during CU expansion does not actually contain the PC. This can only occur due to bad debuginfo, but at the same time, gdb should not crash. This patch fixes the bug and further merges some code into dwarf2_base_index_functions. This merger helps prevent the same issue from arising from the other index implementations. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29128
63 lines
1.8 KiB
Plaintext
63 lines
1.8 KiB
Plaintext
# Copyright (C) 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 <http://www.gnu.org/licenses/>.
|
|
|
|
# Regression test for the situation where aranges covers an address
|
|
# but the CU does not.
|
|
|
|
load_lib "dwarf.exp"
|
|
|
|
# This test can only be run on targets which support DWARF-2 and use gas.
|
|
if {![dwarf2_support]} {
|
|
return 0
|
|
}
|
|
|
|
standard_testfile main.c cu-no-addrs.S
|
|
|
|
lassign [function_range main ${srcdir}/${subdir}/${srcfile}] \
|
|
main_start main_length
|
|
|
|
# Make some DWARF for the test.
|
|
set asm_file [standard_output_file $srcfile2]
|
|
Dwarf::assemble $asm_file {
|
|
global main_start main_length
|
|
|
|
cu {label cu_start} {
|
|
# The PC range here is intentionally empty -- this was the
|
|
# trigger for the bug.
|
|
compile_unit {
|
|
{language @DW_LANG_C}
|
|
{DW_AT_low_pc $main_start DW_FORM_addr}
|
|
{DW_AT_high_pc $main_start DW_FORM_addr}
|
|
} {
|
|
DW_TAG_subprogram {
|
|
{DW_AT_name "main"}
|
|
{DW_AT_low_pc $main_start DW_FORM_addr}
|
|
}
|
|
}
|
|
}
|
|
|
|
aranges {} cu_start {
|
|
arange {} $main_start $main_length
|
|
}
|
|
}
|
|
|
|
if {[prepare_for_testing "failed to prepare" ${testfile} \
|
|
[list $srcfile $asm_file] {nodebug}]} {
|
|
return -1
|
|
}
|
|
|
|
gdb_test "break *$main_start" ".*Breakpoint $decimal at $hex" \
|
|
"set breakpoint at main address"
|