aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf32-ppc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2006-03-15 14:30:19 +0000
committerAlan Modra <amodra@gmail.com>2006-03-15 14:30:19 +0000
commit7123df0e8094827978ce5f0cebc67e5d58bdc053 (patch)
tree9ee0c63077800e0b1fcf5d4123511b2e5496608d /bfd/elf32-ppc.c
parentfd38b44ca18f24f97c00d5e263a653a98de0924d (diff)
downloadgdb-7123df0e8094827978ce5f0cebc67e5d58bdc053.zip
gdb-7123df0e8094827978ce5f0cebc67e5d58bdc053.tar.gz
gdb-7123df0e8094827978ce5f0cebc67e5d58bdc053.tar.bz2
* elf32-ppc.c (ppc_elf_check_relocs): REL24 and REL14 relocs
against __GLOBAL_OFFSET_TABLE__ need never be dynamic. Tweak last change to REL32 relocs so that they are counted as possibly dynamic as per REL24 and REL14.
Diffstat (limited to 'bfd/elf32-ppc.c')
-rw-r--r--bfd/elf32-ppc.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 7d1cb79..3d9402e 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -3335,9 +3335,9 @@ ppc_elf_check_relocs (bfd *abfd,
if (s == got2)
htab->plt_type = PLT_OLD;
}
- if (h == NULL)
+ if (h == NULL || h == htab->elf.hgot)
break;
- goto dodyn;
+ goto dodyn1;
case R_PPC_REL24:
case R_PPC_REL14:
@@ -3345,9 +3345,10 @@ ppc_elf_check_relocs (bfd *abfd,
case R_PPC_REL14_BRNTAKEN:
if (h == NULL)
break;
- if (h == htab->elf.hgot && htab->plt_type == PLT_UNSET)
+ if (h == htab->elf.hgot)
{
- htab->plt_type = PLT_OLD;
+ if (htab->plt_type == PLT_UNSET)
+ htab->plt_type = PLT_OLD;
break;
}
/* fall through */
@@ -3363,6 +3364,7 @@ ppc_elf_check_relocs (bfd *abfd,
case R_PPC_ADDR14_BRNTAKEN:
case R_PPC_UADDR32:
case R_PPC_UADDR16:
+ dodyn1:
if (h != NULL && !info->shared)
{
/* We may need a plt entry if the symbol turns out to be