symbol. Check for memory allocation failure of *psinfo.
(_bfd_write_section_stabs): Add psinfo parameter. Change all
callers. Set the value of the header symbol.
* libbfd-in.h (_bfd_write_section_stabs): Update declaration.
* libbfd.h: Rebuild.
setting ever. Sanity check the version number. Sort out copying
flags and other information when adding an indirect symbol.
(NAME(bfd_elf,size_dynamic_sections)): Preserve any dynamic
symbols added by the backend. Clear the entire contents of the
versym section.
(elf_export_symbol): Ignore indirect symbols.
(elf_link_output_extsym): Accept a section without an owner in an
assert.
* elfcode.h (elf_slurp_symbol_table): Add a sanity check on the
version count. Correct the allocation of x_versymp.
* elf-bfd.h (ELF_LINK_FORCED_LOCAL): Define.
* elf.c (bfd_elf_print_symbol): Correct errors in last change.
* elflink.h (elf_link_add_object_symbols): Handle cases in which a
versioned symbol appears in both a regular and a shared object.
(elf_link_assign_sym_version): Set ELF_LINK_FORCED_LOCAL when
appropriate. Improve error message.
(struct elf_outext_info): Rename from elf_finfo_failed. Change
all uses. Add localsyms field.
(elf_bfd_final_link): When generating a shared library, call
elf_link_output_extsym to output all local symbols.
(elf_link_output_extsym): Handle symbols which were forced to
become local.
* elf-bfd.h (elf_symbol_type): Add version field.
* elfcode.h (elf_slurp_symbol_table): Set version field.
* elflink.h (elf_link_add_object_symbols): When creating an
indirect symbol for a default version symbol, set DEF_DYNAMIC if
appropriate. Set up an indirection from the nondefault version of
the symbol as well.
(NAME(bfd_elf,size_dynamic_sections)): Call
elf_link_assign_sym_version before checking whether there are any
versions. Always record the version name as a dynamic symbol.
Initialize counters.
(elf_link_assign_sym_version): After finding a version, see if a
symbol should be forced to local scope. Create a new version
definition if appropriate.
(elf_link_output_extsym): Correct indirect symbol handling.
* elf.c (bfd_elf_print_symbol): Print version information.
(bfd_section_from_shdr): Turn version sections into BFD sections.
(elf_fake_sections): Only copy cverdefs and cverrefs into sh_info
if sh_info is not already set.
(_bfd_elf_copy_private_section_data): Copy sh_info for version
sections.
* elflink.c (_bfd_elf_link_record_dynamic_symbol): Tell
_bfd_stringtab_add to copy the name into permanent memory if
appropriate.
* elflink.h (elf_link_add_archive_symbols): If a default symbol is
not found, try looking it up again without the version name.
(elf_link_add_object_symbols): Always link against the dynamic
symbol table of a dynamic object. When linking against a dynamic
object, include version strings in symbol names, and set up
version information. Add indirect symbols for default versions.
(elf_link_create_dynamic_sections): Add special version sections.
(struct elf_assign_sym_version_info): Define.
(struct elf_find_verdep_info): Define.
(NAME(bfd_elf,size_dynamic_sections)): Add verdefs parameter. Set
up version sections.
(elf_adjust_dynamic_symbol): Ignore indirect symbols.
(elf_link_find_version_dependencies): New static function.
(elf_link_assign_sym_version): New static function.
(elf_link_renumber_dynsyms): New static function.
(struct elf_final_link_info): Add symver_sec field.
(elf_bfd_final_link): Initialize finfo.symver_sec. Don't count
local symbols of a dynamic object. Handle DT_VER* constants.
(elf_link_output_extsym): Simplify BFD_ASSERT checking for a
dynamic object. Skip indirect symbols from ELF objects. Remove
the version name before choosing a hash bucket. Write out the
version information if appropriate.
(elf_link_input_bfd): Check for DYNAMIC, not ET_DYN.
* bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration.
(bfd_elf64_size_dynamic_sections): Likewise.
* bfd-in2.h: Rebuild.
* elf-bfd.h (struct elf_link_hash_entry): Add verinfo field.
Change elf_link_hash_flags to unsigned short.
(ELF_LINK_HIDDEN): Define.
(struct elf_obj_tdata): Add fields dynversym_hdr, dynverref_hdr,
dynverdef_hdr, dynversym_section, dynverdef_section,
dynverref_section, cverdefs, cverrefs, verdef, verref.
(elf_dynversym, elf_dynverdef, elf_dynverref): Define.
(_bfd_elf_swap_verdef_in, _bfd_elf_swap_verdef_out): Declare.
(_bfd_elf_swap_verdaux_in, _bfd_elf_swap_verdaux_out): Declare.
(_bfd_elf_swap_verneed_in, _bfd_elf_swap_verneed_out): Declare.
(_bfd_elf_swap_vernaux_in, _bfd_elf_swap_vernaux_out): Declare.
(_bfd_elf_swap_versym_in, _bfd_elf_swap_versym_out): Declare.
(_bfd_elf_slurp_version_tables): Declare.
* elf.c (_bfd_elf_swap_verdef_in): New function.
(_bfd_elf_swap_verdef_out): Likewise.
(_bfd_elf_swap_verdaux_in, _bfd_elf_swap_verdaux_out): Likewise.
(_bfd_elf_swap_verneed_in, _bfd_elf_swap_verneed_out): Likewise.
(_bfd_elf_swap_vernaux_in, _bfd_elf_swap_vernaux_out): Likewise.
(_bfd_elf_swap_versym_in, _bfd_elf_swap_versym_out): Likewise.
(_bfd_elf_print_private_bfd_data): Add DT_VER* constants. Print
version information if there is any.
(_bfd_elf_link_hash_newfunc): Initialize verinfo field.
(bfd_section_from_shdr): Handle SHT_GNU_ver* section types.
(elf_fake_sections): Handle .gnu.version* section names.
(assign_section_numbers): Handle SHT_GNU_ver* section types.
(_bfd_elf_slurp_version_tables): New function.
* elflink.c (_bfd_elf_link_record_dynamic_symbol): Don't include
version name in string entered in dynamic hash table.
* elfcode.h: Include fnmatch.h.
* elf32-i386.c (elf_i386_relocate_section): Handle a dynamic
symbol which was forced to become local.
* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Likewise.
symbol if the real definition is in the dynamic symbol table.
After finding the real definition, then, if it is dynamic, add the
weak symbol to the dynamic symbol table.
PR 11244.
even if SEC_ALLOC is not set.
* elf32-i386.c (elf_i386_check_relocs): Don't check SEC_ALLOC
when deciding whether to copy a reloc into a shared object.
(elf_i386_relocate_section): Likewise.
* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
(elf32_sparc_relocate_section): Likewise.
* elf32-i386.c (elf_i386_check_relocs): Don't set SEC_ALLOC in a
reloc section if it is not set in the source section.
* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
* elf.c (bfd_section_from_shdr): Mark a reloc section associated
with a SEC_DEBUGGING section as SEC_DEBUGGING.
PR 11174.
* elf.c (_bfd_elf_link_hash_newfunc): Initialize other field.
(swap_out_syms): Set st_other from existing st_other field.
* elflink.h (elf_link_add_object_symbols): Store st_other in hash
table other field.
(elf_link_output_extsym): Set the other field from the global hash
table entry.
* elf32-mips.c (enum reloc_type): Add R_MIPS16_26.
(elf_mips16_jump_howto): New static variable.
(mips16_jump_reloc): New static function.
(bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS16_JMP.
(mips_info_to_howto_rel): Handle R_MIPS16_26.
(mips_elf_relocate_section): Handle R_MIPS16_26. Handle R_MIPS_26
to a mips16 symbol.
* reloc.c (BFD_RELOC_MIPS16_JMP): Add to list of relocs.
* bfd-in2.h, libbfd.h: Rebuild.
* cpu-mips.c (arch_info_struct): Add mips:16 entry.
* bfd-in2.h: Rebuild.
* aoutx.h (NAME(aout,final_link)): Mark sections included in the
link.
(aout_link_input_bfd): Don't link unmarked sections.
* cofflink.c (_bfd_coff_final_link): Mark sections included in the
link.
(_bfd_coff_link_input_bfd): Don't link unmarked sections.
* coff-ppc.c (ppc_bfd_coff_final_link): Mark sections included in
the link.
* elflink.h (elf_bfd_final_link): Mark sections included in the
link.
(elf_link_input_bfd): Don't link unmarked sections.
* xcofflink.c (_bfd_xcoff_bfd_final_link): Mark sections included
in the link.
(xcoff_link_input_bfd): Don't link unmarked sections.
(_bfd_generic_link_add_one_symbol): Remove BFD_ASSERT on hash
table string. Use bfd_wrapped_link_hash_lookup.
(_bfd_generic_link_write_global_symbol): Remove BFD_ASSERT on hash
table string.
* aoutx.h (aout_link_write_symbols): Use the name from the hash
table, if any, when writing out symbols.
(aout_link_input_section_std): Use the name from the hash table,
if any, when reporting undefined symbols.
(aout_link_input_section_ext): Likewise.
(aout_link_reloc_link_order): Use bfd_wrapped_link_hash_lookup.
* bout.c (get_value): Likewise.
* cofflink.c (_bfd_coff_reloc_link_order): Likewise.
* ecoff.c (ecoff_reloc_link_order): Likewise.
* elflink.h (elf_link_add_object_symbols): Likewise.
(elf_reloc_link_order): Likewise.
* linker.c (_bfd_generic_link_output_symbols): Likewise.
(_bfd_generic_reloc_link_order): Likewise.
(default_indirect_link_order): Likewise.
* reloc16.c (bfd_coff_reloc16_get_value): Likewise.
* sunos.c (sunos_add_one_symbol): Likewise.
* xcofflink.c (xcoff_link_add_symbols): Likewise.
(bfd_xcoff_link_count_reloc): Likewise.
(xcoff_reloc_link_order): Likewise.
dt_name.
(elf_dt_name): Rename from elf_dt_needed_name.
* elf.c (bfd_elf_set_dt_needed_name): Use elf_dt_name, not
elf_dt_needed_name.
(bfd_elf_get_dt_soname): New function.
* elflink.h (elf_link_add_object_symbols): Use elf_dt_name, not
elf_dt_needed_name. Save the SONAME back in elf_dt_name.
* bfd-in.h (bfd_elf_get_dt_soname): Declare.
* bfd-in2.h: Rebuild.
* elf.c (_bfd_elf_link_hash_newfunc): Set elf_link_hash_flags to
ELF_LINK_NON_ELF.
* elflink.h (elf_link_add_object_symbols): Reset ELF_LINK_NON_ELF
flag for a newly defined symbol.
(NAME(bfd_elf,record_link_assignment)): Likewise.
(elf_adjust_dynamic_symbol): If ELF_LINK_NON_ELF is set, try to
set the DEF or REF_REGULAR flags correctly.
symbol or section symbols if stripping all symbols and this is not
a relocateable link. Don't output the symbol string table if
there are no symbols.
(elf_link_flush_output_syms): Don't do anything if there are no
symbols to flush.