* bfd/elf-hppa.h (elf_hppa_is_dynamic_loader_symbol): New function.
(elf_hppa_relocate_section): Ignore undefined dynamic loader symbols.
(elf_hppa_final_link_relocate): Correct relocations for indirect
references to local data through the DLT. Fix .opd creation for
local symbols using R_PARISC_LTOFF_FPTR32 and R_PARISC_FPTR64
relocations. Use e_lsel selector for R_PARISC_DLTIND21L,
R_PARISC_LTOFF_FPTR21L and R_PARISC_LTOFF_TP21L as per
"Processor-Specific ELF for PA_RISC, Version 1.43" document.
Similarly, use e_rsel for DLT and LTOFF 'R' relocations.
* bfd/elf32-hppa.c (final_link_relocate): Revise relocation selectors
as per "Processor-Specific ELF for PA_RISC, Version 1.43" document.
to output forced local syms for non-shared link.
(elf_link_output_extsym): Tweak condition for calling backend
adjust_dynamic_symbol so that previous behaviour is kept.
* elf.c (bfd_section_from_shdr): Handle special sections,
.init_array, .fini_array and .preinit_array.
(elf_fake_sections): Likewise.
* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Create the
DT entry only if the section is in output for .init_array,
.fini_array and .preinit_array. Complain about .preinit_array
section in DSO.
(elf_bfd_final_link): Warn zero size for .init_array,
.fini_array and .preinit_array sections.
* elfxx-ia64.c (elfNN_ia64_section_from_shdr): Remove
SHT_INIT_ARRAY, SHT_FINI_ARRAY and SHT_PREINIT_ARRAY.
(elfNN_ia64_fake_sections): Remove .init_array, .fini_array and
.preinit_array.
".preinit_array" exists, create DT_PREINIT_ARRAY and
DT_PREINIT_ARRAYSZ entries in dynamic table. Analogously for
".init_array" and ".fini_array".
(elf_bfd_final_link): Handle DT_PREINIT_ARRAYSZ, DT_INIT_ARRAYSZ,
DT_FINI_ARRAYSZ, DT_PREINIT_ARRAY, DT_INIT_ARRAY, and
DT_FINI_ARRAY.
to the x86-64 backend. Get a closer match to elf32-i386.
(struct elf64_x86_64_dyn_relocs): Rename from
elf64_x86_64_pcrel_relocs_copied, add additional fields. Change
all users.
(struct elf64_x86_64_link_hash_table): Add short cuts to some
sections.
(link_hash_newfunc): Rename from elf64_x86_64_link_hash_newfunc,
remove casts, initialize new hash members.
(create_got_section): New.
(elf64_x86_64_create_dynamic_sections): New.
(elf64_x86_64_copy_indirect_symbol): New.
(elf64_x86_64_check_relocs): Don't allocate space for dynamic
relocs, .got or .relgot here but do it in allocate_dynrelocs.
Reference count possible .plt and .got entries. Don't test input
section SEC_READONLY here to try to avoid copy relocs, and keep
dyn_relocs regardless of ELF_LINK_NON_GOT_REF. Don't set
DF_TEXTREL here. Delay setting of variables until needed. Cache
pointer to "sreloc" section in elf_section_data. Tweak condition
under which .got created. Report files with bad relocation
section names.
(elf64_x86_64_gc_sweep_hook): Sweep dyn_relocs and local_dynrel.
Reference count possible .plt entries. Don't deallocate .got and
.relgot space here.
(elf64_x86_64_adjust_dynamic_symbol): Handle nocopyreloc. Don't
do copy reloc processing for weakdefs. Remove redundant casts and
aborts. Delay setting of vars until needed. Move creation of
dynamic symbols and allocation of .plt and .rela.plt to
allocate_dynrelocs. Replace BFD_ASSERT with abort.
(WILL_CALL_FINISH_DYNAMIC_SYMBOL): New.
(allocate_dynrelocs): New.
(readonly_dynrelocs): New.
(elf64_x86_64_size_dynamic_sections): Call readonly_dynrelocs.
Allocate space for dyn relocs. Replace BFD_ASSERT with abort.
Zero out the dynamic allocated content space.
(elf64_x86_64_discard_copies): Removed.
(elf64_x86_64_relocate_section): Make use of dynamic section
short-cuts. Localise vars, and delay setting. Better error
reporting, replace BFD_ASSERT with abort. Check
ELF_LINK_HASH_DEF_DYNAMIC to see if a symbol is not defined in the
regular object file and tread the weak definition as the normal
one. Don't discard relocs for undefweak or undefined symbols and
check !DEF_REGULAR as well as DEF_DYNAMIC in test for avoided copy
relocs.
(elf64_x86_64_finish_dynamic_symbol): Don't copy relocs for
symbols that have been forced local. Use same test to decide if
we can use a relative reloc for got as relocate_section. Expand
SHN_UNDEF comment. Move expressions out of function calls.
Replace BFD_ASSERT with abort.
(bfd_elf64_bfd_final_link): Removed.
(elf_backend_copy_indirect_symbol): Define.
(struct ppc_link_hash_table): Add sfpr.
(ppc64_elf_link_hash_table_create): Init it.
(ppc64_elf_create_dynamic_sections): Split creation of .stub and
.glink out to..
(create_linkage_sections): ..here. Make .sfpr too.
(ppc64_elf_check_relocs): Call create_linkage_sections, and set
dynobj early.
(MIN_SAVE_FPR, MAX_SAVE_FPR): Define.
(ppc64_elf_func_desc_adjust): Look for missing ._savef* and
._restf* functions, and create as needed.
(func_desc_adjust): Only force_local for shared libs.
* emulparams/elf64ppc.sh (OTHER_TEXT_SECTIONS): Define.
(mmo_write_chunk): Store trailing byte in bfd buffer; don't
zero-pad. Use input to fill up non-empty bfd buffer.
(mmo_flush_chunk): New function.
(mmo_write_loc_chunk): Add parameter last_vmap, all callers
changed. Don't emit location specifier if VMA is same as
*LAST_VMAP after omitting leading zero contents. Call
mmo_flush_chunk before emitting location specifier.
(mmo_write_loc_chunk_list): Call mmo_flush_chunk when finished
with mmo_write_loc_chunk calls.
(mmo_internal_write_section): Call mmo_flush_chunk after
mmo_write_chunk.
(mmo_write_symbols_and_terminator): Move :Main to first position
in symbol array. Add faked one if it does not exist if there are
other symbols. Don't add it if there are no symbols at all. Move
out test for value of :Main from symbol loop. Rename table
fakemain to maintable and variable mainsym to fakemain.