Skip to content
  • Eric Botcazou's avatar
    PR ld/22972 on SPARC. · f8745e1c
    Eric Botcazou authored
    This is a regression for the corner case of a hidden symbol in a PIC/PIE
    binary which is subject to both a new-style GOTDATA relocation and an
    old-style GOT relocation.  In this case, depending  on the link order,
    the R_SPARC_RELATIVE dynamic relocation for the GOT slot needed because
    of the old-style relocation can be replaced with R_SPARC_NONE coming
    from the GOTDATA relocation.
    
    The fix simply records whether an old-style GOT relocation is seen for a
    symbol and prevents the R_SPARC_NONE from being generated in this case.
    
    bfd/
    	* elfxx-sparc.c (struct _bfd_sparc_elf_link_hash_entry): Add new flag
    	has_old_style_got_reloc.
    	(_bfd_sparc_elf_check_relocs) <GOT relocations>: Set it for old-style
    	relocations.  Fix a couple of long lines.
    	(_bfd_sparc_elf_relocate_section) <R_SPARC_GOTDATA_OP>: Do not generate
    	a R_SPARC_NONE for the GOT slot if the symbol is also subject to
    	old-style GOT relocations.
    ld/
    	* testsuite/ld-sparc/sparc.exp: Add test for mixed GOTDATA/GOT relocs.
    	* testsuite/ld-sparc/gotop-hidden.c: New file.
    	* testsuite/ld-sparc/got-hidden32.s: Likewise.
    	* testsuite/ld-sparc/got-hidden64.s: Likewise.
    	* testsuite/ld-sparc/pass.out: Likewise.
    f8745e1c