reloc against local symbol

Jalaja Dx jalaja.epuri@gmail.com
Sat Jun 20 02:52:00 GMT 2009


Thanks a bunch for the patch Alan!! I really appreciate this help.

On Thu, Jun 18, 2009 at 8:29 PM, Alan Modra<amodra@bigpond.net.au> wrote:
> On Tue, Jun 16, 2009 at 06:30:10PM +0930, Alan Modra wrote:
>> x86 has two pc-relative relocations for branches, very similar to the
>> first two PowerPC relocations, R_386_PLT32 and R_386_PC32.  However,
>> ld ignores the i386 ABI if the R_386_PLT32 symbol is local, and treats
>> the relocation as if it were R_386_PC32.  It is this bug (feature!)
>> that allows you to do the rather questionable localization of symbols.
>
> I guess there isn't really any need to slavishly follow the ABI for
> PLTREL24 relocs against locals.  This patch treats such relocs as
> if they were REL24.
>
>        * elf32-ppc.c (ppc_elf_check_relocs): Allow local symbols for
>        R_PPC_PLTREL24 relocs.
>        (ppc_elf_relocate_section): Likewise.
>
> Index: bfd/elf32-ppc.c
> ===================================================================
> RCS file: /cvs/src/src/bfd/elf32-ppc.c,v
> retrieving revision 1.257
> diff -u -p -r1.257 elf32-ppc.c
> --- bfd/elf32-ppc.c     19 Jun 2009 00:41:28 -0000      1.257
> +++ bfd/elf32-ppc.c     19 Jun 2009 01:32:27 -0000
> @@ -3570,8 +3570,11 @@ ppc_elf_check_relocs (bfd *abfd,
>            h->non_got_ref = TRUE;
>          break;
>
> -       case R_PPC_PLT32:
>        case R_PPC_PLTREL24:
> +         if (h == NULL)
> +           break;
> +         /* Fall through */
> +       case R_PPC_PLT32:
>        case R_PPC_PLTREL32:
>        case R_PPC_PLT16_LO:
>        case R_PPC_PLT16_HI:
> @@ -7210,6 +7213,8 @@ ppc_elf_relocate_section (bfd *output_bf
>          break;
>
>        case R_PPC_PLTREL24:
> +         if (h == NULL)
> +           break;
>          /* Relocation is to the entry for this symbol in the
>             procedure linkage table.  */
>          {
>
> --
> Alan Modra
> Australia Development Lab, IBM
>



More information about the Binutils mailing list