diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2013-11-04 09:35:07 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-09-17 05:24:15 -0700 |
commit | ef1ce0a3648bd8d6b086bf3e05143a187d5b807f (patch) | |
tree | 9a44a8cef2bb3d6ad93906129ff6636ed624833b /ld/testsuite/ld-elf/secondary.rd | |
parent | d78908cff50f281dab6390646fb1b7c58236d83e (diff) | |
download | binutils-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.rd | 5 |
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 +#... |