/* GDB routines for manipulating objfiles.
- Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ Copyright (C) 1992-2018 Free Software Foundation, Inc.
Contributed by Cygnus Support, using pieces from other GDB modules.
#include "addrmap.h"
#include "arch-utils.h"
#include "exec.h"
-#include "observer.h"
+#include "observable.h"
#include "complaints.h"
#include "psymtab.h"
#include "solist.h"
#include "gdb_bfd.h"
#include "btrace.h"
+#include "common/pathstuff.h"
#include <vector>
objfile::~objfile ()
{
/* First notify observers that this objfile is about to be freed. */
- observer_notify_free_objfile (this);
+ gdb::observers::free_objfile.notify (this);
/* Free all separate debug objfiles. */
free_objfile_separate_debug (this);
FIXME: It's not clear which of these are supposed to persist
between expressions and which ought to be reset each time. */
expression_context_block = NULL;
- innermost_block = NULL;
+ innermost_block.reset ();
/* Check to see if the current_source_symtab belongs to this objfile,
and if so, call clear_current_source_symtab_and_line. */
clear_current_source_symtab_and_line ();
}
- if (global_psymbols.list)
- xfree (global_psymbols.list);
- if (static_psymbols.list)
- xfree (static_psymbols.list);
/* Free the obstacks for non-reusable objfiles. */
psymbol_bcache_free (psymbol_cache);
obstack_free (&objfile_obstack, 0);
htab_delete (static_links);
}
-static void
-do_free_objfile_cleanup (void *obj)
-{
- delete (struct objfile *) obj;
-}
-
-struct cleanup *
-make_cleanup_free_objfile (struct objfile *obj)
-{
- return make_cleanup (do_free_objfile_cleanup, obj);
-}
-
/* Free all the object files at once and clean up their users. */
void
debug_objfile;
debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile))
{
- struct section_addr_info *objfile_addrs;
- struct cleanup *my_cleanups;
-
- objfile_addrs = build_section_addr_info_from_objfile (objfile);
- my_cleanups = make_cleanup (xfree, objfile_addrs);
+ section_addr_info objfile_addrs
+ = build_section_addr_info_from_objfile (objfile);
/* Here OBJFILE_ADDRS contain the correct absolute addresses, the
relative ones must be already created according to debug_objfile. */
- addr_info_make_relative (objfile_addrs, debug_objfile->obfd);
+ addr_info_make_relative (&objfile_addrs, debug_objfile->obfd);
gdb_assert (debug_objfile->num_sections
== gdb_bfd_count_sections (debug_objfile->obfd));
objfile_addrs);
changed |= objfile_relocate1 (debug_objfile, new_debug_offsets.data ());
-
- do_cleanups (my_cleanups);
}
/* Relocate breakpoints as necessary, after things are relocated. */