* gdb-symtab-refactor-condition-in-scan_attributes.patch * gdb-symtab-factor-out-m_die_range_map-usage.patch * gdb-symtab-handle-nullptr-parent-in-parent_map-set_p.patch * gdb-symtab-factor-out-m_deferred_entries-usage.patch * gdb-symtab-resolve-deferred-entries-inter-shard-case.patch * gdb-symtab-keep-track-of-processed-dies-in-shard.patch * gdb-symtab-resolve-deferred-entries-intra-shard-case.patch * gdb-symtab-don-t-defer-backward-refs-inter-cu-intra-.patch * gdb-symtab-recurse-into-c-dw_tag_subprogram-dies-for.patch * gdb-symtab-keep-track-of-all-parents-for-cooked-inde.patch * gdb-symtab-fix-dw_tag_inlined_subroutine-entries-in-.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=373
77 lines
2.5 KiB
Diff
77 lines
2.5 KiB
Diff
From dac6c3b27a77589078add7e4e4586515ac85610d Mon Sep 17 00:00:00 2001
|
|
From: Tom de Vries <tdevries@suse.de>
|
|
Date: Fri, 15 Sep 2023 08:38:00 +0200
|
|
Subject: [PATCH 04/11] [gdb/symtab] Factor out m_deferred_entries usage
|
|
|
|
Factor out usage of cooked_indexer::m_deferred_entries in new member
|
|
functions defer_entry, handle_deferred_entries and resolve_deferred_entry.
|
|
|
|
Tested on x86_64-linux.
|
|
---
|
|
gdb/dwarf2/read.c | 35 ++++++++++++++++++++++++++++-------
|
|
1 file changed, 28 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
|
|
index 1092cb1dca9..ff5be8e7dc5 100644
|
|
--- a/gdb/dwarf2/read.c
|
|
+++ b/gdb/dwarf2/read.c
|
|
@@ -6822,6 +6822,32 @@ class cooked_indexer
|
|
we'll know the containing context of all the DIEs that we might
|
|
have scanned. This vector stores these deferred entries. */
|
|
std::vector<deferred_entry> m_deferred_entries;
|
|
+
|
|
+ /* Defer creating a cooked_index_entry corresponding to deferred_entry DE. */
|
|
+ void defer_entry (const deferred_entry &de)
|
|
+ {
|
|
+ m_deferred_entries.push_back (de);
|
|
+ }
|
|
+
|
|
+ /* Create a cooked_index_entry corresponding to deferred_entry DE with
|
|
+ parent PARENT_ENTRY. */
|
|
+ const cooked_index_entry *resolve_deferred_entry
|
|
+ (const deferred_entry &de, const cooked_index_entry *parent_entry)
|
|
+ {
|
|
+ return m_index_storage->add (de.die_offset, de.tag, de.flags, de.name,
|
|
+ parent_entry, m_per_cu);
|
|
+ }
|
|
+
|
|
+ /* Create cooked_index_entries for the deferred entries. */
|
|
+ void handle_deferred_entries ()
|
|
+ {
|
|
+ for (const auto &entry : m_deferred_entries)
|
|
+ {
|
|
+ const cooked_index_entry *parent_entry
|
|
+ = find_parent (entry.spec_offset);
|
|
+ resolve_deferred_entry (entry, parent_entry);
|
|
+ }
|
|
+ }
|
|
};
|
|
|
|
/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
|
|
@@ -18519,7 +18545,7 @@ cooked_indexer::index_dies (cutu_reader *reader,
|
|
if (name != nullptr)
|
|
{
|
|
if (defer != 0)
|
|
- m_deferred_entries.push_back ({
|
|
+ defer_entry ({
|
|
this_die, name, defer, abbrev->tag, flags
|
|
});
|
|
else
|
|
@@ -18624,12 +18650,7 @@ cooked_indexer::make_index (cutu_reader *reader)
|
|
return;
|
|
index_dies (reader, reader->info_ptr, nullptr, false);
|
|
|
|
- for (const auto &entry : m_deferred_entries)
|
|
- {
|
|
- const cooked_index_entry *parent = find_parent (entry.spec_offset);
|
|
- m_index_storage->add (entry.die_offset, entry.tag, entry.flags,
|
|
- entry.name, parent, m_per_cu);
|
|
- }
|
|
+ handle_deferred_entries ();
|
|
}
|
|
|
|
/* An implementation of quick_symbol_functions for the cooked DWARF
|
|
--
|
|
2.35.3
|
|
|