2010-05-21 Daniel Jacobowitz <dan@codesourcery.com>
commitaab06c2da155ae26b9c6050a0d34872544f65c2a
authorNick Clifton <nickc@redhat.com>
Tue, 25 May 2010 14:12:35 +0000 (25 14:12 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 25 May 2010 14:12:35 +0000 (25 14:12 +0000)
tree4b556009eaad68b105af0c5ef3c293f0afe9ddb4
parent1d05d34796dac86354765f70df5764cc0c08e204
2010-05-21  Daniel Jacobowitz  <dan@codesourcery.com>
            Joseph Myers  <joseph@codesourcery.com>
            Andrew Stubbs  <ams@codesourcery.com>

        bfd/
        * config.bfd (sh-*-uclinux* | sh[12]-*-uclinux*): Add
        bfd_elf32_shl_vec, and FDPIC vectors to targ_selvecs.
        * configure.in: Handle FDPIC vectors.
        * elf32-sh-relocs.h: Add FDPIC and movi20 relocations.
        * elf32-sh.c (DEFAULT_STACK_SIZE): Define.
        (SYMBOL_FUNCDESC_LOCAL): Define.  Use it instead of
        SYMBOL_REFERENCES_LOCAL for function descriptors.
        (fdpic_object_p): New.
        (sh_reloc_map): Add FDPIC and movi20 relocations.
        (sh_elf_info_to_howto, sh_elf_relocate_section): Handle new invalid
        range.
        (struct elf_sh_plt_info): Add got20 and short_plt.  Update all
        definitions.
        (FDPIC_PLT_ENTRY_SIZE, FDPIC_PLT_LAZY_OFFSET): Define.
        (fdpic_sh_plt_entry_be, fdpic_sh_plt_entry_le, fdpic_sh_plts): New.
        (FDPIC_SH2A_PLT_ENTRY_SIZE, FDPIC_SH2A_PLT_LAZY_OFFSET): Define.
        (fdpic_sh2a_plt_entry_be, fdpic_sh2a_plt_entry_le)
        (fdpic_sh2a_short_plt_be, fdpic_sh2a_short_plt_le, fdpic_sh2a_plts):
        New.
        (get_plt_info): Handle FDPIC.
        (MAX_SHORT_PLT): Define.
        (get_plt_index, get_plt_offset): Handle short_plt.
        (union gotref): New.
        (struct elf_sh_link_hash_entry): Add funcdesc, rename tls_type to
        got_type and adjust all uses.  Add GOT_FUNCDESC.
        (struct sh_elf_obj_tdata): Add local_funcdesc.  Rename
        local_got_tls_type to local_got_type.
        (sh_elf_local_got_type): Renamed from sh_elf_local_got_tls_type.  All
        users changed.
        (sh_elf_local_funcdesc): Define.
        (struct elf_sh_link_hash_table): Add sfuncdesc, srelfuncdesc, fdpic_p,
        and srofixup.
        (sh_elf_link_hash_newfunc): Initialize new fields.
        (sh_elf_link_hash_table_create): Set fdpic_p.
        (sh_elf_omit_section_dynsym): New.
        (create_got_section): Create .got.funcdesc, .rela.got.funcdesc
        and .rofixup.
        (allocate_dynrelocs): Allocate local function descriptors and space
        for R_SH_FUNCDESC-related relocations, and for rofixups.
        Handle GOT_FUNCDESC.  Create fixups.  Handle GOT entries which
        require function descriptors.
        (sh_elf_always_size_sections): Handle PT_GNU_STACK and __stacksize.
        (sh_elf_modify_program_headers): New.
        (sh_elf_size_dynamic_sections): Allocate function descriptors for
        local symbols.  Allocate .got.funcdesc contents.  Allocate rofixups.
        Handle local GOT entries of type GOT_FUNCDESC.  Create fixups for
        local GOT entries.  Ensure that FDPIC libraries always have a PLTGOT
        entry in the .dynamic section.
        (sh_elf_add_dyn_reloc, sh_elf_got_offset, sh_elf_initialize_funcdesc)
        (sh_elf_add_rofixup, sh_elf_osec_to_segment)
        (sh_elf_osec_readonly_p, install_movi20_field): New functions.
        (sh_elf_relocate_section): Handle new relocations, R_SH_FUNCDESC,
        R_SH_GOTFUNCDESC and R_SH_GOTOFFFUNCDESC.  Use sh_elf_got_offset
        and .got.plt throughout to find _GLOBAL_OFFSET_TABLE_.  Add rofixup
        read-only section warnings.  Handle undefined weak symbols.  Generate
        fixups for R_SH_DIR32 and GOT entries.  Check for cross-segment
        relocations and clear EF_SH_PIC.  Handle 20-bit relocations.
        Always generate R_SH_DIR32 for FDPIC instead of R_SH_RELATIVE.
        (sh_elf_gc_sweep_hook): Handle R_SH_FUNCDESC, R_SH_GOTOFF20,
        R_SH_GOTFUNCDESC, R_SH_GOTFUNCDESC20, and R_SH_GOTOFFFUNCDESC.
        Handle 20-bit relocations.
        (sh_elf_copy_indirect_symbol): Copy function descriptor reference
        counts.
        (sh_elf_check_relocs): Handle new relocations.  Make symbols
        dynamic for FDPIC relocs.  Account for rofixups.  Error for FDPIC
        symbol mismatches.  Allocate a GOT for R_SH_DIR32. Allocate fixups
        for R_SH_DIR32.
        (sh_elf_copy_private_data): Copy PT_GNU_STACK size.
        (sh_elf_merge_private_data): Copy initial flags.  Do not clobber
        non-mach flags.  Set EF_SH_PIC for FDPIC.  Reject FDPIC mismatches.
        (sh_elf_finish_dynamic_symbol): Do not handle got_funcdesc entries
        here.  Rename sgot to sgotplt and srel to srelplt.  Handle short_plt,
        FDPIC descriptors, and got20.  Create R_SH_FUNCDESC_VALUE for FDPIC.
        Use install_movi20_field.  Rename srel to srelgot.  Always generate
        R_SH_DIR32 for FDPIC instead of R_SH_RELATIVE.
        (sh_elf_finish_dynamic_sections): Fill in the GOT pointer in rofixup.
        Do not fill in reserved GOT entries for FDPIC.  Correct DT_PLTGOT.
        Rename sgot to sgotplt.  Assert that the right number of rofixups
        and dynamic relocations were allocated.
        (sh_elf_use_relative_eh_frame, sh_elf_encode_eh_address): New.
        (elf_backend_omit_section_dynsym): Use sh_elf_omit_section_dynsym.
        (elf_backend_can_make_relative_eh_frame)
        (elf_backend_can_make_lsda_relative_eh_frame)
        (elf_backend_encode_eh_address): Define.
        (TARGET_BIG_SYM, TARGET_BIG_NAME, TARGET_LITTLE_SYM)
        (TARGET_LITTLE_NAME, elf_backend_modify_program_headers, elf32_bed):
        Redefine for FDPIC vector.
        * reloc.c: Add SH FDPIC and movi20 relocations.
        * targets.c (_bfd_target_vector): Add FDPIC vectors.
        * configure, bfd-in2.h, libbfd.h: Regenerated.

        binutils/
        * readelf.c (get_machine_flags): Handle EF_SH_PIC and EF_SH_FDPIC.

        gas/
        * config/tc-sh.c (sh_fdpic): New.
        (sh_check_fixup): Handle relocations on movi20.
        (parse_exp): Do not reject PIC operators here.
        (build_Mytes): Check for unhandled PIC operators here.  Use
        sh_check_fixup for movi20.
        (enum options): Add OPTION_FDPIC.
        (md_longopts, md_parse_option, md_show_usage): Add --fdpic.
        (sh_fix_adjustable, md_apply_fix): Handle FDPIC and movi20 relocations.
        (sh_elf_final_processing): Handle --fdpic.
        (sh_uclinux_target_format): New.
        (sh_parse_name): Handle FDPIC relocation operators.
        * config/tc-sh.h (TARGET_FORMAT): Define specially for TE_UCLINUX.
        (sh_uclinux_target_format): Declare for TE_UCLINUX.
        * configure.tgt (sh-*-uclinux* | sh[12]-*-uclinux*): Set
        em=uclinux.
        * doc/c-sh.texi (SH Options): Document --fdpic.

        gas/testsuite/
        * gas/sh/basic.exp: Run new tests.  Handle uClinux like Linux.
        * gas/sh/fdpic.d: New file.
        * gas/sh/fdpic.s: New file.
        * gas/sh/reg-prefix.d: Force big-endian.
        * gas/sh/sh2a-pic.d: New file.
        * gas/sh/sh2a-pic.s: New file.
        * lib/gas-defs.exp (is_elf_format): Include sh*-*-uclinux*.

        include/elf/
        * sh.h (EF_SH_PIC, EF_SH_FDPIC): Define.
        (R_SH_FIRST_INVALID_RELOC_6, R_SH_LAST_INVALID_RELOC_6): New.  Adjust
        other invalid ranges.
        (R_SH_GOT20, R_SH_GOTOFF20, R_SH_GOTFUNCDESC, R_SH_GOTFUNCDESC20)
        (R_SH_GOTOFFFUNCDESC, R_SH_GOTOFFFUNCDESC20, R_SH_FUNCDESC)
        (R_SH_FUNCDESC_VALUE): New.

        ld/
        * Makefile.am (ALL_EMULATIONS): Add eshelf_fd.o and eshlelf_fd.o.
        (eshelf_fd.c, eshlelf_fd.c): New rules.
        * Makefile.in: Regenerate.
        * configure.tgt (sh-*-uclinux*): Add shelf_fd and shlelf_fd
        emulations.
        * emulparams/shelf_fd.sh: New file.
        * emulparams/shlelf_fd.sh: New file.
        * emulparams/shlelf_linux.sh: Update comment.

        ld/testsuite/
        * ld-sh/sh.exp: Handle uClinux like Linux.
        * lib/ld-lib.exp (is_elf_format): Include sh*-*-uclinux*.
        * ld-sh/fdpic-funcdesc-shared.d: New file.
        * ld-sh/fdpic-funcdesc-shared.s: New file.
        * ld-sh/fdpic-funcdesc-static.d: New file.
        * ld-sh/fdpic-funcdesc-static.s: New file.
        * ld-sh/fdpic-gotfuncdesc-shared.d: New file.
        * ld-sh/fdpic-gotfuncdesc-shared.s: New file.
        * ld-sh/fdpic-gotfuncdesc-static.d: New file.
        * ld-sh/fdpic-gotfuncdesc-static.s: New file.
        * ld-sh/fdpic-gotfuncdesci20-shared.d: New file.
        * ld-sh/fdpic-gotfuncdesci20-shared.s: New file.
        * ld-sh/fdpic-gotfuncdesci20-static.d: New file.
        * ld-sh/fdpic-gotfuncdesci20-static.s: New file.
        * ld-sh/fdpic-goti20-shared.d: New file.
        * ld-sh/fdpic-goti20-shared.s: New file.
        * ld-sh/fdpic-goti20-static.d: New file.
        * ld-sh/fdpic-goti20-static.s: New file.
        * ld-sh/fdpic-gotofffuncdesc-shared.d: New file.
        * ld-sh/fdpic-gotofffuncdesc-shared.s: New file.
        * ld-sh/fdpic-gotofffuncdesc-static.d: New file.
        * ld-sh/fdpic-gotofffuncdesc-static.s: New file.
        * ld-sh/fdpic-gotofffuncdesci20-shared.d: New file.
        * ld-sh/fdpic-gotofffuncdesci20-shared.s: New file.
        * ld-sh/fdpic-gotofffuncdesci20-static.d: New file.
        * ld-sh/fdpic-gotofffuncdesci20-static.s: New file.
        * ld-sh/fdpic-gotoffi20-shared.d: New file.
        * ld-sh/fdpic-gotoffi20-shared.s: New file.
        * ld-sh/fdpic-gotoffi20-static.d: New file.
        * ld-sh/fdpic-gotoffi20-static.s: New file.
        * ld-sh/fdpic-plt-be.d: New file.
        * ld-sh/fdpic-plt-le.d: New file.
        * ld-sh/fdpic-plt.s: New file.
        * ld-sh/fdpic-plti20-be.d: New file.
        * ld-sh/fdpic-plti20-le.d: New file.
        * ld-sh/fdpic-stack-default.d: New file.
        * ld-sh/fdpic-stack-size.d: New file.
        * ld-sh/fdpic-stack.s: New file.
71 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/elf32-sh-relocs.h
bfd/elf32-sh.c
bfd/libbfd.h
bfd/reloc.c
bfd/targets.c
binutils/ChangeLog
binutils/readelf.c
gas/ChangeLog
gas/config/tc-sh.c
gas/config/tc-sh.h
gas/configure.tgt
gas/doc/c-sh.texi
gas/testsuite/ChangeLog
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/fdpic.d [new file with mode: 0644]
gas/testsuite/gas/sh/fdpic.s [new file with mode: 0644]
gas/testsuite/gas/sh/reg-prefix.d
gas/testsuite/gas/sh/sh2a-pic.d [new file with mode: 0644]
gas/testsuite/gas/sh/sh2a-pic.s [new file with mode: 0644]
gas/testsuite/lib/gas-defs.exp
include/elf/ChangeLog
include/elf/sh.h
ld/ChangeLog
ld/configure.tgt
ld/emulparams/shelf_fd.sh [new file with mode: 0644]
ld/emulparams/shlelf_fd.sh [new file with mode: 0644]
ld/emulparams/shlelf_linux.sh
ld/testsuite/ChangeLog
ld/testsuite/ld-sh/fdpic-funcdesc-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-funcdesc-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-funcdesc-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-funcdesc-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesc-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesc-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesci20-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotfuncdesci20-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-goti20-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-goti20-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-goti20-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-goti20-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesc-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesc-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotofffuncdesci20-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotoffi20-shared.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotoffi20-shared.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotoffi20-static.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-gotoffi20-static.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-plt-be.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-plt-le.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-plt.s [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-plti20-be.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-plti20-le.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-stack-default.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-stack-size.d [new file with mode: 0644]
ld/testsuite/ld-sh/fdpic-stack.s [new file with mode: 0644]
ld/testsuite/ld-sh/sh.exp
ld/testsuite/lib/ld-lib.exp