提交 4058795d 编写于 作者: R Rich Felker

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.
上级 14469371
#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);
#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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册