aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-10-16 14:06:43 -0600
committerTom Tromey <tom@tromey.com>2020-01-26 16:40:20 -0700
commit6f17252b76dbe8bedd32b6df6ce52af707bfb04b (patch)
tree57515b3759448d0f1ab318cb89233e3e82ca553b
parentf6f1cebcbe4dd33cdd65094267cc33395d55ece7 (diff)
downloadfsf-binutils-gdb-6f17252b76dbe8bedd32b6df6ce52af707bfb04b.zip
fsf-binutils-gdb-6f17252b76dbe8bedd32b6df6ce52af707bfb04b.tar.gz
fsf-binutils-gdb-6f17252b76dbe8bedd32b6df6ce52af707bfb04b.tar.bz2
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
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/mdebugread.c2
-rw-r--r--gdb/psympriv.h45
-rw-r--r--gdb/psymtab.c25
-rw-r--r--gdb/psymtab.h4
5 files changed, 46 insertions, 40 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9525ca7..7be36c1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
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.
2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be>
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index b1994f1..393a433 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 be03465..dc89db2 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 18580f5..5f42867 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;
}
diff --git a/gdb/psymtab.h b/gdb/psymtab.h
index eaeac49..c0f0a97 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. */