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] Use new and delete for psymtabs
Date: Mon, 27 Jan 2020 01:33:00 -0000	[thread overview]
Message-ID: <6f17252b76dbe8bedd32b6df6ce52af707bfb04b@gdb-build> (raw)

*** TEST RESULTS FOR COMMIT 6f17252b76dbe8bedd32b6df6ce52af707bfb04b ***

commit 6f17252b76dbe8bedd32b6df6ce52af707bfb04b
Author:     Tom Tromey <tom@tromey.com>
AuthorDate: Wed Oct 16 14:06:43 2019 -0600
Commit:     Tom Tromey <tom@tromey.com>
CommitDate: Sun Jan 26 16:40:20 2020 -0700

    Use new and delete for psymtabs
    
    This changes psymtabs to be allocated with new and destroyed with
    delete.  As a consequence, the psymtab free-list is also removed.
    
    The motivation for this is to let symbol readers subclass
    partial_symtab.
    
    gdb/ChangeLog
    2020-01-26  Tom Tromey  <tom@tromey.com>
    
            * mdebugread.c (parse_partial_symbols): Use discard_psymtab.
            * psymtab.h (class psymtab_storage) <free_psymtabs>: Remove.
            * psymtab.c (psymtab_storage): Delete psymtabs.
            (psymtab_storage::allocate_psymtab): Use new.
            (psymtab_storage::discard_psymtab): Use delete.
            * psympriv.h (struct partial_symtab): Add constructor and
            initializers.
    
    Change-Id: I4e78ac538fc0ea52b57489c1afb8f935a30941ef

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9525ca71db..7be36c11b5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2020-01-26  Tom Tromey  <tom@tromey.com>
+
+	* mdebugread.c (parse_partial_symbols): Use discard_psymtab.
+	* psymtab.h (class psymtab_storage) <free_psymtabs>: Remove.
+	* psymtab.c (psymtab_storage): Delete psymtabs.
+	(psymtab_storage::allocate_psymtab): Use new.
+	(psymtab_storage::discard_psymtab): Use delete.
+	* psympriv.h (struct partial_symtab): Add constructor and
+	initializers.
+
 2020-01-26  Tom Tromey  <tom@tromey.com>
 
 	* machoread.c: Do not include psympriv.h.
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index b1994f1e0b..393a433792 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -3747,7 +3747,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
       && pst->number_of_dependencies == 0
       && pst->n_global_syms == 0
       && pst->n_static_syms == 0)
-    objfile->partial_symtabs->psymtabs = NULL;
+    objfile->partial_symtabs->discard_psymtab (pst);
 }
 
 /* If the current psymbol has an enumerated type, we need to add
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index be03465992..dc89db2ff6 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -104,6 +104,13 @@ enum psymtab_search_status
 
 struct partial_symtab
 {
+  partial_symtab ()
+    : searched_flag (PST_NOT_SEARCHED),
+      text_low_valid (0),
+      text_high_valid (0)
+  {
+  }
+
   /* Return the raw low text address of this partial_symtab.  */
   CORE_ADDR raw_text_low () const
   {
@@ -145,21 +152,21 @@ struct partial_symtab
 
   /* Chain of all existing partial symtabs.  */
 
-  struct partial_symtab *next;
+  struct partial_symtab *next = nullptr;
 
   /* Name of the source file which this partial_symtab defines,
      or if the psymtab is anonymous then a descriptive name for
      debugging purposes, or "".  It must not be NULL.  */
 
-  const char *filename;
+  const char *filename = nullptr;
 
   /* Full path of the source file.  NULL if not known.  */
 
-  char *fullname;
+  char *fullname = nullptr;
 
   /* Directory in which it was compiled, or NULL if we don't know.  */
 
-  const char *dirname;
+  const char *dirname = nullptr;
 
   /* Range of text addresses covered by this file; texthigh is the
      beginning of the next section.  Do not use if PSYMTABS_ADDRMAP_SUPPORTED
@@ -168,8 +175,8 @@ struct partial_symtab
      text_low_valid and text_high_valid fields; these are located later
      in this structure for better packing.  */
 
-  CORE_ADDR m_text_low;
-  CORE_ADDR m_text_high;
+  CORE_ADDR m_text_low = 0;
+  CORE_ADDR m_text_high = 0;
 
   /* If NULL, this is an ordinary partial symbol table.
 
@@ -198,7 +205,7 @@ struct partial_symtab
      The choice of which one should be canonical is left to the
      debuginfo reader; it can be arbitrary.  */
 
-  struct partial_symtab *user;
+  struct partial_symtab *user = nullptr;
 
   /* Array of pointers to all of the partial_symtab's which this one
      depends on.  Since this array can only be set to previous or
@@ -209,17 +216,17 @@ struct partial_symtab
      in foo.h may use type numbers defined in foo.c.  For other debugging
      formats there may be no need to use dependencies.  */
 
-  struct partial_symtab **dependencies;
+  struct partial_symtab **dependencies = nullptr;
 
-  int number_of_dependencies;
+  int number_of_dependencies = 0;
 
   /* Global symbol list.  This list will be sorted after readin to
      improve access.  Binary search will be the usual method of
      finding a symbol within it.  globals_offset is an integer offset
      within global_psymbols[].  */
 
-  int globals_offset;
-  int n_global_syms;
+  int globals_offset = 0;
+  int n_global_syms = 0;
 
   /* Static symbol list.  This list will *not* be sorted after readin;
      to find a symbol in it, exhaustive search must be used.  This is
@@ -229,24 +236,24 @@ struct partial_symtab
      how long errors take).  This is an offset and size within
      static_psymbols[].  */
 
-  int statics_offset;
-  int n_static_syms;
+  int statics_offset = 0;
+  int n_static_syms = 0;
 
   /* Non-zero if the symtab corresponding to this psymtab has been
      readin.  This is located here so that this structure packs better
      on 64-bit systems.  */
 
-  unsigned char readin;
+  unsigned char readin = 0;
 
   /* True iff objfile->psymtabs_addrmap is properly populated for this
      partial_symtab.  For discontiguous overlapping psymtabs is the only usable
      info in PSYMTABS_ADDRMAP.  */
 
-  unsigned char psymtabs_addrmap_supported;
+  unsigned char psymtabs_addrmap_supported = 0;
 
   /* True if the name of this partial symtab is not a source file name.  */
 
-  unsigned char anonymous;
+  unsigned char anonymous = 0;
 
   /* A flag that is temporarily used when searching psymtabs.  */
 
@@ -260,19 +267,19 @@ struct partial_symtab
   /* Pointer to compunit eventually allocated for this source file, 0 if
      !readin or if we haven't looked for the symtab after it was readin.  */
 
-  struct compunit_symtab *compunit_symtab;
+  struct compunit_symtab *compunit_symtab = nullptr;
 
   /* Pointer to function which will read in the symtab corresponding to
      this psymtab.  */
 
-  void (*read_symtab) (struct partial_symtab *, struct objfile *);
+  void (*read_symtab) (struct partial_symtab *, struct objfile *) = nullptr;
 
   /* Information that lets read_symtab() locate the part of the symbol table
      that this psymtab corresponds to.  This information is private to the
      format-dependent symbol reading routines.  For further detail examine
      the various symbol reading modules.  */
 
-  void *read_symtab_private;
+  void *read_symtab_private = nullptr;
 };
 
 /* Specify whether a partial psymbol should be allocated on the global
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 18580f500b..5f428679fb 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -64,6 +64,13 @@ psymtab_storage::psymtab_storage ()
 
 psymtab_storage::~psymtab_storage ()
 {
+  partial_symtab *iter = psymtabs;
+  while (iter != nullptr)
+    {
+      partial_symtab *next = iter->next;
+      delete iter;
+      iter = next;
+    }
 }
 
 /* See psymtab.h.  */
