mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-23 12:09:49 +00: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:
parent
bef155c3e8
commit
906768f970
@ -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>
|
||||
|
||||
* 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
|
||||
objfile's obstack is still uselessly kept around. However,
|
||||
freeing it seems unsafe. */
|
||||
struct cleanup *cleanups = make_cleanup_discard_psymtabs (objfile);
|
||||
|
||||
psymtab_discarder psymtabs (objfile);
|
||||
dwarf2_build_psymtabs_hard (objfile);
|
||||
discard_cleanups (cleanups);
|
||||
psymtabs.keep ();
|
||||
}
|
||||
CATCH (except, RETURN_MASK_ERROR)
|
||||
{
|
||||
|
@ -21,6 +21,7 @@
|
||||
#define PSYMPRIV_H
|
||||
|
||||
#include "psymtab.h"
|
||||
#include "objfiles.h"
|
||||
|
||||
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 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. */
|
||||
|
||||
|
@ -1832,44 +1832,6 @@ discard_psymtab (struct objfile *objfile, struct partial_symtab *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,
|
||||
|
Loading…
Reference in New Issue
Block a user