mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-15 20:08:23 +00:00
gdb/dwarf: change a bunch of functions to be methods of cooked_index_worker_debug_info
Move a few functions exclusively used to process units to become methods of cooked_index_worker_debug_info. Rename them to a more consistent name scheme, which gets rid of outdated naming. The comments were also quite outdated. Change-Id: I2e7dcc2e4ff372007dcb4f6c3d34187c9cc2da05 Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
@@ -734,9 +734,6 @@ show_dwarf_synchronous (struct ui_file *file, int from_tty,
|
|||||||
|
|
||||||
/* local function prototypes */
|
/* local function prototypes */
|
||||||
|
|
||||||
static void build_type_psymtabs_reader (cutu_reader *reader,
|
|
||||||
cooked_index_worker_result *storage);
|
|
||||||
|
|
||||||
static void var_decode_location (struct attribute *attr,
|
static void var_decode_location (struct attribute *attr,
|
||||||
struct symbol *sym,
|
struct symbol *sym,
|
||||||
struct dwarf2_cu *cu);
|
struct dwarf2_cu *cu);
|
||||||
@@ -3250,7 +3247,32 @@ private:
|
|||||||
/* Process a batch of CUs. This may be called multiple times in
|
/* Process a batch of CUs. This may be called multiple times in
|
||||||
separate threads. TASK_NUMBER indicates which task this is --
|
separate threads. TASK_NUMBER indicates which task this is --
|
||||||
the result is stored in that slot of M_RESULTS. */
|
the result is stored in that slot of M_RESULTS. */
|
||||||
void process_cus (size_t task_number, unit_iterator first, unit_iterator end);
|
void process_units (size_t task_number, unit_iterator first,
|
||||||
|
unit_iterator end);
|
||||||
|
|
||||||
|
/* Process unit THIS_CU. */
|
||||||
|
void process_unit (dwarf2_per_cu *this_cu, dwarf2_per_objfile *per_objfile,
|
||||||
|
cooked_index_worker_result *storage);
|
||||||
|
|
||||||
|
/* Process all type units existing in PER_OBJFILE::PER_BFD::ALL_UNITS. */
|
||||||
|
void process_type_units (dwarf2_per_objfile *per_objfile,
|
||||||
|
cooked_index_worker_result *storage);
|
||||||
|
|
||||||
|
/* Process the type unit wrapped in READER. */
|
||||||
|
void process_type_unit (cutu_reader *reader,
|
||||||
|
cooked_index_worker_result *storage);
|
||||||
|
|
||||||
|
/* Process all type units of all DWO files.
|
||||||
|
|
||||||
|
This is needed in case a TU was emitted without its skeleton.
|
||||||
|
Note: This can't be done until we know what all the DWO files are. */
|
||||||
|
void process_skeletonless_type_units (dwarf2_per_objfile *per_objfile,
|
||||||
|
cooked_index_worker_result *storage);
|
||||||
|
|
||||||
|
/* Process the type unit represented by DWO_UNIT. */
|
||||||
|
void process_skeletonless_type_unit (dwo_unit *dwo_unit,
|
||||||
|
dwarf2_per_objfile *per_objfile,
|
||||||
|
cooked_index_worker_result *storage);
|
||||||
|
|
||||||
/* A storage object for "leftovers" -- see the 'start' method, but
|
/* A storage object for "leftovers" -- see the 'start' method, but
|
||||||
essentially things not parsed during the normal CU parsing
|
essentially things not parsed during the normal CU parsing
|
||||||
@@ -3258,12 +3280,9 @@ private:
|
|||||||
cooked_index_worker_result m_index_storage;
|
cooked_index_worker_result m_index_storage;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
|
void
|
||||||
Process compilation unit THIS_CU for a psymtab. */
|
cooked_index_worker_debug_info::process_unit
|
||||||
|
(dwarf2_per_cu *this_cu, dwarf2_per_objfile *per_objfile,
|
||||||
static void
|
|
||||||
process_psymtab_comp_unit (dwarf2_per_cu *this_cu,
|
|
||||||
dwarf2_per_objfile *per_objfile,
|
|
||||||
cooked_index_worker_result *storage)
|
cooked_index_worker_result *storage)
|
||||||
{
|
{
|
||||||
cutu_reader *reader = storage->get_reader (this_cu);
|
cutu_reader *reader = storage->get_reader (this_cu);
|
||||||
@@ -3286,7 +3305,7 @@ process_psymtab_comp_unit (dwarf2_per_cu *this_cu,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (this_cu->is_debug_types)
|
if (this_cu->is_debug_types)
|
||||||
build_type_psymtabs_reader (reader, storage);
|
process_type_unit (reader, storage);
|
||||||
else if (reader->top_level_die ()->tag != DW_TAG_partial_unit)
|
else if (reader->top_level_die ()->tag != DW_TAG_partial_unit)
|
||||||
{
|
{
|
||||||
bool nope = false;
|
bool nope = false;
|
||||||
@@ -3299,11 +3318,9 @@ process_psymtab_comp_unit (dwarf2_per_cu *this_cu,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reader function for build_type_psymtabs. */
|
void
|
||||||
|
cooked_index_worker_debug_info::process_type_unit
|
||||||
static void
|
(cutu_reader *reader, cooked_index_worker_result *storage)
|
||||||
build_type_psymtabs_reader (cutu_reader *reader,
|
|
||||||
cooked_index_worker_result *storage)
|
|
||||||
{
|
{
|
||||||
struct dwarf2_cu *cu = reader->cu ();
|
struct dwarf2_cu *cu = reader->cu ();
|
||||||
dwarf2_per_cu *per_cu = cu->per_cu;
|
dwarf2_per_cu *per_cu = cu->per_cu;
|
||||||
@@ -3337,26 +3354,9 @@ struct tu_abbrev_offset
|
|||||||
sect_offset abbrev_offset;
|
sect_offset abbrev_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Efficiently read all the type units.
|
void
|
||||||
|
cooked_index_worker_debug_info::process_type_units
|
||||||
The efficiency is because we sort TUs by the abbrev table they use and
|
(dwarf2_per_objfile *per_objfile, cooked_index_worker_result *storage)
|
||||||
only read each abbrev table once. In one program there are 200K TUs
|
|
||||||
sharing 8K abbrev tables.
|
|
||||||
|
|
||||||
The main purpose of this function is to support building the
|
|
||||||
dwarf2_per_objfile->per_bfd->type_unit_groups table.
|
|
||||||
TUs typically share the DW_AT_stmt_list of the CU they came from, so we
|
|
||||||
can collapse the search space by grouping them by stmt_list.
|
|
||||||
The savings can be significant, in the same program from above the 200K TUs
|
|
||||||
share 8K stmt_list tables.
|
|
||||||
|
|
||||||
FUNC is expected to call get_type_unit_group, which will create the
|
|
||||||
struct type_unit_group if necessary and add it to
|
|
||||||
dwarf2_per_objfile->per_bfd->type_unit_groups. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
build_type_psymtabs (dwarf2_per_objfile *per_objfile,
|
|
||||||
cooked_index_worker_result *storage)
|
|
||||||
{
|
{
|
||||||
struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats;
|
struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats;
|
||||||
abbrev_table_up abbrev_table;
|
abbrev_table_up abbrev_table;
|
||||||
@@ -3422,16 +3422,13 @@ build_type_psymtabs (dwarf2_per_objfile *per_objfile,
|
|||||||
abbrev_table.get (), nullptr, false,
|
abbrev_table.get (), nullptr, false,
|
||||||
language_minimal);
|
language_minimal);
|
||||||
if (!reader.is_dummy ())
|
if (!reader.is_dummy ())
|
||||||
build_type_psymtabs_reader (&reader, storage);
|
process_type_unit (&reader, storage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Traversal function for process_skeletonless_type_units.
|
void
|
||||||
Read a TU in a DWO file and build partial symbols for it. */
|
cooked_index_worker_debug_info::process_skeletonless_type_unit
|
||||||
|
(dwo_unit *dwo_unit, dwarf2_per_objfile *per_objfile,
|
||||||
static void
|
|
||||||
process_skeletonless_type_unit (dwo_unit *dwo_unit,
|
|
||||||
dwarf2_per_objfile *per_objfile,
|
|
||||||
cooked_index_worker_result *storage)
|
cooked_index_worker_result *storage)
|
||||||
{
|
{
|
||||||
dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
|
dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
|
||||||
@@ -3454,16 +3451,12 @@ process_skeletonless_type_unit (dwo_unit *dwo_unit,
|
|||||||
cutu_reader reader (**sig_type_it, *per_objfile, nullptr, nullptr, false,
|
cutu_reader reader (**sig_type_it, *per_objfile, nullptr, nullptr, false,
|
||||||
language_minimal);
|
language_minimal);
|
||||||
if (!reader.is_dummy ())
|
if (!reader.is_dummy ())
|
||||||
build_type_psymtabs_reader (&reader, storage);
|
process_type_unit (&reader, storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scan all TUs of DWO files, verifying we've processed them.
|
void
|
||||||
This is needed in case a TU was emitted without its skeleton.
|
cooked_index_worker_debug_info::process_skeletonless_type_units
|
||||||
Note: This can't be done until we know what all the DWO files are. */
|
(dwarf2_per_objfile *per_objfile, cooked_index_worker_result *storage)
|
||||||
|
|
||||||
static void
|
|
||||||
process_skeletonless_type_units (dwarf2_per_objfile *per_objfile,
|
|
||||||
cooked_index_worker_result *storage)
|
|
||||||
{
|
{
|
||||||
scoped_time_it time_it ("DWARF skeletonless type units");
|
scoped_time_it time_it ("DWARF skeletonless type units");
|
||||||
|
|
||||||
@@ -3475,7 +3468,7 @@ process_skeletonless_type_units (dwarf2_per_objfile *per_objfile,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cooked_index_worker_debug_info::process_cus (size_t task_number,
|
cooked_index_worker_debug_info::process_units (size_t task_number,
|
||||||
unit_iterator first,
|
unit_iterator first,
|
||||||
unit_iterator end)
|
unit_iterator end)
|
||||||
{
|
{
|
||||||
@@ -3492,7 +3485,7 @@ cooked_index_worker_debug_info::process_cus (size_t task_number,
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
process_psymtab_comp_unit (per_cu, m_per_objfile, &thread_storage);
|
process_unit (per_cu, m_per_objfile, &thread_storage);
|
||||||
}
|
}
|
||||||
catch (gdb_exception &except)
|
catch (gdb_exception &except)
|
||||||
{
|
{
|
||||||
@@ -3522,7 +3515,7 @@ cooked_index_worker_debug_info::do_reading ()
|
|||||||
dwarf2_per_bfd *per_bfd = m_per_objfile->per_bfd;
|
dwarf2_per_bfd *per_bfd = m_per_objfile->per_bfd;
|
||||||
|
|
||||||
create_all_units (m_per_objfile);
|
create_all_units (m_per_objfile);
|
||||||
build_type_psymtabs (m_per_objfile, &m_index_storage);
|
process_type_units (m_per_objfile, &m_index_storage);
|
||||||
|
|
||||||
if (!per_bfd->debug_aranges.empty ())
|
if (!per_bfd->debug_aranges.empty ())
|
||||||
read_addrmap_from_aranges (m_per_objfile, &per_bfd->debug_aranges,
|
read_addrmap_from_aranges (m_per_objfile, &per_bfd->debug_aranges,
|
||||||
@@ -3576,7 +3569,7 @@ cooked_index_worker_debug_info::do_reading ()
|
|||||||
workers.add_task ([this, task_count, iter, last] ()
|
workers.add_task ([this, task_count, iter, last] ()
|
||||||
{
|
{
|
||||||
scoped_time_it time_it ("DWARF indexing worker");
|
scoped_time_it time_it ("DWARF indexing worker");
|
||||||
process_cus (task_count, iter, last);
|
process_units (task_count, iter, last);
|
||||||
});
|
});
|
||||||
|
|
||||||
++task_count;
|
++task_count;
|
||||||
|
|||||||
Reference in New Issue
Block a user