@@ -71,17 +78,7 @@ psymtab_storage::~psymtab_storage ()
 struct partial_symtab *
 psymtab_storage::allocate_psymtab ()
 {
-  struct partial_symtab *psymtab;
-
-  if (free_psymtabs != nullptr)
-    {
-      psymtab = free_psymtabs;
-      free_psymtabs = psymtab->next;
-    }
-  else
-    psymtab = XOBNEW (obstack (), struct partial_symtab);
-
-  memset (psymtab, 0, sizeof (struct partial_symtab));
+  struct partial_symtab *psymtab = new struct partial_symtab;
 
   psymtab->next = psymtabs;
   psymtabs = psymtab;
@@ -1705,11 +1702,7 @@ psymtab_storage::discard_psymtab (struct partial_symtab *pst)
   while ((*prev_pst) != pst)
     prev_pst = &((*prev_pst)->next);
   (*prev_pst) = pst->next;
-
-  /* Next, put it on a free list for recycling.  */
-
-  pst->next = free_psymtabs;
-  free_psymtabs = pst;
+  delete pst;
 }
 
 \f
diff --git a/gdb/psymtab.h b/gdb/psymtab.h
index eaeac49f66..c0f0a97eb2 100644
--- a/gdb/psymtab.h
+++ b/gdb/psymtab.h
@@ -130,10 +130,6 @@ public:
 
 private:
 
-  /* List of freed partial symtabs, available for re-use.  */
-
-  struct partial_symtab *free_psymtabs = nullptr;
-
   /* The obstack where allocations are made.  This is lazily allocated
      so that we don't waste memory when there are no psymtabs.  */
 


             reply	other threads:[~2020-01-27  1:29 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-27  1:33 gdb-buildbot [this message]
2020-01-27  2:00 ` Failures on Fedora-i686, branch master gdb-buildbot
2020-01-27  2:03 ` Failures on Fedora-x86_64-cc-with-index, " gdb-buildbot
2020-01-27  2:08 ` Failures on Fedora-x86_64-m32, " gdb-buildbot
2020-01-27  2:28 ` Failures on Fedora-x86_64-m64, " gdb-buildbot
2020-01-27  2:47 ` Failures on Ubuntu-Aarch64-native-extended-gdbserver-m64, " gdb-buildbot
2020-01-27  3:13 ` Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot
2020-01-27  3:13 ` Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot
2020-01-27  5:01 ` Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot
2020-01-27  5:08 ` 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=6f17252b76dbe8bedd32b6df6ce52af707bfb04b@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).