* 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.
This commit is contained in:
Alan Modra 2006-03-15 14:30:19 +00:00
parent fd38b44ca1
commit 7123df0e80
2 changed files with 13 additions and 4 deletions

View 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

View 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