]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/dwarf: move cooked_index_storage to cooked-index-storage.{h,c}
authorSimon Marchi <simon.marchi@polymtl.ca>
Thu, 6 Mar 2025 20:30:32 +0000 (15:30 -0500)
committerSimon Marchi <simon.marchi@polymtl.ca>
Fri, 7 Mar 2025 14:37:30 +0000 (09:37 -0500)
cooked_index_storage is currently declared in `cooked-index.h` and
implemented in `read.c`.  Move all that to new
`cooked-index-storage.{h,c}` files.

Change-Id: I2a07eb446d8a07b15c5664dfe01e3a820cdd45be
Approved-By: Tom Tromey <tom@tromey.com>
gdb/Makefile.in
gdb/dwarf2/cooked-index-storage.c [new file with mode: 0644]
gdb/dwarf2/cooked-index-storage.h [new file with mode: 0644]
gdb/dwarf2/cooked-index.h
gdb/dwarf2/read.c

index a24c86fcff85a0c43f0b13135cfa4e7dd9dc6be3..bf41f4142fbfd98da1e67b97ad439461dd27a834 100644 (file)
@@ -1097,6 +1097,7 @@ COMMON_SFILES = \
        dwarf2/attribute.c \
        dwarf2/comp-unit-head.c \
        dwarf2/cooked-index.c \
+       dwarf2/cooked-index-storage.c \
        dwarf2/cu.c \
        dwarf2/die.c \
        dwarf2/dwz.c \
@@ -1354,6 +1355,7 @@ HFILES_NO_SRCDIR = \
        dummy-frame.h \
        dwarf2/aranges.h \
        dwarf2/cooked-index.h \
+       dwarf2/cooked-index-storage.h \
        dwarf2/cu.h \
        dwarf2/frame-tailcall.h \
        dwarf2/frame.h \
