summaryrefslogtreecommitdiff
path: root/src/ldso
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2016-01-25 19:01:22 -0500
committerRich Felker <dalias@aerifal.cx>2016-01-25 19:04:45 -0500
commit4058795d4938ea72a27fb3231ce52c69c7e39637 (patch)
tree4700c69e4af658e33ab0da78b4252fa69cff2bb8 /src/ldso
parent14469371cd1efd2be44f0825fec9ad8bb3216da9 (diff)
downloadmusl-4058795d4938ea72a27fb3231ce52c69c7e39637.tar.gz
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.
Diffstat (limited to 'src/ldso')
-rw-r--r--src/ldso/__dlsym.c13
-rw-r--r--src/ldso/dynlink.c13
2 files changed, 15 insertions, 11 deletions
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 <dlfcn.h>
+#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 <stdio.h>
#include <stdlib.h>
@@ -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