From cc6b3d766d6694d4c4ee14b75f6529365a443a98 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 6 Aug 2021 21:52:41 +0200 Subject: [PATCH] [gdb/symtab] Recognize .gdb_index symbol table with empty entries as empty When reading a .gdb_index that contains a non-empty symbol table with only empty entries, gdb doesn't recognize it as empty. Fix this by recognizing that the constant pool is empty, and then setting the symbol table to empty. Tested on x86_64-linux. gdb/ChangeLog: 2021-08-01 Tom de Vries PR symtab/28159 * dwarf2/read.c (read_gdb_index_from_buffer): Handle symbol table filled with empty entries. gdb/testsuite/ChangeLog: 2021-08-01 Tom de Vries PR symtab/28159 * gdb.dwarf2/dw2-zero-range.exp: Remove kfail. --- gdb/dwarf2/read.c | 9 +++++++++ gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp | 22 ++------------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index bac02b5a1bd..8dc2be6f176 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -2777,6 +2777,15 @@ to use the section anyway."), ++i; map->constant_pool = buffer.slice (metadata[i]); + if (map->constant_pool.empty () && !map->symbol_table.empty ()) + { + /* An empty constant pool implies that all symbol table entries are + empty. Make map->symbol_table.empty () == true. */ + map->symbol_table + = offset_view (gdb::array_view (symbol_table, + symbol_table)); + } + return 1; } diff --git a/gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp b/gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp index 4f2ac0fe77c..e43f59ea1ad 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp @@ -139,16 +139,7 @@ foreach_with_prefix ranges_sect {ranges rnglists} { } } - if { $have_complaint } { - pass $test - } else { - set index [have_index $lib1] - if { $index == "gdb_index" } { - kfail symtab/28159 $test - } else { - fail $test - } - } + gdb_assert { $have_complaint } $test } if { ! $readnow_p } { @@ -164,16 +155,7 @@ foreach_with_prefix ranges_sect {ranges rnglists} { gdb_load $lib1 set test "Zero address complaint - unrelocated - psymtab" set have_complaint [regexp $re.* $gdb_file_cmd_msg] - if { $have_complaint } { - pass $test - } else { - set index [have_index $lib1] - if { $index == "gdb_index" } { - kfail symtab/28159 $test - } else { - fail $test - } - } + gdb_assert { $have_complaint } $test } if { ! $readnow_p } { -- 2.30.2