public inbox for gdb-testers@sourceware.org
help / color / mirror / Atom feed
From: gdb-buildbot@sergiodj.net
To: gdb-testers@sourceware.org
Subject: [binutils-gdb] Add dwarf2_per_cu_data::index
Date: Tue, 23 Jun 2020 04:06:50 -0400	[thread overview]
Message-ID: <d3473f0c4b8e8d791ed87b1919a666bc368497dc@gdb-build> (raw)

*** TEST RESULTS FOR COMMIT d3473f0c4b8e8d791ed87b1919a666bc368497dc ***

commit d3473f0c4b8e8d791ed87b1919a666bc368497dc
Author:     Tom Tromey <tom@tromey.com>
AuthorDate: Wed May 27 11:13:49 2020 -0400
Commit:     Simon Marchi <simon.marchi@efficios.com>
CommitDate: Wed May 27 11:13:49 2020 -0400

    Add dwarf2_per_cu_data::index
    
    Currently, a dwarf2_per_cu_data can hold a link to the corresponding
    expanded compunit_symtab.  However, the dwarf2_per_cu_data objects are
    shared across objfiles, a simple pointer won't work: each objfile
    sharing the dwarf2_per_cu_data instance will have a corresponding
    compunit_symtab.
    
    Instead, this link will be stored in the dwarf2_per_objfile object
    (which will contain the objfile-specific data).  To enable this, we add
    an index to each dwarf2_per_cu_data and signatured_type.  The data
    structure in the dwarf2_per_objfile will use this new index to map a
    dwarf2_per_cu_data to its corresponding compunit_symtab, for this
    objfile.
    
    gdb/ChangeLog:
    
            * dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu,
            allocate_signatured_type>: Declare new methods.
            <m_num_psymtabs>: New member.
            (struct dwarf2_per_cu_data) <index>: New member.
            * dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu)
            (dwarf2_per_objfile::allocate_signatured_type): New methods.
            (create_cu_from_index_list): Use allocate_per_cu.
            (create_signatured_type_table_from_index)
            (create_signatured_type_table_from_debug_names)
            (create_debug_type_hash_table, add_type_unit)
            (read_comp_units_from_section): Use allocate_signatured_type.
    
    Change-Id: I7733479a38ce82a5015cb184c8acce5f8bbf2e69

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2bf42407ce..4f49e3992c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2020-05-27  Tom Tromey  <tom@tromey.com>
+
+	* dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu,
+	allocate_signatured_type>: Declare new methods.
+	<m_num_psymtabs>: New member.
+	(struct dwarf2_per_cu_data) <index>: New member.
+	* dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu)
+	(dwarf2_per_objfile::allocate_signatured_type): New methods.
+	(create_cu_from_index_list): Use allocate_per_cu.
+	(create_signatured_type_table_from_index)
+	(create_signatured_type_table_from_debug_names)
+	(create_debug_type_hash_table, add_type_unit)
+	(read_comp_units_from_section): Use allocate_signatured_type.
+
 2020-05-27  Tom Tromey  <tom@tromey.com>
 
 	* psymtab.c (partial_map_expand_apply)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 59f3a08f6e..8b4f385856 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -2408,6 +2408,26 @@ dwarf2_per_objfile::get_tu (int index)
   return this->all_type_units[index];
 }
 
+/* See read.h.  */
+
+dwarf2_per_cu_data *
+dwarf2_per_objfile::allocate_per_cu ()
+{
+  dwarf2_per_cu_data *result = OBSTACK_ZALLOC (&obstack, dwarf2_per_cu_data);
+  result->index = m_num_psymtabs++;
+  return result;
+}
+
+/* See read.h.  */
+
+signatured_type *
+dwarf2_per_objfile::allocate_signatured_type ()
+{
+  signatured_type *result = OBSTACK_ZALLOC (&obstack, signatured_type);
+  result->per_cu.index = m_num_psymtabs++;
+  return result;
+}
+
 /* Return a new dwarf2_per_cu_data allocated on the dwarf2_per_objfile
    obstack, and constructed with the specified field values.  */
 
@@ -2417,9 +2437,7 @@ create_cu_from_index_list (struct dwarf2_per_objfile *dwarf2_per_objfile,
                           int is_dwz,
                           sect_offset sect_off, ULONGEST length)
 {
-  dwarf2_per_cu_data *the_cu
-    = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack,
-                     struct dwarf2_per_cu_data);
+  dwarf2_per_cu_data *the_cu = dwarf2_per_objfile->allocate_per_cu ();
   the_cu->sect_off = sect_off;
   the_cu->length = length;
   the_cu->dwarf2_per_objfile = dwarf2_per_objfile;
@@ -2508,8 +2526,7 @@ create_signatured_type_table_from_index
       signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE);
       bytes += 3 * 8;
 
-      sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack,
-				 struct signatured_type);
+      sig_type = dwarf2_per_objfile->allocate_signatured_type ();
       sig_type->signature = signature;
       sig_type->type_offset_in_tu = type_offset_in_tu;
       sig_type->per_cu.is_debug_types = 1;
