-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[gdb/symtab] Fix assert in read_addrmap_from_aranges
When loading the debug-names-duplicate-cu executable included in this test-case, we run into: ... (gdb) file debug-names-duplicate-cu^M Reading symbols from debug-names-duplicate-cu...^M src/gdb/dwarf2/read.c:2353: internal-error: read_addrmap_from_aranges: \ Assertion `insertpair.second' failed.^M ... This assert was added in recent commit 75337cb ("[gdb/symtab] Fix .debug_aranges duplicate offset warning"). The assert triggers because the CU table in the .debug_names section contains a duplicate: ... Version 5 Augmentation string: 47 44 42 00 ("GDB") CU table: [ 0] 0x0 [ 1] 0x0 ... Fix this by rejecting the .debug_names index: ... (gdb) file debug-names-duplicate-cu^M Reading symbols from debug-names-duplicate-cu...^M warning: Section .debug_names has duplicate entry in CU table, \ ignoring .debug_names.^M ... Likewise for the case where the CU table is not sorted by increasing offset. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29436
- Loading branch information
Showing
3 changed files
with
189 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# Copyright 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/>. | ||
|
||
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 _start.c debug-names.S | ||
|
||
set func_info_vars \ | ||
[get_func_info _start [list debug additional_flags=-nostartfiles]] | ||
|
||
# Create the DWARF. | ||
set asm_file [standard_output_file $srcfile2] | ||
Dwarf::assemble { | ||
filename $asm_file | ||
add_dummy_cus 0 | ||
} { | ||
global func_info_vars | ||
foreach var $func_info_vars { | ||
global $var | ||
} | ||
|
||
cu { label cu_label } { | ||
compile_unit {{language @DW_LANG_C}} { | ||
subprogram { | ||
{DW_AT_name _start} | ||
{DW_AT_low_pc $_start_start DW_FORM_addr} | ||
{DW_AT_high_pc $_start_end DW_FORM_addr} | ||
} | ||
base_type { | ||
{name int} | ||
{byte_size 4 sdata} | ||
{encoding @DW_ATE_signed} | ||
} | ||
} | ||
} | ||
|
||
debug_names {} { | ||
cu cu_label | ||
cu cu_label | ||
name _start subprogram cu_label 0xEDDB6232 | ||
name int base_type cu_label 0xB888030 | ||
} | ||
} | ||
|
||
if [prepare_for_testing "failed to prepare" $testfile "${asm_file} ${srcfile}" \ | ||
[list additional_flags=-nostartfiles]] { | ||
return -1 | ||
} | ||
|
||
# Check for warning. | ||
set re \ | ||
[list \ | ||
"warning:" \ | ||
"Section .debug_names has duplicate entry in CU table," \ | ||
"ignoring .debug_names."] | ||
set re [join $re] | ||
gdb_assert {[regexp $re $gdb_file_cmd_msg]} "warning" | ||
|
||
# Verify that .debug_names section is ignored. | ||
set index [have_index $binfile] | ||
gdb_assert { [string equal $index ""] } ".debug_names not used" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# Copyright 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/>. | ||
|
||
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 _start.c debug-names.S | ||
|
||
set func_info_vars \ | ||
[get_func_info _start [list debug additional_flags=-nostartfiles]] | ||
|
||
# Create the DWARF. | ||
set asm_file [standard_output_file $srcfile2] | ||
Dwarf::assemble { | ||
filename $asm_file | ||
add_dummy_cus 0 | ||
} { | ||
global func_info_vars | ||
foreach var $func_info_vars { | ||
global $var | ||
} | ||
|
||
cu { label cu_label } { | ||
compile_unit {{language @DW_LANG_C}} { | ||
subprogram { | ||
{DW_AT_name _start} | ||
{DW_AT_low_pc $_start_start DW_FORM_addr} | ||
{DW_AT_high_pc $_start_end DW_FORM_addr} | ||
} | ||
} | ||
} | ||
|
||
cu { label cu_label_2 } { | ||
compile_unit {{language @DW_LANG_C}} { | ||
base_type { | ||
{name int} | ||
{byte_size 4 sdata} | ||
{encoding @DW_ATE_signed} | ||
} | ||
} | ||
} | ||
|
||
debug_names {} { | ||
cu cu_label_2 | ||
cu cu_label | ||
name _start subprogram cu_label 0xEDDB6232 | ||
name int base_type cu_label 0xB888030 | ||
} | ||
} | ||
|
||
if [prepare_for_testing "failed to prepare" $testfile "${asm_file} ${srcfile}" \ | ||
[list additional_flags=-nostartfiles]] { | ||
return -1 | ||
} | ||
|
||
# Check for warning. | ||
set re \ | ||
[list \ | ||
"warning:" \ | ||
"Section .debug_names has non-ascending CU table," \ | ||
"ignoring .debug_names."] | ||
set re [join $re] | ||
gdb_assert {[regexp $re $gdb_file_cmd_msg]} "warning" | ||
|
||
# Verify that .debug_names section is ignored. | ||
set index [have_index $binfile] | ||
gdb_assert { [string equal $index ""] } ".debug_names not used" |