Normalize includes to use common/
[deliverable/binutils-gdb.git] / gdb / symfile.c
index 46c2299dc14bd7b92182a5ba72d83730197862d2..e5ff38462c5e7792b152359fdc8363dc4e863278 100644 (file)
@@ -57,8 +57,9 @@
 #include "gdb_bfd.h"
 #include "cli/cli-utils.h"
 #include "common/byte-vector.h"
-#include "selftest.h"
+#include "common/selftest.h"
 #include "cli/cli-style.h"
+#include "common/forward-scope-exit.h"
 
 #include <sys/types.h>
 #include <fcntl.h>
@@ -79,7 +80,8 @@ void (*deprecated_show_load_progress) (const char *section,
 void (*deprecated_pre_add_symbol_hook) (const char *);
 void (*deprecated_post_add_symbol_hook) (void);
 
-static void clear_symtab_users_cleanup (void *ignore);
+using clear_symtab_users_cleanup
+  = FORWARD_SCOPE_EXIT (clear_symtab_users);
 
 /* Global variables owned by this file.  */
 int readnow_symbol_files;      /* Read full symbols immediately.  */
@@ -923,7 +925,6 @@ syms_from_objfile_1 (struct objfile *objfile,
                     symfile_add_flags add_flags)
 {
   section_addr_info local_addr;
-  struct cleanup *old_chain;
   const int mainline = add_flags & SYMFILE_MAINLINE;
 
   objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
@@ -945,7 +946,8 @@ syms_from_objfile_1 (struct objfile *objfile,
 
   /* Make sure that partially constructed symbol tables will be cleaned up
      if an error occurs during symbol reading.  */
-  old_chain = make_cleanup (null_cleanup, NULL);
+  gdb::optional<clear_symtab_users_cleanup> defer_clear_users;
+
   std::unique_ptr<struct objfile> objfile_holder (objfile);
 
   /* If ADDRS is NULL, put together a dummy address list.
@@ -958,7 +960,7 @@ syms_from_objfile_1 (struct objfile *objfile,
     {
       /* We will modify the main symbol table, make sure that all its users
          will be cleaned up if an error occurs during symbol reading.  */
-      make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
+      defer_clear_users.emplace ((symfile_add_flag) 0);
 
       /* Since no error yet, throw away the old symbol table.  */
 
@@ -999,7 +1001,8 @@ syms_from_objfile_1 (struct objfile *objfile,
   /* Discard cleanups as symbol reading was successful.  */
 
   objfile_holder.release ();
-  discard_cleanups (old_chain);
+  if (defer_clear_users)
+    defer_clear_users->release ();
 }
 
 /* Same as syms_from_objfile_1, but also initializes the objfile
@@ -2351,7 +2354,7 @@ remove_symbol_file_command (const char *args, int from_tty)
 
       addr = parse_and_eval_address (argv[1]);
 
-      for (objfile *objfile : all_objfiles (current_program_space))
+      for (objfile *objfile : current_program_space->objfiles ())
        {
          if ((objfile->flags & OBJF_USERLOADED) != 0
              && (objfile->flags & OBJF_SHARED) != 0
@@ -2372,7 +2375,7 @@ remove_symbol_file_command (const char *args, int from_tty)
 
       gdb::unique_xmalloc_ptr<char> filename (tilde_expand (argv[0]));
 
-      for (objfile *objfile : all_objfiles (current_program_space))
+      for (objfile *objfile : current_program_space->objfiles ())
        {
          if ((objfile->flags & OBJF_USERLOADED) != 0
              && (objfile->flags & OBJF_SHARED) != 0
@@ -2441,7 +2444,6 @@ reread_symbols (void)
       new_modtime = new_statbuf.st_mtime;
       if (new_modtime != objfile->mtime)
        {
-         struct cleanup *old_cleanups;
          struct section_offsets *offsets;
          int num_offsets;
 
@@ -2461,7 +2463,7 @@ reread_symbols (void)
          std::unique_ptr<struct objfile> objfile_holder (objfile);
 
          /* We need to do this whenever any symbols go away.  */
-         old_cleanups = make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
+         clear_symtab_users_cleanup defer_clear_users (0);
 
          if (exec_bfd != NULL
              && filename_cmp (bfd_get_filename (objfile->obfd),
@@ -2524,23 +2526,13 @@ reread_symbols (void)
          memcpy (offsets, objfile->section_offsets,
                  SIZEOF_N_SECTION_OFFSETS (num_offsets));
 
-         /* FIXME: Do we have to free a whole linked list, or is this
-            enough?  */
-         objfile->global_psymbols.clear ();
-         objfile->static_psymbols.clear ();
-
-         /* Free the obstacks for non-reusable objfiles.  */
-         psymbol_bcache_free (objfile->psymbol_cache);
-         objfile->psymbol_cache = psymbol_bcache_init ();
+         objfile->reset_psymtabs ();
 
          /* NB: after this call to obstack_free, objfiles_changed
             will need to be called (see discussion below).  */
          obstack_free (&objfile->objfile_obstack, 0);
          objfile->sections = NULL;
          objfile->compunit_symtabs = NULL;
-         objfile->psymtabs = NULL;
-         objfile->psymtabs_addrmap = NULL;
-         objfile->free_psymtabs = NULL;
          objfile->template_symbols = NULL;
          objfile->static_links = NULL;
 
@@ -2625,7 +2617,7 @@ reread_symbols (void)
 
          /* Discard cleanups as symbol reading was successful.  */
          objfile_holder.release ();
-         discard_cleanups (old_cleanups);
+         defer_clear_users.release ();
 
          /* If the mtime has changed between the time we set new_modtime
             and now, we *want* this to be out of date, so don't call stat
@@ -2902,12 +2894,6 @@ clear_symtab_users (symfile_add_flags add_flags)
   if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
     breakpoint_re_set ();
 }
-
-static void
-clear_symtab_users_cleanup (void *ignore)
-{
-  clear_symtab_users (0);
-}
 \f
 /* OVERLAYS:
    The following code implements an abstraction for debugging overlay sections.
@@ -2990,7 +2976,7 @@ overlay_invalidate_all (void)
 {
   struct obj_section *sect;
 
-  for (objfile *objfile : all_objfiles (current_program_space))
+  for (objfile *objfile : current_program_space->objfiles ())
     ALL_OBJFILE_OSECTIONS (objfile, sect)
       if (section_is_overlay (sect))
        sect->ovly_mapped = -1;
@@ -3168,7 +3154,7 @@ find_pc_overlay (CORE_ADDR pc)
 
   if (overlay_debugging)
     {
-      for (objfile *objfile : all_objfiles (current_program_space))
+      for (objfile *objfile : current_program_space->objfiles ())
        ALL_OBJFILE_OSECTIONS (objfile, osect)
          if (section_is_overlay (osect))
            {
@@ -3197,7 +3183,7 @@ find_pc_mapped_section (CORE_ADDR pc)
 
   if (overlay_debugging)
     {
-      for (objfile *objfile : all_objfiles (current_program_space))
+      for (objfile *objfile : current_program_space->objfiles ())
        ALL_OBJFILE_OSECTIONS (objfile, osect)
          if (pc_in_mapped_range (pc, osect) && section_is_mapped (osect))
            return osect;
@@ -3217,7 +3203,7 @@ list_overlays_command (const char *args, int from_tty)
 
   if (overlay_debugging)
     {
-      for (objfile *objfile : all_objfiles (current_program_space))
+      for (objfile *objfile : current_program_space->objfiles ())
        ALL_OBJFILE_OSECTIONS (objfile, osect)
          if (section_is_mapped (osect))
            {
@@ -3265,7 +3251,7 @@ map_overlay_command (const char *args, int from_tty)
     error (_("Argument required: name of an overlay section"));
 
   /* First, find a section matching the user supplied argument.  */
-  for (objfile *obj_file : all_objfiles (current_program_space))
+  for (objfile *obj_file : current_program_space->objfiles ())
     ALL_OBJFILE_OSECTIONS (obj_file, sec)
       if (!strcmp (bfd_section_name (obj_file->obfd, sec->the_bfd_section),
                   args))
@@ -3279,7 +3265,7 @@ map_overlay_command (const char *args, int from_tty)
 
          /* Next, make a pass and unmap any sections that are
             overlapped by this new section: */
-         for (objfile *objfile2 : all_objfiles (current_program_space))
+         for (objfile *objfile2 : current_program_space->objfiles ())
            ALL_OBJFILE_OSECTIONS (objfile2, sec2)
              if (sec2->ovly_mapped && sec != sec2 && sections_overlap (sec,
                                                                        sec2))
@@ -3313,7 +3299,7 @@ unmap_overlay_command (const char *args, int from_tty)
     error (_("Argument required: name of an overlay section"));
 
   /* First, find a section matching the user supplied argument.  */
-  for (objfile *objfile : all_objfiles (current_program_space))
+  for (objfile *objfile : current_program_space->objfiles ())
     ALL_OBJFILE_OSECTIONS (objfile, sec)
       if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
        {
@@ -3584,7 +3570,7 @@ simple_overlay_update (struct obj_section *osect)
     return;
 
   /* Now may as well update all sections, even if only one was requested.  */
-  for (objfile *objfile : all_objfiles (current_program_space))
+  for (objfile *objfile : current_program_space->objfiles ())
     ALL_OBJFILE_OSECTIONS (objfile, osect)
       if (section_is_overlay (osect))
        {
@@ -3800,7 +3786,7 @@ expand_symtabs_matching
    gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
    enum search_domain kind)
 {
-  for (objfile *objfile : all_objfiles (current_program_space))
+  for (objfile *objfile : current_program_space->objfiles ())
     {
       if (objfile->sf)
        objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher,
@@ -3818,7 +3804,7 @@ void
 map_symbol_filenames (symbol_filename_ftype *fun, void *data,
                      int need_fullname)
 {
-  for (objfile *objfile : all_objfiles (current_program_space))
+  for (objfile *objfile : current_program_space->objfiles ())
     {
       if (objfile->sf)
        objfile->sf->qf->map_symbol_filenames (objfile, fun, data,
This page took 0.026553 seconds and 4 git commands to generate.