-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2013-2014 Free Software Foundation, Inc.
This file is part of GDB.
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);
}
VEC (gdb_xml_value_s) *attributes)
{
VEC (lm_info_p) **list = user_data;
- struct lm_info *item = XZALLOC (struct lm_info);
+ struct lm_info *item = XCNEW (struct lm_info);
struct gdb_xml_value *attr;
attr = xml_find_attribute (attributes, "name");
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));