* elf32-ppc.c (ppc_elf_check_relocs): REL24 and REL14 relocs
authorAlan Modra <amodra@gmail.com>
Wed, 15 Mar 2006 14:30:19 +0000 (14:30 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 15 Mar 2006 14:30:19 +0000 (14:30 +0000)
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.

bfd/ChangeLog
bfd/elf32-ppc.c

index ed9aa27f9bc3853a49deae416ff4015b8822e784..5c8f5c01540a23c5e93cb56dcb68161b149738f4 100644 (file)
@@ -1,3 +1,10 @@
+2006-03-16  Alan Modra  <amodra@bigpond.net.au>
+
+       * 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.
+
 2006-03-16  Alan Modra  <amodra@bigpond.net.au>
 
        * elf32-ppc.c (ppc_elf_check_relocs): Don't fall into REL24
index 7d1cb79e327f05985ae26372ce850c5b5b93052f..3d9402e804c75b917cabfce812ec036bd87bc6ce 100644 (file)
@@ -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