summaryrefslogtreecommitdiff
path: root/bfd/elf64-ia64-vms.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2013-11-04 09:35:07 -0800
committerH.J. Lu <hjl.tools@gmail.com>2015-09-17 05:24:15 -0700
commitef1ce0a3648bd8d6b086bf3e05143a187d5b807f (patch)
tree9a44a8cef2bb3d6ad93906129ff6636ed624833b /bfd/elf64-ia64-vms.c
parentd78908cff50f281dab6390646fb1b7c58236d83e (diff)
downloadbinutils-gdb-ef1ce0a3648bd8d6b086bf3e05143a187d5b807f.tar.gz
Add STB_SECONDARY supportusers/hjl/secondary
STB_SECONDARY is similar to STB_WEAK. But a STB_SECONDARY definition can be overridden by STB_GLOBAL or STB_WEAK definition at link-time as well as run-time. Linker also search archive library and extract archive members to resolve defined and undefined STB_SECONDARY symbol. bfd/ * archive.c (_bfd_compute_and_write_armap): Treat BSF_SECONDARY symbol as global. * elf32-mips.c (mips_elf_sym_is_global): Likewise. * elfn32-mips.c (mips_elf_sym_is_global): Likewise. * elf.c (sym_is_global): Likewise. (swap_out_syms): Output undefined secondary symbols as weak. Output defined secondary symbols. * elf64-ia64-vms.c (elf64_vms_link_add_object_symbols): Handle secondary symbols. * elfcode.h (elf_slurp_symbol_table): Likewise. * elflink.c (_bfd_elf_merge_symbol): Add a boolean argument to indicate if the old definition is secondary. Set OLDSECONADRY if it isn't TRUE. Treat old secondary symbol as weak. Allow overriding secondary symbols. (_bfd_elf_add_default_symbol): Add a boolean argument to if the old definition is secondary. Handle the unversioned STB_SECONDARY symbol with the versioned definition. * elflink.c (is_global_data_symbol_definition): Renamed to ... (is_global_symbol_definition): This. Add an argument to ignore secondary symbols. If secondary symbols are ignored, count function and common symbols as global definition. (elf_link_is_defined_archive_symbol): Add an argument to ignore secondary symbols. Updated. (elf_link_add_object_symbols): Treat secondary symbols as weak symbols. Allow overriding secondary symbols. Pass oldsecondary to _bfd_elf_merge_symbol and _bfd_elf_add_default_symbol. (elf_link_add_archive_symbols): Keep searching if a definition is secondary. Ignore another secondary definition. Updated. (elf_link_output_extsym): Generate STB_SECONDARY symbols if needed. * linker.c (_bfd_generic_link_add_one_symbol): Treat secondary symbol as weak symbol. Mark secondary symbol. * syms.c (BSF_SECONDARY): New. (bfd_print_symbol_vandf): Handle SECONDARY symbol. (bfd_decode_symclass): Likewise. * bfd-in2.h: Regenerated. binutils/ * nm.c (filter_symbols): Treat BSF_SECONDARY symbol as global. * readelf.c (get_symbol_binding): Handle STB_SECONDARY. gas/ * symbols.c (S_IS_SECONDARY): New. (S_SET_SECONDARY): Likewise. (S_FORCE_RELOC): Handle BSF_SECONDARY like BSF_WEAK. (S_SET_EXTERNAL): Likewise. (S_CLEAR_EXTERNAL): Likewise. (S_CLEAR_WEAKREFD): Likewise. (S_SET_WEAK): Also clear BSF_SECONDARY. * symbols.h (S_IS_SECONDARY): New. (S_SET_SECONDARY): Likewise. * config/obj-elf.c (obj_elf_secondary): New. (elf_pseudo_table): Add "secondary". (obj_elf_weak): Don't set symbol weak on secondary symbol. (elf_frob_symbol): Check secondary symbol. Handle secondary symbol for .symver. Also remove the unused secondary symbol. (elf_frob_file_before_adjust): Treat secondary symbols as weak. * doc/as.texinfo: Document .secondary directive. gas/testsuite/ * gas/elf/common3.d: New file. * gas/elf/common3.l: Likewise. * gas/elf/common3.s: Likewise. * gas/elf/common4.d: Likewise. * gas/elf/common4.l: Likewise. * gas/elf/common4.s: Likewise. * gas/elf/secondary1.e: Likewise. * gas/elf/secondary1.s: Likewise. * gas/elf/secondary2.e: Likewise. * gas/elf/secondary2.s: Likewise. * gas/elf/elf.exp: Run common3, common4, secondary1 and secondary2. * gas/elf/type.s: Add .secondary tests. * gas/elf/type.e: Updated. include/ * bfdlink.h (bfd_link_hash_entry): Add secondary. (bfd_link_info): Add emit_secondary. include/elf/ * common.h (STB_SECONDARY): New. ld/ * ld.texinfo: Document "-z nosecondary". * ldmain.c (main): Initialize link_info.emit_secondary to TRUE. * lexsup.c (elf_shlib_list_options): Add "-z nosecondary". * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Set to link_info.emit_secondary to FALSE for "-z nosecondary". (gld${EMULATION_NAME}_list_options): Replace "-z secondary" with "-z nosecondary". ld/testsuite/ * ld-elf/library1.c: New file. * ld-elf/library1.out: Likewise. * ld-elf/library2.c: Likewise. * ld-elf/library2.out: Likewise. * ld-elf/library3.out: Likewise. * ld-elf/library4.out: Likewise. * ld-elf/library5a.c: Likewise. * ld-elf/library5b.c: Likewise. * ld-elf/library6a.c: Likewise. * ld-elf/library6b.c: Likewise. * ld-elf/library6c.c: Likewise. * ld-elf/library7a.c: Likewise. * ld-elf/library7b.c: Likewise. * ld-elf/library7c.c: Likewise. * ld-elf/library8.map: Likewise. * ld-elf/library8a.c: Likewise. * ld-elf/library8a.rd: Likewise. * ld-elf/library8b.c: Likewise. * ld-elf/library8b.rd: Likewise. * ld-elf/library8c.c: Likewise. * ld-elf/library8c.rd: Likewise. * ld-elf/secondary-foo.c: Likewise. * ld-elf/secondary-main.c: Likewise. * ld-elf/secondary.c: Likewise. * ld-elf/secondary.exp: Likewise. * ld-elf/secondary.rd: Likewise. * ld-elf/secondary1.out: Likewise. * ld-elf/secondary1.rd: Likewise. * ld-elf/secondary2.rd: Likewise. * ld-elf/secondary3.rd: Likewise. * ld-elf/secondary3a.s: Likewise. * ld-elf/secondary3b.s: Likewise. * ld-elf/secondary4.rd: Likewise. * ld-elf/secondary4.s: Likewise. * ld-elf/secondary5.c: Likewise. * ld-elf/secondary5.out: Likewise. * ld-elf/secondary6.c: Likewise. * ld-elf/secondary6.out: Likewise. * ld-elf/secondary7.c: Likewise. * ld-elf/secondary7.out: Likewise. * ld-elf/secondary8a.c: Likewise. * ld-elf/secondary8a.map: Likewise. * ld-elf/secondary8a.rd: Likewise. * ld-elf/secondary8b.c: Likewise. * ld-elf/secondary8b.rd: Likewise.
Diffstat (limited to 'bfd/elf64-ia64-vms.c')
-rw-r--r--bfd/elf64-ia64-vms.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c
index 4dc5363f6bc..129413358ff 100644
--- a/bfd/elf64-ia64-vms.c
+++ b/bfd/elf64-ia64-vms.c
@@ -4926,6 +4926,10 @@ error_free_dyn:
flags = BSF_WEAK;
break;
+ case STB_SECONDARY:
+ flags = BSF_SECONDARY;
+ break;
+
case STB_GNU_UNIQUE:
flags = BSF_GNU_UNIQUE;
break;