diff --git a/gdb/dwarf2/cooked-index-storage.c b/gdb/dwarf2/cooked-index-storage.c
new file mode 100644 (file)
index 0000000..820989e
--- /dev/null
@@ -0,0 +1,76 @@
+/* DWARF index storage
+
+   Copyright (C) 2022-2025 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "dwarf2/cooked-index-storage.h"
+
+/* See cooked-index-storage.h.  */
+
+cooked_index_storage::cooked_index_storage ()
+  : m_reader_hash (htab_create_alloc (10, hash_cutu_reader,
+                                     eq_cutu_reader,
+                                     htab_delete_entry<cutu_reader>,
+                                     xcalloc, xfree)),
+    m_shard (new cooked_index_shard)
+{
+}
+
+/* See cooked-index-storage.h.  */
+
+cutu_reader *
+cooked_index_storage::get_reader (dwarf2_per_cu *per_cu)
+{
+  int index = per_cu->index;
+  return (cutu_reader *) htab_find_with_hash (m_reader_hash.get (),
+                                             &index, index);
+}
+
+/* See cooked-index-storage.h.  */
+
+cutu_reader *
+cooked_index_storage::preserve (cutu_reader_up reader)
+{
+  m_abbrev_table_cache.add (reader->release_abbrev_table ());
+
+  int index = reader->cu ()->per_cu->index;
+  void **slot = htab_find_slot_with_hash (m_reader_hash.get (), &index,
+                                         index, INSERT);
+  gdb_assert (*slot == nullptr);
+  cutu_reader *result = reader.get ();
+  *slot = reader.release ();
+  return result;
+}
+
+/* See cooked-index-storage.h.  */
+
+hashval_t
+cooked_index_storage::hash_cutu_reader (const void *a)
+{
+  const cutu_reader *reader = (const cutu_reader *) a;
+  return reader->cu ()->per_cu->index;
+}
+
+/* See cooked-index-storage.h.  */
+
+int
+cooked_index_storage::eq_cutu_reader (const void *a, const void *b)
+{
+  const cutu_reader *ra = (const cutu_reader *) a;
+  const int *rb = (const int *) b;
+  return ra->cu ()->per_cu->index == *rb;
+}
diff --git a/gdb/dwarf2/cooked-index-storage.h b/gdb/dwarf2/cooked-index-storage.h
new file mode 100644 (file)
index 0000000..3d0b5b2
--- /dev/null
@@ -0,0 +1,115 @@
+/* DWARF index storage
+
+   Copyright (C) 2022-2025 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef GDB_DWARF2_COOKED_INDEX_STORAGE_H
+#define GDB_DWARF2_COOKED_INDEX_STORAGE_H
+
+#include "dwarf2/abbrev-table-cache.h"
+#include "dwarf2/cooked-index.h"
+#include "dwarf2/types.h"
+
+struct cutu_reader;
+struct dwarf2_per_cu;
+
+using cutu_reader_up = std::unique_ptr<cutu_reader>;
+
+/* An instance of this is created when scanning DWARF to create a
+   cooked index.  */
+
+class cooked_index_storage
+{
+public:
+
+  cooked_index_storage ();
+  DISABLE_COPY_AND_ASSIGN (cooked_index_storage);
+
+  /* Return the current abbrev table_cache.  */
+  const abbrev_table_cache &get_abbrev_table_cache () const
+  { return m_abbrev_table_cache; }
+
+  /* Return the DIE reader corresponding to PER_CU.  If no such reader
+     has been registered, return NULL.  */
+  cutu_reader *get_reader (dwarf2_per_cu *per_cu);
+
+  /* Preserve READER by storing it in the local hash table.  */
+  cutu_reader *preserve (cutu_reader_up reader);
+
+  /* Add an entry to the index.  The arguments describe the entry; see
+     cooked-index.h.  The new entry is returned.  */
+  cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag,
+                          cooked_index_flag flags,
+                          const char *name,
+                          cooked_index_entry_ref parent_entry,
+                          dwarf2_per_cu *per_cu)
+  {
+    return m_shard->add (die_offset, tag, flags, per_cu->lang (),
+                        name, parent_entry, per_cu);
+  }
+
+  /* Install the current addrmap into the shard being constructed,
+     then transfer ownership of the index to the caller.  */
+  cooked_index_shard_up release ()
+  {
+    m_shard->install_addrmap (&m_addrmap);
+    return std::move (m_shard);
+  }
+
+  /* Return the mutable addrmap that is currently being created.  */
+  addrmap_mutable *get_addrmap ()
+  {
+    return &m_addrmap;
+  }
+
+  /* Return the parent_map that is currently being created.  */
+  parent_map *get_parent_map ()
+  {
+    return &m_parent_map;
+  }
+
+  /* Return the parent_map that is currently being created.  Ownership
+     is passed to the caller.  */
+  parent_map release_parent_map ()
+  {
+    return std::move (m_parent_map);
+  }
+
+private:
+
+  /* Hash function for a cutu_reader.  */
+  static hashval_t hash_cutu_reader (const void *a);
+
+  /* Equality function for cutu_reader.  */
+  static int eq_cutu_reader (const void *a, const void *b);
+
+  /* The abbrev table cache used by this indexer.  */
+  abbrev_table_cache m_abbrev_table_cache;
+
+  /* A hash table of cutu_reader objects.  */
+  htab_up m_reader_hash;
+  /* The index shard that is being constructed.  */
+  cooked_index_shard_up m_shard;
+
+  /* Parent map for each CU that is read.  */
+  parent_map m_parent_map;
+
+  /* A writeable addrmap being constructed by this scanner.  */
+  addrmap_mutable m_addrmap;
+};
+
+#endif /* GDB_DWARF2_COOKED_INDEX_STORAGE_H */
index 68407c84b9be53aab8f75195353b58df758cd437..f65863597708c9a570f2115f1a7cb39448b3348e 100644 (file)
@@ -30,7 +30,6 @@
 #include "gdbsupport/iterator-range.h"
 #include "dwarf2/mapped-index.h"
 #include "dwarf2/read.h"
-#include "dwarf2/abbrev-table-cache.h"
 #include "dwarf2/parent-map.h"
 #include "gdbsupport/range-chain.h"
 #include "complaints.h"
@@ -373,93 +372,6 @@ private:
 
 using cooked_index_shard_up = std::unique_ptr<cooked_index_shard>;
 
