[gdb/symtab] Recognize .gdb_index symbol table with empty entries as empty
authorTom de Vries <tdevries@suse.de>
Fri, 6 Aug 2021 19:52:41 +0000 (21:52 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 6 Aug 2021 19:52:41 +0000 (21:52 +0200)
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  <tdevries@suse.de>

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  <tdevries@suse.de>

PR symtab/28159
* gdb.dwarf2/dw2-zero-range.exp: Remove kfail.

gdb/dwarf2/read.c
gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp

index bac02b5a1bdfdf94055ef541a3a6e58c432a5718..8dc2be6f176b05a3ed7784cc373d44ef472d0b52 100644 (file)
@@ -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<const gdb_byte> (symbol_table,
+                                                       symbol_table));
+    }
+
   return 1;
 }
 
index 4f2ac0fe77c3caf4659a7896ec42b64a757e2c35..e43f59ea1ad18da52d0cff6ba4aaceff71062d91 100644 (file)
@@ -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 } {