/* GDB routines for manipulating objfiles.
- Copyright (C) 1992-2015 Free Software Foundation, Inc.
+ Copyright (C) 1992-2016 Free Software Foundation, Inc.
Contributed by Cygnus Support, using pieces from other GDB modules.
#include "gdb_bfd.h"
#include "btrace.h"
+#include <vector>
+
/* Keep a registry of per-objfile data-pointers required by other GDB
modules. */
static void
objfiles_pspace_data_cleanup (struct program_space *pspace, void *arg)
{
- struct objfile_pspace_info *info = arg;
+ struct objfile_pspace_info *info = (struct objfile_pspace_info *) arg;
xfree (info->sections);
xfree (info);
{
struct objfile_pspace_info *info;
- info = program_space_data (pspace, objfiles_pspace_data);
+ info = ((struct objfile_pspace_info *)
+ program_space_data (pspace, objfiles_pspace_data));
if (info == NULL)
{
info = XCNEW (struct objfile_pspace_info);
struct objfile_per_bfd_storage *storage = NULL;
if (abfd != NULL)
- storage = bfd_data (abfd, objfiles_bfd_data);
+ storage = ((struct objfile_per_bfd_storage *)
+ bfd_data (abfd, objfiles_bfd_data));
if (storage == NULL)
{
enough that this seems reasonable. */
if (abfd != NULL && !gdb_bfd_requires_relocations (abfd))
{
- storage = bfd_zalloc (abfd, sizeof (struct objfile_per_bfd_storage));
+ storage
+ = ((struct objfile_per_bfd_storage *)
+ bfd_zalloc (abfd, sizeof (struct objfile_per_bfd_storage)));
set_bfd_data (abfd, objfiles_bfd_data, storage);
}
else
static void
objfile_bfd_data_free (struct bfd *unused, void *d)
{
- free_objfile_per_bfd_storage (d);
+ free_objfile_per_bfd_storage ((struct objfile_per_bfd_storage *) d);
}
/* See objfiles.h. */
if (objfile->per_bfd->name_of_main == NULL
|| strcmp (objfile->per_bfd->name_of_main, name) != 0)
objfile->per_bfd->name_of_main
- = obstack_copy0 (&objfile->per_bfd->storage_obstack, name, strlen (name));
+ = (const char *) obstack_copy0 (&objfile->per_bfd->storage_obstack, name,
+ strlen (name));
objfile->per_bfd->language_of_main = lang;
}
add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
void *objfilep)
{
- add_to_objfile_sections_full (abfd, asect, objfilep, 0);
+ add_to_objfile_sections_full (abfd, asect, (struct objfile *) objfilep, 0);
}
/* Builds a section table for OBJFILE.
requests for specific operations. Other bits like OBJF_SHARED are
simply copied through to the new objfile flags member. */
-/* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
- by jv-lang.c, to create an artificial objfile used to hold
- information about dynamically-loaded Java classes. Unfortunately,
- that branch of this function doesn't get tested very frequently, so
- it's prone to breakage. (E.g. at one time the name was set to NULL
- in that situation, which broke a loop over all names in the dynamic
- library loader.) If you change this function, please try to leave
- things in a consistent state even if abfd is NULL. */
-
struct objfile *
-allocate_objfile (bfd *abfd, const char *name, int flags)
+allocate_objfile (bfd *abfd, const char *name, objfile_flags flags)
{
struct objfile *objfile;
char *expanded_name;
expanded_name = xstrdup (name);
else
expanded_name = gdb_abspath (name);
- objfile->original_name = obstack_copy0 (&objfile->objfile_obstack,
- expanded_name,
- strlen (expanded_name));
+ objfile->original_name
+ = (char *) obstack_copy0 (&objfile->objfile_obstack,
+ expanded_name,
+ strlen (expanded_name));
xfree (expanded_name);
/* Update the per-objfile information that comes from the bfd, ensuring
static void
do_free_objfile_cleanup (void *obj)
{
- free_objfile (obj);
+ free_objfile ((struct objfile *) obj);
}
struct cleanup *
debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile))
{
struct section_addr_info *objfile_addrs;
- struct section_offsets *new_debug_offsets;
struct cleanup *my_cleanups;
objfile_addrs = build_section_addr_info_from_objfile (objfile);
gdb_assert (debug_objfile->num_sections
== gdb_bfd_count_sections (debug_objfile->obfd));
- new_debug_offsets =
- xmalloc (SIZEOF_N_SECTION_OFFSETS (debug_objfile->num_sections));
- make_cleanup (xfree, new_debug_offsets);
- relative_addr_info_to_section_offsets (new_debug_offsets,
+ std::vector<struct section_offsets>
+ new_debug_offsets (SIZEOF_N_SECTION_OFFSETS (debug_objfile->num_sections));
+ relative_addr_info_to_section_offsets (new_debug_offsets.data (),
debug_objfile->num_sections,
objfile_addrs);
- changed |= objfile_relocate1 (debug_objfile, new_debug_offsets);
+ changed |= objfile_relocate1 (debug_objfile, new_debug_offsets.data ());
do_cleanups (my_cleanups);
}
if (map_size < alloc_size)
/* Some sections were eliminated. Trim excess space. */
- map = xrealloc (map, map_size * sizeof (*map));
+ map = XRESIZEVEC (struct obj_section *, map, map_size);
else
gdb_assert (alloc_size == map_size);
void
resume_section_map_updates_cleanup (void *arg)
{
- resume_section_map_updates (arg);
+ resume_section_map_updates ((struct program_space *) arg);
}
/* Return 1 if ADDR maps into one of the sections of OBJFILE and 0
return lbasename (objfile->original_name);
}
+/* See objfiles.h. */
+
+const char *
+objfile_flavour_name (struct objfile *objfile)
+{
+ if (objfile->obfd != NULL)
+ return bfd_flavour_name (bfd_get_flavour (objfile->obfd));
+ return NULL;
+}
+
/* Provide a prototype to silence -Wmissing-prototypes. */
extern initialize_file_ftype _initialize_objfiles;