forked from Imagelibrary/binutils-gdb
Adapt .debug_names writer to new DWARF scanner
This updates the .debug_names writer to work with the new DWARF scanner.
This commit is contained in:
@@ -664,15 +664,10 @@ public:
|
|||||||
enum class unit_kind { cu, tu };
|
enum class unit_kind { cu, tu };
|
||||||
|
|
||||||
/* Insert one symbol. */
|
/* Insert one symbol. */
|
||||||
void insert (const partial_symbol *psym, int cu_index, bool is_static,
|
void insert (int dwarf_tag, const char *name, int cu_index, bool is_static,
|
||||||
unit_kind kind)
|
unit_kind kind, enum language lang)
|
||||||
{
|
{
|
||||||
const int dwarf_tag = psymbol_tag (psym);
|
if (lang == language_ada)
|
||||||
if (dwarf_tag == 0)
|
|
||||||
return;
|
|
||||||
const char *name = psym->ginfo.search_name ();
|
|
||||||
|
|
||||||
if (psym->ginfo.language () == language_ada)
|
|
||||||
{
|
{
|
||||||
/* We want to ensure that the Ada main function's name appears
|
/* We want to ensure that the Ada main function's name appears
|
||||||
verbatim in the index. However, this name will be of the
|
verbatim in the index. However, this name will be of the
|
||||||
@@ -715,6 +710,28 @@ public:
|
|||||||
value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind));
|
value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void insert (const partial_symbol *psym, int cu_index, bool is_static,
|
||||||
|
unit_kind kind)
|
||||||
|
{
|
||||||
|
const int dwarf_tag = psymbol_tag (psym);
|
||||||
|
if (dwarf_tag == 0)
|
||||||
|
return;
|
||||||
|
const char *name = psym->ginfo.search_name ();
|
||||||
|
|
||||||
|
insert (dwarf_tag, name, cu_index, is_static, kind,
|
||||||
|
psym->ginfo.language ());
|
||||||
|
}
|
||||||
|
|
||||||
|
void insert (const cooked_index_entry *entry)
|
||||||
|
{
|
||||||
|
const auto it = m_cu_index_htab.find (entry->per_cu);
|
||||||
|
gdb_assert (it != m_cu_index_htab.cend ());
|
||||||
|
const char *name = entry->full_name (&m_string_obstack);
|
||||||
|
insert (entry->tag, name, it->second, (entry->flags & IS_STATIC) != 0,
|
||||||
|
entry->per_cu->is_debug_types ? unit_kind::tu : unit_kind::cu,
|
||||||
|
entry->per_cu->lang);
|
||||||
|
}
|
||||||
|
|
||||||
/* Build all the tables. All symbols must be already inserted.
|
/* Build all the tables. All symbols must be already inserted.
|
||||||
This function does not call file_write, caller has to do it
|
This function does not call file_write, caller has to do it
|
||||||
afterwards. */
|
afterwards. */
|
||||||
@@ -897,6 +914,11 @@ public:
|
|||||||
m_debugstrlookup.file_write (file_str);
|
m_debugstrlookup.file_write (file_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_cu (dwarf2_per_cu_data *per_cu, offset_type index)
|
||||||
|
{
|
||||||
|
m_cu_index_htab.emplace (per_cu, index);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/* Storage for symbol names mapping them to their .debug_str section
|
/* Storage for symbol names mapping them to their .debug_str section
|
||||||
@@ -1211,6 +1233,8 @@ private:
|
|||||||
|
|
||||||
/* Temporary storage for Ada names. */
|
/* Temporary storage for Ada names. */
|
||||||
auto_obstack m_string_obstack;
|
auto_obstack m_string_obstack;
|
||||||
|
|
||||||
|
cu_index_map m_cu_index_htab;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Return iff any of the needed offsets does not fit into 32-bit
|
/* Return iff any of the needed offsets does not fit into 32-bit
|
||||||
@@ -1491,17 +1515,20 @@ write_debug_names (dwarf2_per_objfile *per_objfile,
|
|||||||
int types_counter = 0;
|
int types_counter = 0;
|
||||||
for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
|
for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
|
||||||
{
|
{
|
||||||
const dwarf2_per_cu_data *per_cu
|
dwarf2_per_cu_data *per_cu
|
||||||
= per_objfile->per_bfd->all_comp_units[i].get ();
|
= per_objfile->per_bfd->all_comp_units[i].get ();
|
||||||
partial_symtab *psymtab = per_cu->v.psymtab;
|
|
||||||
|
|
||||||
int &this_counter = per_cu->is_debug_types ? types_counter : counter;
|
int &this_counter = per_cu->is_debug_types ? types_counter : counter;
|
||||||
data_buf &this_list = per_cu->is_debug_types ? types_cu_list : cu_list;
|
data_buf &this_list = per_cu->is_debug_types ? types_cu_list : cu_list;
|
||||||
|
partial_symtab *psymtab = (per_objfile->per_bfd->using_index
|
||||||
|
? nullptr
|
||||||
|
: per_cu->v.psymtab);
|
||||||
|
|
||||||
if (psymtab != nullptr && psymtab->user == nullptr)
|
if (psymtab != nullptr && psymtab->user == nullptr)
|
||||||
nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen,
|
nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen,
|
||||||
this_counter);
|
this_counter);
|
||||||
|
|
||||||
|
nametable.add_cu (per_cu, this_counter);
|
||||||
this_list.append_uint (nametable.dwarf5_offset_size (),
|
this_list.append_uint (nametable.dwarf5_offset_size (),
|
||||||
dwarf5_byte_order,
|
dwarf5_byte_order,
|
||||||
to_underlying (per_cu->sect_off));
|
to_underlying (per_cu->sect_off));
|
||||||
@@ -1513,6 +1540,11 @@ write_debug_names (dwarf2_per_objfile *per_objfile,
|
|||||||
- per_objfile->per_bfd->tu_stats.nr_tus));
|
- per_objfile->per_bfd->tu_stats.nr_tus));
|
||||||
gdb_assert (types_counter == per_objfile->per_bfd->tu_stats.nr_tus);
|
gdb_assert (types_counter == per_objfile->per_bfd->tu_stats.nr_tus);
|
||||||
|
|
||||||
|
if (per_objfile->per_bfd->using_index)
|
||||||
|
for (const cooked_index_entry *entry
|
||||||
|
: per_objfile->per_bfd->cooked_index_table->all_entries ())
|
||||||
|
nametable.insert (entry);
|
||||||
|
|
||||||
nametable.build ();
|
nametable.build ();
|
||||||
|
|
||||||
/* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC. */
|
/* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC. */
|
||||||
|
|||||||
Reference in New Issue
Block a user