summaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-elf/secondary.rd
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 /ld/testsuite/ld-elf/secondary.rd
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 'ld/testsuite/ld-elf/secondary.rd')
-rw-r--r--ld/testsuite/ld-elf/secondary.rd5
1 files changed, 5 insertions, 0 deletions
diff --git a/ld/testsuite/ld-elf/secondary.rd b/ld/testsuite/ld-elf/secondary.rd
new file mode 100644
index 00000000000..9931c045b09
--- /dev/null
+++ b/ld/testsuite/ld-elf/secondary.rd
@@ -0,0 +1,5 @@
+Symbol table '\.symtab' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +FUNC +SECOND +DEFAULT +[0-9]+ +_?bar
+#...