mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 07:53:51 +08:00
Remove make_cleanup_discard_psymtabs
This removes make_cleanup_discard_psymtabs in favor of a new class. 2017-01-10 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_build_psymtabs): Use psymtab_discarder. * psympriv.h (make_cleanup_discard_psymtabs): Don't declare. * psymtab.c (discard_psymtabs_upto): Remove. (make_cleanup_discard_psymtabs): Remove. (struct psymtab_state): Remove.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2017-01-10 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* dwarf2read.c (dwarf2_build_psymtabs): Use psymtab_discarder.
|
||||||
|
* psympriv.h (make_cleanup_discard_psymtabs): Don't declare.
|
||||||
|
* psymtab.c (discard_psymtabs_upto): Remove.
|
||||||
|
(make_cleanup_discard_psymtabs): Remove.
|
||||||
|
(struct psymtab_state): Remove.
|
||||||
|
|
||||||
2017-01-10 Tom Tromey <tom@tromey.com>
|
2017-01-10 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* record-full.c (record_full_save_cleanups): Remove.
|
* record-full.c (record_full_save_cleanups): Remove.
|
||||||
|
@ -4271,10 +4271,9 @@ dwarf2_build_psymtabs (struct objfile *objfile)
|
|||||||
/* This isn't really ideal: all the data we allocate on the
|
/* This isn't really ideal: all the data we allocate on the
|
||||||
objfile's obstack is still uselessly kept around. However,
|
objfile's obstack is still uselessly kept around. However,
|
||||||
freeing it seems unsafe. */
|
freeing it seems unsafe. */
|
||||||
struct cleanup *cleanups = make_cleanup_discard_psymtabs (objfile);
|
psymtab_discarder psymtabs (objfile);
|
||||||
|
|
||||||
dwarf2_build_psymtabs_hard (objfile);
|
dwarf2_build_psymtabs_hard (objfile);
|
||||||
discard_cleanups (cleanups);
|
psymtabs.keep ();
|
||||||
}
|
}
|
||||||
CATCH (except, RETURN_MASK_ERROR)
|
CATCH (except, RETURN_MASK_ERROR)
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#define PSYMPRIV_H
|
#define PSYMPRIV_H
|
||||||
|
|
||||||
#include "psymtab.h"
|
#include "psymtab.h"
|
||||||
|
#include "objfiles.h"
|
||||||
|
|
||||||
struct psymbol_allocation_list;
|
struct psymbol_allocation_list;
|
||||||
|
|
||||||
@ -225,7 +226,40 @@ extern struct partial_symtab *allocate_psymtab (const char *,
|
|||||||
|
|
||||||
extern void discard_psymtab (struct objfile *, struct partial_symtab *);
|
extern void discard_psymtab (struct objfile *, struct partial_symtab *);
|
||||||
|
|
||||||
extern struct cleanup *make_cleanup_discard_psymtabs (struct objfile *);
|
/* Used when recording partial symbol tables. On destruction,
|
||||||
|
discards any partial symbol tables that have been built. However,
|
||||||
|
the tables can be kept by calling the "keep" method. */
|
||||||
|
class psymtab_discarder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
psymtab_discarder (struct objfile *objfile)
|
||||||
|
: m_objfile (objfile),
|
||||||
|
m_psymtab (objfile->psymtabs)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~psymtab_discarder ()
|
||||||
|
{
|
||||||
|
if (m_objfile != NULL)
|
||||||
|
while (m_objfile->psymtabs != m_psymtab)
|
||||||
|
discard_psymtab (m_objfile, m_objfile->psymtabs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Keep any partial symbol tables that were built. */
|
||||||
|
void keep ()
|
||||||
|
{
|
||||||
|
m_objfile = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/* The objfile. If NULL this serves as a sentinel to indicate that
|
||||||
|
the psymtabs should be kept. */
|
||||||
|
struct objfile *m_objfile;
|
||||||
|
/* How far back to free. */
|
||||||
|
struct partial_symtab *m_psymtab;
|
||||||
|
};
|
||||||
|
|
||||||
/* Traverse all psymtabs in one objfile. */
|
/* Traverse all psymtabs in one objfile. */
|
||||||
|
|
||||||
|
@ -1832,44 +1832,6 @@ discard_psymtab (struct objfile *objfile, struct partial_symtab *pst)
|
|||||||
objfile->free_psymtabs = pst;
|
objfile->free_psymtabs = pst;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* An object of this type is passed to discard_psymtabs_upto. */
|
|
||||||
|
|
||||||
struct psymtab_state
|
|
||||||
{
|
|
||||||
/* The objfile where psymtabs are discarded. */
|
|
||||||
|
|
||||||
struct objfile *objfile;
|
|
||||||
|
|
||||||
/* The first psymtab to save. */
|
|
||||||
|
|
||||||
struct partial_symtab *save;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* A cleanup function used by make_cleanup_discard_psymtabs. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
discard_psymtabs_upto (void *arg)
|
|
||||||
{
|
|
||||||
struct psymtab_state *state = (struct psymtab_state *) arg;
|
|
||||||
|
|
||||||
while (state->objfile->psymtabs != state->save)
|
|
||||||
discard_psymtab (state->objfile, state->objfile->psymtabs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return a new cleanup that discards all psymtabs created in OBJFILE
|
|
||||||
after this function is called. */
|
|
||||||
|
|
||||||
struct cleanup *
|
|
||||||
make_cleanup_discard_psymtabs (struct objfile *objfile)
|
|
||||||
{
|
|
||||||
struct psymtab_state *state = XNEW (struct psymtab_state);
|
|
||||||
|
|
||||||
state->objfile = objfile;
|
|
||||||
state->save = objfile->psymtabs;
|
|
||||||
|
|
||||||
return make_cleanup_dtor (discard_psymtabs_upto, state, xfree);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* We need to pass a couple of items to the addrmap_foreach function,
|
/* We need to pass a couple of items to the addrmap_foreach function,
|
||||||
|
Reference in New Issue
Block a user