mirror of
https://gitlab.freedesktop.org/libbsd/libbsd.git
synced 2025-02-13 22:51:53 +01:00
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:
parent
49c7dd1ca4
commit
e0976d7e90
@ -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)
|
||||
|
||||
|
@ -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, ...)
|
||||
|
Loading…
x
Reference in New Issue
Block a user