@@ -2565,8 +2582,7 @@ create_signatured_type_table_from_debug_names
 				     section->buffer + to_underlying (sect_off),
 				     rcuh_kind::TYPE);
 
-      sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack,
-				 struct signatured_type);
+      sig_type = dwarf2_per_objfile->allocate_signatured_type ();
       sig_type->signature = cu_header.signature;
       sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
       sig_type->per_cu.is_debug_types = 1;
@@ -6242,8 +6258,7 @@ create_debug_type_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
 	  /* N.B.: type_offset is not usable if this type uses a DWO file.
 	     The real type_offset is in the DWO file.  */
 	  dwo_tu = NULL;
-	  sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack,
-				     struct signatured_type);
+	  sig_type = dwarf2_per_objfile->allocate_signatured_type ();
 	  sig_type->signature = header.signature;
 	  sig_type->type_offset_in_tu = header.type_cu_offset_in_tu;
 	  sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile;
@@ -6358,8 +6373,7 @@ add_type_unit (struct dwarf2_per_objfile *dwarf2_per_objfile, ULONGEST sig,
       == dwarf2_per_objfile->all_type_units.capacity ())
     ++dwarf2_per_objfile->tu_stats.nr_all_type_units_reallocs;
 
-  signatured_type *sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack,
-					      struct signatured_type);
+  signatured_type *sig_type = dwarf2_per_objfile->allocate_signatured_type ();
 
   dwarf2_per_objfile->all_type_units.push_back (sig_type);
   sig_type->signature = sig;
@@ -7964,16 +7978,10 @@ read_comp_units_from_section (struct dwarf2_per_objfile *dwarf2_per_objfile,
 
       /* Save the compilation unit for later lookup.  */
       if (cu_header.unit_type != DW_UT_type)
-	{
-	  this_cu = XOBNEW (&dwarf2_per_objfile->obstack,
-			    struct dwarf2_per_cu_data);
-	  memset (this_cu, 0, sizeof (*this_cu));
-	}
+	this_cu = dwarf2_per_objfile->allocate_per_cu ();
       else
 	{
-	  auto sig_type = XOBNEW (&dwarf2_per_objfile->obstack,
-				  struct signatured_type);
-	  memset (sig_type, 0, sizeof (*sig_type));
+	  auto sig_type = dwarf2_per_objfile->allocate_signatured_type ();
 	  sig_type->signature = cu_header.signature;
 	  sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
 	  this_cu = &sig_type->per_cu;
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 8dbda90aa5..bbc4f96b7c 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -111,6 +111,16 @@ struct dwarf2_per_objfile
   /* Free all cached compilation units.  */
   void free_cached_comp_units ();
 
+  /* A convenience function to allocate a dwarf2_per_cu_data.  The
+     returned object has its "index" field set properly.  The object
+     is allocated on the dwarf2_per_objfile obstack.  */
+  dwarf2_per_cu_data *allocate_per_cu ();
+
+  /* A convenience function to allocate a signatured_type.  The
+     returned object has its "index" field set properly.  The object
+     is allocated on the dwarf2_per_objfile obstack.  */
+  signatured_type *allocate_signatured_type ();
+
   /* Return pointer to string at .debug_line_str offset as read from BUF.
      BUF is assumed to be in a compilation unit described by CU_HEADER.
      Return *BYTES_READ_PTR count of bytes read from BUF.  */
@@ -249,6 +259,12 @@ public:
 
   /* CUs that are queued to be read.  */
   std::queue<dwarf2_queue_item> queue;
+
+private:
+
+  /* The total number of per_cu and signatured_type objects that have
+     been created so far for this reader.  */
+  size_t m_num_psymtabs = 0;
 };
 
 /* Get the dwarf2_per_objfile associated to OBJFILE.  */
@@ -322,6 +338,9 @@ struct dwarf2_per_cu_data
      This flag is only valid if is_debug_types is true.  */
   unsigned int tu_read : 1;
 
+  /* Our index in the unshared "symtabs" vector.  */
+  unsigned index;
+
   /* The section this CU/TU lives in.
      If the DIE refers to a DWO file, this is always the original die,
      not the DWO file.  */


             reply	other threads:[~2020-06-23  8:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-23  8:06 gdb-buildbot [this message]
2020-06-23  8:06 ` Failures on Fedora-x86_64-cc-with-index, branch master gdb-buildbot
2020-06-23  8:09 ` Failures on Fedora-x86_64-m32, " gdb-buildbot
2020-06-23  8:40 ` Failures on Fedora-x86_64-m64, " gdb-buildbot
2020-06-23  8:53 ` Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot
2020-06-23  9:25 ` Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot
2020-06-23  9:28 ` Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot
2020-06-23 10:04 ` Failures on Fedora-x86_64-native-gdbserver-m64, " gdb-buildbot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d3473f0c4b8e8d791ed87b1919a666bc368497dc@gdb-build \
    --to=gdb-buildbot@sergiodj.net \
    --cc=gdb-testers@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).