gas: Extend .symver directive
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 21 Apr 2020 12:33:04 +0000 (05:33 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 21 Apr 2020 12:33:17 +0000 (05:33 -0700)
commit6914be53bd662eefd979d0c82d2e20e108c4ee66
tree1ae1bebd08fc216bb92d2deb38e21408776a1f87
parent6f6fd151cbf226bbaa66e44977f57b7c6dc33d89
gas: Extend .symver directive

Extend .symver directive to update visibility of the original symbol and
assign one original symbol to different versioned symbols:

  .symver foo, foo@VERS_1, local    # Change foo to a local symbol.
  .symver foo, foo@VERS_2, hidden   # Change foo to a hidden symbol.
  .symver foo, foo@@VERS_3, remove  # Remove foo from symbol table.
  .symver foo, bar@V1               # Assign foo to bar@V1 and baz@V2.
  .symver foo, baz@V2

PR gas/23840
PR gas/25295
* NEWS: Mention .symver extension.
* config/obj-elf.c (obj_elf_find_and_add_versioned_name): New
function.
(obj_elf_symver): Call obj_elf_find_and_add_versioned_name to
add a version name.  Add local, hidden and remove visibility
support.
(elf_frob_symbol): Handle the list of version names.  Update the
original symbol to local, hidden or remove it from the symbol
table.
(elf_frob_file_before_adjust): Handle the list of version names.
* config/obj-elf.h (elf_visibility): New.
(elf_versioned_name_list): Likewise.
(elf_obj_sy): Change local to bitfield. Add rename, bad_version
and visibility.  Change versioned_name pointer to struct
elf_versioned_name_list.
* doc/as.texi: Update .symver directive.
* testsuite/gas/symver/symver.exp: Run all *.d tests.  Add more
error checking tests.
* testsuite/gas/symver/symver6.d: New file.
* testsuite/gas/symver/symver7.d: Likewise.
* testsuite/gas/symver/symver7.s: Likewise.
* testsuite/gas/symver/symver8.d: Likewise.
* testsuite/gas/symver/symver8.s: Likewise.
* testsuite/gas/symver/symver9.s: Likewise.
* testsuite/gas/symver/symver9a.d: Likewise.
* testsuite/gas/symver/symver9b.d: Likewise.
* testsuite/gas/symver/symver10.s: Likewise.
* testsuite/gas/symver/symver10a.d: Likewise.
* testsuite/gas/symver/symver10b.d: Likewise.
* testsuite/gas/symver/symver11.d: Likewise.
* testsuite/gas/symver/symver11.s: Likewise.
* testsuite/gas/symver/symver12.d: Likewise.
* testsuite/gas/symver/symver12.s: Likewise.
* testsuite/gas/symver/symver13.d: Likewise.
* testsuite/gas/symver/symver13.s: Likewise.
* testsuite/gas/symver/symver14.d: Likewise.
* testsuite/gas/symver/symver14.l: Likewise.
* testsuite/gas/symver/symver15.d: Likewise.
* testsuite/gas/symver/symver15.l: Likewise.
* testsuite/gas/symver/symver6.l: Removed.
* testsuite/gas/symver/symver6.s: Updated.
29 files changed:
gas/ChangeLog
gas/NEWS
gas/config/obj-elf.c
gas/config/obj-elf.h
gas/doc/as.texi
gas/testsuite/gas/symver/symver.exp
gas/testsuite/gas/symver/symver10.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver10a.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver10b.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver11.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver11.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver12.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver12.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver13.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver13.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver14.l [new file with mode: 0644]
gas/testsuite/gas/symver/symver14.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver15.l [new file with mode: 0644]
gas/testsuite/gas/symver/symver15.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver6.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver6.l [deleted file]
gas/testsuite/gas/symver/symver6.s
gas/testsuite/gas/symver/symver7.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver7.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver8.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver8.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver9.s [new file with mode: 0644]
gas/testsuite/gas/symver/symver9a.d [new file with mode: 0644]
gas/testsuite/gas/symver/symver9b.d [new file with mode: 0644]