[PATCH][m68k] Support generation of multiple GOTs
Nick Clifton
nickc@redhat.com
Wed May 21 12:07:00 GMT 2008
Hi Maxim,
> 2008-03-27 Maxim Kuvyrkov <maxim@codesourcery.com>
>
> Multi-GOT support for m68k.
>
> bfd/
>
> * elf32-m68k.c (struct elf_m68k_link_hash_entry: got_entry_key,
> glist): New fields.
> (struct elf_m68k_got_entry_key, struct elf_m68k_got_entry,
> struct elf_m68k_got, struct elf_m68k_bfd2got_entry,
> struct elf_m68k_multi_got): New data structures.
> (struct elf_m68k_link_hash_table: local_gp_p, use_neg_got_offsets_p,
> allow_multigot_p, multi_got_): New fields.
> (elf_m68k_multi_got): New macro.
> (elf_m68k_link_hash_newfunc): Initialize new fields of
> struct elf_m68k_link_hash_entry.
> (elf_m68k_link_hash_table_create): Initialize new fields of
> struct elf_m68k_link_hash_table.
> (elf_m68k_link_hash_table_free): New static function implementing hook.
> (elf_m68k_init_got, elf_m68k_clear_got, elf_m68k_create_empty_got): New
> static functions for struct elf_m68k_got.
> (elf_m68k_init_got_entry_key, elf_m68k_got_entry_hash,
> elf_m68k_got_entry_eq): New static functions for
> struct elf_m68k_got_entry.
> (ELF_M68K_REL_8O_MAX_N_ENTRIES_IN_GOT,
> ELF_M68K_REL_8O_16O_MAX_N_ENTRIES_IN_GOT): New macros.
> (enum elf_m68k_get_entry_howto): New enum.
> (elf_m68k_get_got_entry, elf_m68k_update_got_entry_type,
> elf_m68k_remove_got_entry_type): New static functions for
> struct elf_m68k_got_entry.
> (elf_m68k_add_entry_to_got): New static function.
> (elf_m68k_bfd2got_entry_hash, elf_m68k_bfd2got_entry_eq,
> elf_m68k_bfd2got_entry_del, elf_m68k_get_bfd2got_entry): New static
> functions for struct elf_m68k_bfd2got_entry.
> (struct elf_m68k_can_merge_gots_arg, elf_m68k_can_merge_gots_1,
> elf_m68k_can_merge_gots): New traversal.
> (struct elf_m68k_merge_gots_arg, elf_m68k_merge_gots_1,
> elf_m68k_merge_gots): Ditto.
> (struct elf_m68k_finalize_got_offsets_arg,
> elf_m68k_finalize_got_offsets_1, elf_m68k_finalize_got_offsets): Ditto.
> (struct elf_m68k_partition_multi_got_arg,
> elf_m68k_partition_multi_got_1, elf_m68k_init_symndx2h_1,
> elf_m68k_partition_multi_got): Ditto.
> (elf_m68k_find_got_entry_ptr, elf_m68k_remove_got_entry): New static
> functions.
> (elf_m68k_copy_indirect_symbol): New static function implementing
> a hook.
> (elf_m68k_check_relocs): Update to add entries to multi-GOT.
> (elf_m68k_gc_sweep_hook): Update to remove entries from multi-GOT.
> (elf_m68k_always_size_sections): Assign BFDs to GOTs.
> (elf_m68k_relocate_section): Update to properly handle GOT relocations.
> (elf_m68k_finish_dynamic_symbol): Update to traverse all GOT entries
> of a global symbol.
> (bfd_elf_m68k_set_target_options): New function.
> (bfd_elf32_bfd_link_hash_table_free): Define hook.
> (bfd_elf32_bfd_final_link): Change expansion to bfd_elf_final_link
> to skip generic calculation of GOT offsets.
> (elf_backend_copy_indirect_symbol): Define hook.
>
> * bfd-in.h (bfd_elf_m68k_set_target_options): Declare function.
> * bfd-in2.h: Regenerate.
>
> ld/
>
> * configure.in (--enable-got): New option. Handle it.
> * configure: Regenerate.
> * config.in: Regenerate.
>
> * emultempl/m68kelf.em: (got_handling_target_default): New shell
> variable.
> (GOT_HANDLING_TARGET_DEFAULT): New macro.
> (GOT_HANDLING_DEFAULT): New macro. Initialize it from configure
> option if one was given.
> (got_handling): New static variable.
> (elf_m68k_create_output_section_statements): New static function
> implementing hook.
> (PARSE_AND_LIST_PROLOGUE): Define shell variable.
> (OPTION_GOT): New macro.
> (PARSE_AND_LIST_LONGOPTS): Define shell variable. Specify
> --got option.
> (got): New linker option.
> (PARSE_AND_LIST_OPTIONS): Define shell variable. Print help string
> for --got option.
> (PARSE_AND_LIST_ARGS_CASES): Define shell variable. Handle --got
> option.
>
> * ld.texinfo: Document --got=<type> option.
> * gen-doc.texi: Add M68K.
>
> ld/testsuite/
>
> * ld-m68k/got-12.s: New file.
> * ld-m68k/got-13.s: New file.
> * ld-m68k/got-14.s: New file.
> * ld-m68k/got-15.s: New file.
> * ld-m68k/got-34.s: New file.
> * ld-m68k/got-35.s: New file.
> * ld-m68k/got-single-12-ok.d: New dump test.
> * ld-m68k/got-single-13-er.d: New dump test.
> * ld-m68k/got-negative-14-ok.d: New dump test.
> * ld-m68k/got-negative-15-er.d: New dump test.
> * ld-m68k/got-negative-12-13-14-34-ok.d: New dump test.
> * ld-m68k/got-negative-12-13-14-35-er.d: New dump test.
> * ld-m68k/got-multigot-14-ok.d: New dump test.
> * ld-m68k/got-multigot-15-er.d: New dump test.
> * ld-m68k/got-multigot-12-13-14-34-35-ok.d: New dump test.
> * ld-m68k/xgot-15.s: New source.
> * ld-m68k/got-xgot-15-ok.d: New test.
> * ld-m68k/got-xgot-12-13-14-15-34-35-ok.d: New test.
> * ld-m68k/m68k.exp: Run new tests.
Approved and applied. Finally! Sorry about the very long wait to
review and apply this patch.
Cheers
Nick
More information about the Binutils
mailing list