-class cutu_reader;
-
-using cutu_reader_up = std::unique_ptr<cutu_reader>;
-
-/* An instance of this is created when scanning DWARF to create a
-   cooked index.  */
-
-class cooked_index_storage
-{
-public:
-
-  cooked_index_storage ();
-  DISABLE_COPY_AND_ASSIGN (cooked_index_storage);
-
-  /* Return the current abbrev table_cache.  */
-  const abbrev_table_cache &get_abbrev_table_cache () const
-  { return m_abbrev_table_cache; }
-
-  /* Return the DIE reader corresponding to PER_CU.  If no such reader
-     has been registered, return NULL.  */
-  cutu_reader *get_reader (dwarf2_per_cu *per_cu);
-
-  /* Preserve READER by storing it in the local hash table.  */
-  cutu_reader *preserve (cutu_reader_up reader);
-
-  /* Add an entry to the index.  The arguments describe the entry; see
-     cooked-index.h.  The new entry is returned.  */
-  cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag,
-                          cooked_index_flag flags,
-                          const char *name,
-                          cooked_index_entry_ref parent_entry,
-                          dwarf2_per_cu *per_cu)
-  {
-    return m_shard->add (die_offset, tag, flags, per_cu->lang (),
-                        name, parent_entry, per_cu);
-  }
-
-  /* Install the current addrmap into the shard being constructed,
-     then transfer ownership of the index to the caller.  */
-  cooked_index_shard_up release ()
-  {
-    m_shard->install_addrmap (&m_addrmap);
-    return std::move (m_shard);
-  }
-
-  /* Return the mutable addrmap that is currently being created.  */
-  addrmap_mutable *get_addrmap ()
-  {
-    return &m_addrmap;
-  }
-
-  /* Return the parent_map that is currently being created.  */
-  parent_map *get_parent_map ()
-  {
-    return &m_parent_map;
-  }
-
-  /* Return the parent_map that is currently being created.  Ownership
-     is passed to the caller.  */
-  parent_map release_parent_map ()
-  {
-    return std::move (m_parent_map);
-  }
-
-private:
-
-  /* Hash function for a cutu_reader.  */
-  static hashval_t hash_cutu_reader (const void *a);
-
-  /* Equality function for cutu_reader.  */
-  static int eq_cutu_reader (const void *a, const void *b);
-
-  /* The abbrev table cache used by this indexer.  */
-  abbrev_table_cache m_abbrev_table_cache;
-
-  /* A hash table of cutu_reader objects.  */
-  htab_up m_reader_hash;
-  /* The index shard that is being constructed.  */
-  cooked_index_shard_up m_shard;
-
-  /* Parent map for each CU that is read.  */
-  parent_map m_parent_map;
-
-  /* A writeable addrmap being constructed by this scanner.  */
-  addrmap_mutable m_addrmap;
-};
-
 /* The possible states of the index.  See the explanatory comment
    before cooked_index for more details.  */
 enum class cooked_state
index 833f424bb2e99fce825de45b1decd34dc1ca9bbd..4aaf5fb0bf520f74b010c0fdd262cbace1bf15ee 100644 (file)
@@ -32,6 +32,7 @@
 #include "dwarf2/aranges.h"
 #include "dwarf2/attribute.h"
 #include "dwarf2/comp-unit-head.h"
+#include "dwarf2/cooked-index-storage.h"
 #include "dwarf2/cu.h"
 #include "dwarf2/index-cache.h"
 #include "dwarf2/leb.h"
@@ -3502,55 +3503,6 @@ get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list)
   gdb_assert (tu_group != nullptr);
   return tu_group;
 }
-\f
-
-cooked_index_storage::cooked_index_storage ()
-  : m_reader_hash (htab_create_alloc (10, hash_cutu_reader,
-                                     eq_cutu_reader,
-                                     htab_delete_entry<cutu_reader>,
-                                     xcalloc, xfree)),
-    m_shard (new cooked_index_shard)
-{
-}
-
-cutu_reader *
-cooked_index_storage::get_reader (dwarf2_per_cu *per_cu)
-{
-  int index = per_cu->index;
-  return (cutu_reader *) htab_find_with_hash (m_reader_hash.get (),
-                                             &index, index);
-}
-
-cutu_reader *
-cooked_index_storage::preserve (cutu_reader_up reader)
-{
-  m_abbrev_table_cache.add (reader->release_abbrev_table ());
-
-  int index = reader->cu ()->per_cu->index;
-  void **slot = htab_find_slot_with_hash (m_reader_hash.get (), &index,
-                                         index, INSERT);
-  gdb_assert (*slot == nullptr);
-  cutu_reader *result = reader.get ();
-  *slot = reader.release ();
-  return result;
-}
-
-/* Hash function for a cutu_reader.  */
-hashval_t
-cooked_index_storage::hash_cutu_reader (const void *a)
-{
-  const cutu_reader *reader = (const cutu_reader *) a;
-  return reader->cu ()->per_cu->index;
-}
-
-/* Equality function for cutu_reader.  */
-int
-cooked_index_storage::eq_cutu_reader (const void *a, const void *b)
-{
-  const cutu_reader *ra = (const cutu_reader *) a;
-  const int *rb = (const int *) b;
-  return ra->cu ()->per_cu->index == *rb;
-}
 
 /* An instance of this is created to index a CU.  */