[gdb/symtab] Enable ada .gdb_index
Currently the .gdb_index is not enabled for ada executables (PR24713). Fix this by adding the required support in write_psymbols, similar to how that is done for .debug_names in debug_names::insert. Tested on x86_64-linux, with native and target board cc-with-gdb-index. gdb/ChangeLog: 2020-06-10 Tom de Vries <tdevries@suse.de> PR ada/24713 * dwarf2/index-write.c (struct mapped_symtab): Add m_string_obstack. (write_psymbols): Enable .gdb_index for ada. * dwarf2/read.c: Remove comment stating .gdb_index is unsupported for ada. gdb/testsuite/ChangeLog: 2020-06-10 Tom de Vries <tdevries@suse.de> * gdb.ada/ptype_union.exp: Remove PR24713 workaround.
This commit is contained in:
parent
e5f3ece2ab
commit
7ab9679411
5 changed files with 48 additions and 12 deletions
|
@ -1,3 +1,11 @@
|
|||
2020-06-10 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR ada/24713
|
||||
* dwarf2/index-write.c (struct mapped_symtab): Add m_string_obstack.
|
||||
(write_psymbols): Enable .gdb_index for ada.
|
||||
* dwarf2/read.c: Remove comment stating .gdb_index is unsupported for
|
||||
ada.
|
||||
|
||||
2020-06-10 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* dwarf2/read.c (dw2_symtab_iter_init_common): Factor out of ...
|
||||
|
|
|
@ -184,6 +184,9 @@ struct mapped_symtab
|
|||
|
||||
offset_type n_elements = 0;
|
||||
std::vector<symtab_index_entry> data;
|
||||
|
||||
/* Temporary storage for Ada names. */
|
||||
auto_obstack m_string_obstack;
|
||||
};
|
||||
|
||||
/* Find a slot in SYMTAB for the symbol NAME. Returns a reference to
|
||||
|
@ -543,18 +546,47 @@ write_psymbols (struct mapped_symtab *symtab,
|
|||
for (; count-- > 0; ++psymp)
|
||||
{
|
||||
struct partial_symbol *psym = *psymp;
|
||||
const char *name = psym->ginfo.search_name ();
|
||||
|
||||
if (psym->ginfo.language () == language_ada)
|
||||
error (_("Ada is not currently supported by the index; "
|
||||
"use the DWARF 5 index instead"));
|
||||
{
|
||||
/* We want to ensure that the Ada main function's name appears
|
||||
verbatim in the index. However, this name will be of the
|
||||
form "_ada_mumble", and will be rewritten by ada_decode.
|
||||
So, recognize it specially here and add it to the index by
|
||||
hand. */
|
||||
if (strcmp (main_name (), name) == 0)
|
||||
{
|
||||
gdb_index_symbol_kind kind = symbol_kind (psym);
|
||||
|
||||
add_index_entry (symtab, name, is_static, kind, cu_index);
|
||||
}
|
||||
|
||||
/* In order for the index to work when read back into gdb, it
|
||||
has to supply a funny form of the name: it should be the
|
||||
encoded name, with any suffixes stripped. Using the
|
||||
ordinary encoded name will not work properly with the
|
||||
searching logic in find_name_components_bounds; nor will
|
||||
using the decoded name. Furthermore, an Ada "verbatim"
|
||||
name (of the form "<MumBle>") must be entered without the
|
||||
angle brackets. Note that the current index is unusual,
|
||||
see PR symtab/24820 for details. */
|
||||
std::string decoded = ada_decode (name);
|
||||
if (decoded[0] == '<')
|
||||
name = (char *) obstack_copy0 (&symtab->m_string_obstack,
|
||||
decoded.c_str () + 1,
|
||||
decoded.length () - 2);
|
||||
else
|
||||
name = obstack_strdup (&symtab->m_string_obstack,
|
||||
ada_encode (decoded.c_str ()));
|
||||
}
|
||||
|
||||
/* Only add a given psymbol once. */
|
||||
if (psyms_seen.insert (psym).second)
|
||||
{
|
||||
gdb_index_symbol_kind kind = symbol_kind (psym);
|
||||
|
||||
add_index_entry (symtab, psym->ginfo.search_name (),
|
||||
is_static, kind, cu_index);
|
||||
add_index_entry (symtab, name, is_static, kind, cu_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3778,9 +3778,6 @@ dw2_map_matching_symbols
|
|||
|
||||
if (per_objfile->per_bfd->index_table != nullptr)
|
||||
{
|
||||
/* Ada currently doesn't support .gdb_index (see PR24713). We can get
|
||||
here though if the current language is Ada for a non-Ada objfile
|
||||
using GNU index. */
|
||||
mapped_index &index = *per_objfile->per_bfd->index_table;
|
||||
|
||||
const char *match_name = name.ada ().lookup_name ().c_str ();
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2020-06-10 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* gdb.ada/ptype_union.exp: Remove PR24713 workaround.
|
||||
|
||||
2020-06-09 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* gdb.base/index-cache.exp (test_cache_disabled): Add test_prefix
|
||||
|
|
|
@ -19,11 +19,6 @@ if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} {
|
|||
return -1
|
||||
}
|
||||
|
||||
if {[exec_has_index_section $binfile]} {
|
||||
unsupported "Ada is not currently supported by the index (PR 24713)"
|
||||
return -1
|
||||
}
|
||||
|
||||
# The test case is written in C, because it was easy to make the
|
||||
# required type there; but the bug itself only happens in Ada.
|
||||
gdb_test "set lang ada" ""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue