use @@@ instead of @@ in __sym_default

Using
    .symver foo,foo@@VER
causes foo and foo@@VER to be output to the .o file. This requires foo
to be weak since the linker handles foo@@VER as foo.

Using
    .symver foo,foo@@@VER
causes just foo@@ver to be output and avoid the need for making foo
weak. It also reduces the constraint on how exactly a linker has to
handle foo and foo@@VER being present.

Submitted by:	Rafael Espíndola
Reviewed by:	dim, kib
Differential Revision:	https://reviews.freebsd.org/D11653
This commit is contained in:
Ed Maste 2017-12-05 20:19:13 +00:00
parent ca94a1c6ca
commit 19164ee6cd
4 changed files with 2 additions and 5 deletions

View File

@ -43,7 +43,6 @@ __sym_compat(openat, __impl_openat, FBSD_1.1);
__weak_reference(openat, __impl_openat); __weak_reference(openat, __impl_openat);
__sym_default(openat, openat, FBSD_1.2); __sym_default(openat, openat, FBSD_1.2);
#pragma weak openat
int int
openat(int fd, const char *path, int flags, ...) openat(int fd, const char *path, int flags, ...)
{ {

View File

@ -42,7 +42,6 @@ __sym_compat(setcontext, __impl_setcontext, FBSD_1.0);
__weak_reference(setcontext, __impl_setcontext); __weak_reference(setcontext, __impl_setcontext);
__sym_default(setcontext, setcontext, FBSD_1.2); __sym_default(setcontext, setcontext, FBSD_1.2);
#pragma weak setcontext
int int
setcontext(const ucontext_t *uc) setcontext(const ucontext_t *uc)
{ {

View File

@ -43,7 +43,6 @@ __sym_compat(swapcontext, __impl_swapcontext, FBSD_1.0);
__weak_reference(swapcontext, __impl_swapcontext); __weak_reference(swapcontext, __impl_swapcontext);
__sym_default(swapcontext, swapcontext, FBSD_1.2); __sym_default(swapcontext, swapcontext, FBSD_1.2);
#pragma weak swapcontext
int int
swapcontext(ucontext_t *oucp, const ucontext_t *ucp) swapcontext(ucontext_t *oucp, const ucontext_t *ucp)
{ {

View File

@ -551,7 +551,7 @@
#define __sym_compat(sym,impl,verid) \ #define __sym_compat(sym,impl,verid) \
__asm__(".symver " #impl ", " #sym "@" #verid) __asm__(".symver " #impl ", " #sym "@" #verid)
#define __sym_default(sym,impl,verid) \ #define __sym_default(sym,impl,verid) \
__asm__(".symver " #impl ", " #sym "@@" #verid) __asm__(".symver " #impl ", " #sym "@@@" #verid)
#else #else
#define __weak_reference(sym,alias) \ #define __weak_reference(sym,alias) \
__asm__(".weak alias"); \ __asm__(".weak alias"); \
@ -563,7 +563,7 @@
#define __sym_compat(sym,impl,verid) \ #define __sym_compat(sym,impl,verid) \
__asm__(".symver impl, sym@verid") __asm__(".symver impl, sym@verid")
#define __sym_default(impl,sym,verid) \ #define __sym_default(impl,sym,verid) \
__asm__(".symver impl, sym@@verid") __asm__(".symver impl, sym@@@verid")
#endif /* __STDC__ */ #endif /* __STDC__ */
#endif /* __GNUC__ || __INTEL_COMPILER */ #endif /* __GNUC__ || __INTEL_COMPILER */