-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2013-2016 Free Software Foundation, Inc.
This file is part of GDB.
static struct lm_info *
solib_aix_new_lm_info (struct lm_info *info)
{
- struct lm_info *result = xmalloc (sizeof (struct lm_info));
+ struct lm_info *result = XNEW (struct lm_info);
memcpy (result, info, sizeof (struct lm_info));
result->filename = xstrdup (info->filename);
{
struct solib_aix_inferior_data *data;
- data = inferior_data (inf, solib_aix_inferior_data_handle);
+ data = ((struct solib_aix_inferior_data *)
+ inferior_data (inf, solib_aix_inferior_data_handle));
if (data == NULL)
{
- data = XZALLOC (struct solib_aix_inferior_data);
+ data = XCNEW (struct solib_aix_inferior_data);
set_inferior_data (inf, solib_aix_inferior_data_handle, data);
}
void *user_data,
VEC (gdb_xml_value_s) *attributes)
{
- VEC (lm_info_p) **list = user_data;
- struct lm_info *item = XZALLOC (struct lm_info);
+ VEC (lm_info_p) **list = (VEC (lm_info_p) **) user_data;
+ struct lm_info *item = XCNEW (struct lm_info);
struct gdb_xml_value *attr;
attr = xml_find_attribute (attributes, "name");
- item->filename = xstrdup (attr->value);
+ item->filename = xstrdup ((const char *) attr->value);
attr = xml_find_attribute (attributes, "member");
if (attr != NULL)
- item->member_name = xstrdup (attr->value);
+ item->member_name = xstrdup ((const char *) attr->value);
attr = xml_find_attribute (attributes, "text_addr");
item->text_addr = * (ULONGEST *) attr->value;
const struct gdb_xml_element *element,
void *user_data, VEC (gdb_xml_value_s) *attributes)
{
- char *version = xml_find_attribute (attributes, "version")->value;
+ char *version = (char *) xml_find_attribute (attributes, "version")->value;
if (strcmp (version, "1.0") != 0)
gdb_xml_error (parser,
static void
solib_aix_free_library_list (void *p)
{
- VEC (lm_info_p) **result = p;
+ VEC (lm_info_p) **result = (VEC (lm_info_p) **) p;
struct lm_info *info;
int ix;
solib_aix_relocate_section_addresses (struct so_list *so,
struct target_section *sec)
{
- bfd *abfd = sec->bfd;
struct bfd_section *bfd_sect = sec->the_bfd_section;
+ bfd *abfd = bfd_sect->owner;
const char *section_name = bfd_section_name (abfd, bfd_sect);
struct lm_info *info = so->lm_info;
else
{
/* All other sections should not be relocated. */
- /* FIXME: GDB complains that the .loader section sometimes
- overlaps with other sections (Eg: the .data section).
- As far as I can tell, the loader section had the LOAD flag
- set, but not the RELOC. So it should not be relocated.
- There seems to be a problem there, and maybe it has to do
- with setting sec->addr to 0 (when the vma is indeed 0).
- But even if there wasn't, the problem then becomes the fact
- that many shared objects inside shared libraries have
- a .loader section whose vma is 0, thus also triggering
- an overlap warning. */
sec->addr = bfd_section_vma (abfd, bfd_sect);
sec->endaddr = sec->addr + bfd_section_size (abfd, bfd_sect);
}
bfd *abfd = objfile->obfd;
int i;
- offsets = XCALLOC (objfile->num_sections, struct section_offsets);
+ offsets = XCNEWVEC (struct section_offsets, objfile->num_sections);
/* .text */
to the main executable, not a shared library. */
for (ix = 1; VEC_iterate (lm_info_p, library_list, ix, info); ix++)
{
- struct so_list *new_solib = XZALLOC (struct so_list);
+ struct so_list *new_solib = XCNEW (struct so_list);
char *so_name;
if (info->member_name == NULL)
int filename_len;
char *member_name;
bfd *archive_bfd, *object_bfd;
- struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
+ struct cleanup *cleanup;
if (pathname[path_len - 1] != ')')
return solib_bfd_open (pathname);
filename_len = sep - pathname;
filename = xstrprintf ("%.*s", filename_len, pathname);
- make_cleanup (xfree, filename);
+ cleanup = make_cleanup (xfree, filename);
member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1);
make_cleanup (xfree, member_name);
return NULL;
}
+ /* Override the returned bfd's name with our synthetic name in order
+ to allow commands listing all shared libraries to display that
+ synthetic name. Otherwise, we would only be displaying the name
+ of the archive member object. */
+ xfree (bfd_get_filename (object_bfd));
+ object_bfd->filename = xstrdup (pathname);
+
gdb_bfd_unref (archive_bfd);
do_cleanups (cleanup);
return object_bfd;
if (data_osect == NULL)
error (_("unable to find TOC entry for pc %s "
"(%s has no data section)"),
- core_addr_to_string (pc), pc_osect->objfile->name);
+ core_addr_to_string (pc), objfile_name (pc_osect->objfile));
result = (obj_section_addr (data_osect)
+ xcoff_get_toc_offset (pc_osect->objfile));