From 060cfbef397769f935df461cb90d237c0783045a Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Fri, 10 May 2013 12:55:13 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 6 ++++++ gdb/solib-aix.c | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7ee965a204..9f7b97228d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-05-10 Joel Brobecker + + * 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 PR tdep/15420: diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c index 9fa5de9f6f..4672b588ce 100644 --- a/gdb/solib-aix.c +++ b/gdb/solib-aix.c @@ -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); }