AIX: wrong address for shared object's .bss section

gdb/ChangeLog:

        * solib-aix.c (solib_aix_relocate_section_addresses):
        For the .bss section action, apply the same offset as
        the .data section.
This commit is contained in:
Joel Brobecker 2013-05-10 12:55:13 +00:00
parent c1357578b3
commit 060cfbef39
2 changed files with 21 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2013-05-10 Joel Brobecker <brobecker@adacore.com>
* solib-aix.c (solib_aix_relocate_section_addresses):
For the .bss section action, apply the same offset as
the .data section.
2013-05-10 Joel Brobecker <brobecker@adacore.com>
PR tdep/15420:

View File

@ -411,7 +411,21 @@ solib_aix_relocate_section_addresses (struct so_list *so,
}
else if (strcmp (section_name, ".bss") == 0)
{
sec->addr = bfd_section_vma (abfd, bfd_sect) + info->data_addr;
/* The information provided by the loader does not include
the address of the .bss section, but we know that it gets
relocated by the same offset as the .data section. So,
compute the relocation offset for the .data section, and
apply it to the .bss section as well. If the .data section
is not defined (which seems highly unlikely), do our best
by assuming no relocation. */
struct bfd_section *data_sect
= bfd_get_section_by_name (abfd, ".data");
CORE_ADDR data_offset = 0;
if (data_sect != NULL)
data_offset = info->data_addr - bfd_section_vma (abfd, data_sect);
sec->addr = bfd_section_vma (abfd, bfd_sect) + data_offset;
sec->addr += solib_aix_bss_data_overlap (abfd);
sec->endaddr = sec->addr + bfd_section_size (abfd, bfd_sect);
}