#include "solist.h"
#include "gdb_bfd.h"
#include "btrace.h"
-#include "common/pathstuff.h"
+#include "gdbsupport/pathstuff.h"
#include <vector>
struct objfile_pspace_info
{
- struct obj_section **sections;
- int num_sections;
+ objfile_pspace_info () = default;
+ ~objfile_pspace_info ();
+
+ struct obj_section **sections = nullptr;
+ int num_sections = 0;
/* Nonzero if object files have been added since the section map
was last updated. */
- int new_objfiles_available;
+ int new_objfiles_available = 0;
/* Nonzero if the section map MUST be updated before use. */
- int section_map_dirty;
+ int section_map_dirty = 0;
/* Nonzero if section map updates should be inhibited if possible. */
- int inhibit_updates;
+ int inhibit_updates = 0;
};
/* Per-program-space data key. */
-static const struct program_space_data *objfiles_pspace_data;
+static const struct program_space_key<objfile_pspace_info>
+ objfiles_pspace_data;
-static void
-objfiles_pspace_data_cleanup (struct program_space *pspace, void *arg)
+objfile_pspace_info::~objfile_pspace_info ()
{
- struct objfile_pspace_info *info = (struct objfile_pspace_info *) arg;
-
- xfree (info->sections);
- xfree (info);
+ xfree (sections);
}
/* Get the current svr4 data. If none is found yet, add it now. This
{
struct objfile_pspace_info *info;
- info = ((struct objfile_pspace_info *)
- program_space_data (pspace, objfiles_pspace_data));
+ info = objfiles_pspace_data.get (pspace);
if (info == NULL)
- {
- info = XCNEW (struct objfile_pspace_info);
- set_program_space_data (pspace, objfiles_pspace_data, info);
- }
+ info = objfiles_pspace_data.emplace (pspace);
return info;
}
/* Per-BFD data key. */
-static const struct bfd_data *objfiles_bfd_data;
+static const struct bfd_key<objfile_per_bfd_storage> objfiles_bfd_data;
objfile_per_bfd_storage::~objfile_per_bfd_storage ()
{
struct objfile_per_bfd_storage *storage = NULL;
if (abfd != NULL)
- storage = ((struct objfile_per_bfd_storage *)
- bfd_data (abfd, objfiles_bfd_data));
+ storage = objfiles_bfd_data.get (abfd);
if (storage == NULL)
{
back to not sharing data across users. These cases are rare
enough that this seems reasonable. */
if (abfd != NULL && !gdb_bfd_requires_relocations (abfd))
- set_bfd_data (abfd, objfiles_bfd_data, storage);
+ objfiles_bfd_data.set (abfd, storage);
/* Look up the gdbarch associated with the BFD. */
if (abfd != NULL)
return storage;
}
-/* A deleter for objfile_per_bfd_storage that can be passed as a
- cleanup function to the BFD registry. */
-
-static void
-objfile_bfd_data_free (struct bfd *unused, void *d)
-{
- delete (struct objfile_per_bfd_storage *) d;
-}
-
/* See objfiles.h. */
void
if (objfile->per_bfd->name_of_main == NULL
|| strcmp (objfile->per_bfd->name_of_main, name) != 0)
objfile->per_bfd->name_of_main
- = (const char *) obstack_copy0 (&objfile->per_bfd->storage_obstack, name,
- strlen (name));
+ = obstack_strdup (&objfile->per_bfd->storage_obstack, name);
objfile->per_bfd->language_of_main = lang;
}
{
flagword aflag;
- aflag = bfd_get_section_flags (abfd, asect);
+ aflag = bfd_section_flags (asect);
if (!(aflag & SEC_ALLOC))
return;
}
name_holder = gdb_abspath (name);
expanded_name = name_holder.get ();
}
- original_name
- = (char *) obstack_copy0 (&objfile_obstack,
- expanded_name,
- strlen (expanded_name));
+ original_name = obstack_strdup (&objfile_obstack, expanded_name);
/* Update the per-objfile information that comes from the bfd, ensuring
that any data that is reference is saved in the per-objfile data
|| SYMBOL_CLASS (sym) == LOC_STATIC)
&& SYMBOL_SECTION (sym) >= 0)
{
- SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (delta, SYMBOL_SECTION (sym));
+ SET_SYMBOL_VALUE_ADDRESS (sym,
+ SYMBOL_VALUE_ADDRESS (sym)
+ + ANOFFSET (delta, SYMBOL_SECTION (sym)));
}
}
changed |= objfile_relocate1 (objfile, new_offsets);
- for (struct objfile *debug_objfile : objfile->separate_debug_objfiles ())
+ for (::objfile *debug_objfile : objfile->separate_debug_objfiles ())
{
if (debug_objfile == objfile)
continue;
{
int changed = 0;
- for (struct objfile *debug_objfile : objfile->separate_debug_objfiles ())
+ for (::objfile *debug_objfile : objfile->separate_debug_objfiles ())
changed |= objfile_rebase1 (debug_objfile, slide);
/* Relocate breakpoints as necessary, after things are relocated. */
int
objfile_has_symbols (struct objfile *objfile)
{
- for (struct objfile *o : objfile->separate_debug_objfiles ())
+ for (::objfile *o : objfile->separate_debug_objfiles ())
if (objfile_has_partial_symbols (o) || objfile_has_full_symbols (o))
return 1;
return 0;
insert_section_p (const struct bfd *abfd,
const struct bfd_section *section)
{
- const bfd_vma lma = bfd_section_lma (abfd, section);
+ const bfd_vma lma = bfd_section_lma (section);
- if (overlay_debugging && lma != 0 && lma != bfd_section_vma (abfd, section)
+ if (overlay_debugging && lma != 0 && lma != bfd_section_vma (section)
&& (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
/* This is an overlay section. IN_MEMORY check is needed to avoid
discarding sections from the "system supplied DSO" (aka vdso)
on some Linux systems (e.g. Fedora 11). */
return 0;
- if ((bfd_get_section_flags (abfd, section) & SEC_THREAD_LOCAL) != 0)
+ if ((bfd_section_flags (section) & SEC_THREAD_LOCAL) != 0)
/* This is a TLS section. */
return 0;
" (A) section `%s' from `%s' [%s, %s)\n"
" (B) section `%s' from `%s' [%s, %s).\n"
"Will ignore section B"),
- bfd_section_name (abfd1, bfds1), objfile_name (objf1),
+ bfd_section_name (bfds1), objfile_name (objf1),
paddress (gdbarch, sect1_addr),
paddress (gdbarch, sect1_endaddr),
- bfd_section_name (abfd2, bfds2), objfile_name (objf2),
+ bfd_section_name (bfds2), objfile_name (objf2),
paddress (gdbarch, sect2_addr),
paddress (gdbarch, sect2_endaddr));
}
return bfd_flavour_name (bfd_get_flavour (objfile->obfd));
return NULL;
}
-
-void
-_initialize_objfiles (void)
-{
- objfiles_pspace_data
- = register_program_space_data_with_cleanup (NULL,
- objfiles_pspace_data_cleanup);
-
- objfiles_bfd_data = register_bfd_data_with_cleanup (NULL,
- objfile_bfd_data_free);
-}