elf_backend_copy_indirect_symbol so that backend has a chance to
copy other necessary fields.
* elf-bfd.h (struct elf_backend_data): Update description of
elf_backend_copy_indirect_symbol.
* elf.c (_bfd_elf_link_hash_copy_indirect): Bail out after
copying flags if this is a weakdef.
* elfxx-ia64.c (elfNN_ia64_hash_copy_indirect): Likewise.
(elfNN_ia64_aix_add_symbol_hook): Use elf_link_hash_lookup rather
than bfd_link_hash_lookup.
* elf32-i386 (elf_i386_adjust_dynamic_symbol): Don't do copy
reloc processing for weakdefs.
* elf32-hppa.c (elf32_hppa_adjust_dynamic_symbol): Likewise.
* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
result of ELF64_R_TYPE to enum before using in a switch.
(ppc64_elf_gc_mark_hook): Likewise.
(ppc64_elf_gc_sweep_hook): Likewise.
(ppc64_elf_reloc_type_class): Likewise.
(IS_ABSOLUTE_RELOC): Define.
(struct ppc_link_hash_entry): New.
(struct ppc_link_hash_table): New.
(ppc_hash_table): Define.
(link_hash_newfunc): New function.
(ppc64_elf_link_hash_table_create): New function.
(create_got_section): New function.
(ppc64_elf_create_dynamic_sections): Call create_got_section. Stash
pointers to our dynamic sections in hash table.
(ppc64_elf_copy_indirect_symbol): New function.
(ppc64_elf_check_relocs): Remove DEBUG code. Use short-cuts to
dynamic sections. Localise vars. Modify code for refcounts
starting from zero. Don't allocate here, or force symbols dynamic.
Don't copy all relocs if shared, select ones we need. Add code
to track possible copy relocs for non-shared link.
(ppc64_elf_gc_mark_hook): Update comment.
(ppc64_elf_gc_sweep_hook): Sweep dynrelocs too.
(ppc64_elf_adjust_dynamic_symbol): Remove DEBUG code. Rewrite .plt
code for reference counting garbage collection. Don't create .plt
entries for functions that don't comply with ABI naming convention,
and don't allocate .plt space here. Use short-cuts to dynamic
sections. If possible, keep dynamic relocations instead of using
copy relocs. Remove confused comments.
(ppc_adjust_dynindx): Delete.
(WILL_CALL_FINISH_DYNAMIC_SYMBOL): Define.
(allocate_dynrelocs): New function.
(readonly_dynrelocs): New function.
(ppc64_elf_size_dynamic_sections): Rewrite. Allocate local .got
space here, and call allocate_dynrelocs to allocate space for
global .plt, .got and reloc sections. Use short-cuts to dynamic
sections. Call readonly_dynrelocs to determine whether we need
DT_TEXTREL. Don't generate section symbols here, the generic
ELF linker code does it for us.
(ppc64_elf_final_link): Call regular ELF backend linker rather than
gc variety, since we do our own .got handling.
(ppc64_elf_relocate_section): Remove DEBUG code. Make use of
dynamic section short-cuts. Localise vars, and delay setting.
Handle unknown relocs in main switch statement. Replace ugly
complicated tests for unresolvable relocs with a simple direct
scheme using "unresolved_reloc" var. Test ELF_ST_VISIBILITY
before allowing an undefined sym in a shared lib. Do R_*_DS tests
after main switch, when we've set addend. Do non-addend insn
tweaks before main swithc. Ignore input_section->vma when
calculating reloc offsets as it's always zero. Rewrite dynamic
reloc handling. Consolidate R_*_HA handling. Handle more relocs.
(ppc64_elf_finish_dynamic_symbol): Remove DEBUG code. Make use
of dynamic section short-cuts. Reorganise .plt handling code.
Remove confused comments. Take note of ELF_LINK_FORCED_LOCAL.
Move expressions out of swap_reloca_out function calls.
(ppc64_elf_reloc_type_class): New function.
(ppc64_elf_info_to_howto): Move common expression to local var.
(ppc64_elf_finish_dynamic_sections): Remove DEBUG code. Make use
of dynamic section short-cuts. Don't fiddle with section syms
here as the ELF linker does it for us.
(elf_backend_can_refcount): Define.
(bfd_elf64_bfd_link_hash_table_create): Define.
(elf_backend_copy_indirect_symbol): Define.
(elf_backend_reloc_type_class): Define.
(elf_backend_*, bfd_elf64_bfd_* defines): Sort.
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.