build: Add a new libbsd_strong_alias() macro and switch users to it

We had several cases of code needing a strong alias, so we switch those
to use the new macro. This covers systems that support the alias
attribute and others such as macOS where we need to use assembler
directives to add the alias as the attribute is not supported.
This commit is contained in:
Guillem Jover 2023-04-02 22:33:25 +02:00
parent 49c7dd1ca4
commit e0976d7e90
2 changed files with 13 additions and 5 deletions

View File

@ -37,6 +37,16 @@
#define libbsd_link_warning(symbol, msg)
#endif
#if defined(__APPLE__)
#define libbsd_strong_alias(alias, symbol) \
__asm__(".globl _" #alias); \
__asm__(".set _" #alias ", _" #symbol); \
extern __typeof(symbol) alias
#elif !defined(_MSC_VER)
#define libbsd_strong_alias(alias, symbol) \
extern __typeof__(symbol) alias __attribute__((__alias__(#symbol)))
#endif
#ifdef __ELF__
# if __has_attribute(symver)
/* The symver attribute is supported since gcc 10.x. */
@ -64,7 +74,7 @@
# endif
#else
#define libbsd_symver_default(alias, symbol, version) \
extern __typeof__(symbol) alias __attribute__((__alias__(#symbol)))
libbsd_strong_alias(alias, symbol)
#define libbsd_symver_variant(alias, symbol, version)

View File

@ -295,10 +295,8 @@ libbsd_symver_default(setproctitle, setproctitle_impl, LIBBSD_0.5);
* in 0.5, make the implementation available in the old version as an alias
* for code linking against that version, and change the default to use the
* new version, so that new code depends on the implemented version. */
#ifdef HAVE_TYPEOF
extern __typeof__(setproctitle_impl)
setproctitle_stub
__attribute__((__alias__("setproctitle_impl")));
#if defined(libbsd_strong_alias)
libbsd_strong_alias(setproctitle_stub, setproctitle_impl);
#else
void
setproctitle_stub(const char *fmt, ...)