.symver fixes

* config/obj-elf.c (elf_frob_symbol): Unconditionally remove
	symbol for ".symver .. remove".
	* doc/as.texi (.symver): Update.
	* testsuite/gas/symver/symver11.s: Make foo weak.
	* testsuite/gas/symver/symver11.d: Expect an error.
	* testsuite/gas/symver/symver7.d: Allow other random symbols.
This commit is contained in:
Alan Modra 2020-04-22 11:52:13 +09:30
parent 54ac3df1ad
commit 31c89d6038
6 changed files with 16 additions and 15 deletions

View File

@ -1,3 +1,12 @@
2020-04-22 Alan Modra <amodra@gmail.com>
* config/obj-elf.c (elf_frob_symbol): Unconditionally remove
symbol for ".symver .. remove".
* doc/as.texi (.symver): Update.
* testsuite/gas/symver/symver11.s: Make foo weak.
* testsuite/gas/symver/symver11.d: Expect an error.
* testsuite/gas/symver/symver7.d: Allow other random symbols.
2020-04-21 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/gas/symver/symver11.s: Add ".balign 8".

View File

@ -2569,9 +2569,7 @@ elf_frob_symbol (symbolS *symp, int *puntp)
elfsym->internal_elf_sym.st_other |= STV_HIDDEN;
break;
case visibility_remove:
/* Remove the symbol if it isn't used in relocation. */
if (!symbol_used_in_reloc_p (symp))
symbol_remove (symp, &symbol_rootP, &symbol_lastP);
symbol_remove (symp, &symbol_rootP, &symbol_lastP);
break;
case visibility_local:
S_CLEAR_EXTERNAL (symp);

View File

@ -7129,13 +7129,12 @@ building a shared library. If you are attempting to override a versioned
symbol from a shared library, then @var{nodename} should correspond to the
nodename of the symbol you are trying to override. The optional argument
@var{visibility} updates the visibility of the original symbol. The valid
visibilities are @code{local}, @code {hidden}, and @code {remove}. The
visibilities are @code{local}, @code{hidden}, and @code{remove}. The
@code{local} visibility makes the original symbol a local symbol
(@pxref{Local}). The @code{hidden} visibility sets the visibility of the
original symbol to @code{hidden} (@pxref{Hidden}). The @code{remove}
visibility removes the original symbol from the symbol table if it isn't
used in relocation. If visibility isn't specified, the original symbol
is unchanged.
visibility removes the original symbol from the symbol table. If visibility
isn't specified, the original symbol is unchanged.
If the symbol @var{name} is not defined within the file being assembled, all
references to @var{name} will be changed to @var{name2@@nodename}. If no

View File

@ -1,8 +1,2 @@
#readelf: -rsW
#name: symver symver11
#...
[0-9a-f]+ +[0-9a-f]+ +R_.* +[0-9a-f]+ +foo *.*
#...
+[0-9]+: +0+ +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo
#pass
#error: .*symbol cannot be used on reloc

View File

@ -1,5 +1,5 @@
.data
.globl foo
.weak foo
.type foo,%object
foo:
.byte 0

View File

@ -3,6 +3,7 @@
#...
+[0-9]+: +0+ +1 +OBJECT +GLOBAL +HIDDEN +[0-9]+ +foo
#...
+[0-9]+: +0+ +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo@version1
+[0-9]+: +0+ +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo@@version2
#pass