From: Rich Felker Date: Tue, 26 Jan 2016 00:01:22 +0000 (-0500) Subject: move static-linked stub dlsym out of dynlink.c X-Git-Tag: v1.1.13~52 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=4058795d4938ea72a27fb3231ce52c69c7e39637;p=oweals%2Fmusl.git move static-linked stub dlsym out of dynlink.c the function name is still __-prefixed because it requires an asm wrapper to pass the caller's address in order for RTLD_NEXT to work. since this was the last function in dynlink.c still used for static linking, now the whole file is conditional on SHARED being defined. --- diff --git a/src/ldso/__dlsym.c b/src/ldso/__dlsym.c new file mode 100644 index 00000000..99aafdf9 --- /dev/null +++ b/src/ldso/__dlsym.c @@ -0,0 +1,13 @@ +#include +#include "libc.h" + +__attribute__((__visibility__("hidden"))) +void __dl_seterr(const char *, ...); + +static void *stub_dlsym(void *restrict p, const char *restrict s, void *restrict ra) +{ + __dl_seterr("Symbol not found: %s", s); + return 0; +} + +weak_alias(stub_dlsym, __dlsym); diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 43f86fa3..e328679b 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -1,3 +1,4 @@ +#ifdef SHARED #define _GNU_SOURCE #include #include @@ -23,8 +24,6 @@ static void error(const char *, ...); -#ifdef SHARED - #define MAXP2(a,b) (-(-(a)&-(b))) #define ALIGN(x,y) ((x)+(y)-1 & -(y)) @@ -1913,13 +1912,6 @@ int dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size_t size, void } return ret; } -#else -void *__dlsym(void *restrict p, const char *restrict s, void *restrict ra) -{ - error("Symbol not found: %s", s); - return 0; -} -#endif __attribute__((__visibility__("hidden"))) void __dl_vseterr(const char *, va_list); @@ -1928,7 +1920,6 @@ static void error(const char *fmt, ...) { va_list ap; va_start(ap, fmt); -#ifdef SHARED if (!runtime) { vdprintf(2, fmt, ap); dprintf(2, "\n"); @@ -1936,7 +1927,7 @@ static void error(const char *fmt, ...) va_end(ap); return; } -#endif __dl_vseterr(fmt, ap); va_end(ap); } +#endif