diff options
-rw-r--r-- | gdb/dwarf2/cu.c | 5 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 7 | ||||
-rw-r--r-- | gdb/dwarf2/read.h | 9 |
3 files changed, 14 insertions, 7 deletions
diff --git a/gdb/dwarf2/cu.c b/gdb/dwarf2/cu.c index d40dd09..37166c0 100644 --- a/gdb/dwarf2/cu.c +++ b/gdb/dwarf2/cu.c @@ -21,6 +21,7 @@ #include "dwarf2/cu.h" #include "dwarf2/read.h" #include "objfiles.h" +#include "gdbsupport/thread-pool.h" /* Initialize dwarf2_cu to read PER_CU, in the context of PER_OBJFILE. */ @@ -161,8 +162,8 @@ dwarf2_cu::get_builder () if (m_builder != nullptr) return m_builder.get (); - if (per_objfile->sym_cu != nullptr) - return per_objfile->sym_cu->m_builder.get (); + if (per_objfile->sym_cu[gdb::thread_pool::id()] != nullptr) + return per_objfile->sym_cu[gdb::thread_pool::id()]->m_builder.get (); gdb_assert_not_reached (""); } diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 82fdf4c..895bb39 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -9603,9 +9603,9 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu) cu->start_compunit_symtab (fnd.get_name (), fnd.intern_comp_dir (objfile), lowpc); - gdb_assert (per_objfile->sym_cu == nullptr); + gdb_assert (per_objfile->sym_cu[gdb::thread_pool::id()] == nullptr); scoped_restore restore_sym_cu - = make_scoped_restore (&per_objfile->sym_cu, cu); + = make_scoped_restore (&per_objfile->sym_cu[gdb::thread_pool::id()], cu); /* Decode line number information if present. We do this before processing child DIEs, so that the line header table is available @@ -9627,7 +9627,8 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu) child_die = child_die->sibling; } } - per_objfile->sym_cu = nullptr; + + per_objfile->sym_cu[gdb::thread_pool::id()] = nullptr; /* Decode macro information, if present. Dwarf 2 macro information refers to information in the line number info statement program diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h index 3a3ff6c..d357e50 100644 --- a/gdb/dwarf2/read.h +++ b/gdb/dwarf2/read.h @@ -587,7 +587,12 @@ struct dwarf2_per_objfile { dwarf2_per_objfile (struct objfile *objfile, dwarf2_per_bfd *per_bfd) : objfile (objfile), per_bfd (per_bfd) - {} + { + for (int i = 0; + i < gdb::thread_pool::g_thread_pool->thread_count () + 1; + ++i) + sym_cu.push_back (nullptr); + } ~dwarf2_per_objfile (); @@ -655,7 +660,7 @@ struct dwarf2_per_objfile htab_up line_header_hash; /* The CU containing the m_builder in scope. */ - dwarf2_cu *sym_cu = nullptr; + std::vector<dwarf2_cu *> sym_cu; /* CUs that are queued to be read. */ gdb::optional<std::deque<dwarf2_queue_item>> queue; |