summaryrefslogtreecommitdiff
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2009-04-03 19:17:23 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2009-04-03 19:17:23 +0000
commitc8da4f07d763e3bb6769ab4b7cb83774ecbac824 (patch)
tree49cd2d7fe74d5b0bb669f8057c2e879c1c85b348 /libexec/rtld-elf
parent6437e6da3db4d9a55c572362d4ce0aa78fe191c1 (diff)
Notes
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r--libexec/rtld-elf/Symbol.map1
-rw-r--r--libexec/rtld-elf/rtld.c14
2 files changed, 15 insertions, 0 deletions
diff --git a/libexec/rtld-elf/Symbol.map b/libexec/rtld-elf/Symbol.map
index 20f8d60f3611..ce1e3e5f2b35 100644
--- a/libexec/rtld-elf/Symbol.map
+++ b/libexec/rtld-elf/Symbol.map
@@ -8,6 +8,7 @@ FBSD_1.0 {
dlerror;
dlopen;
dlsym;
+ dlfunc;
dlvsym;
dladdr;
dllockinit;
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 07529b3091cf..40ed6edc3b16 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -200,6 +200,7 @@ static func_ptr_type exports[] = {
(func_ptr_type) &dlerror,
(func_ptr_type) &dlopen,
(func_ptr_type) &dlsym,
+ (func_ptr_type) &dlfunc,
(func_ptr_type) &dlvsym,
(func_ptr_type) &dladdr,
(func_ptr_type) &dllockinit,
@@ -2170,6 +2171,19 @@ dlsym(void *handle, const char *name)
SYMLOOK_DLSYM);
}
+dlfunc_t
+dlfunc(void *handle, const char *name)
+{
+ union {
+ void *d;
+ dlfunc_t f;
+ } rv;
+
+ rv.d = do_dlsym(handle, name, __builtin_return_address(0), NULL,
+ SYMLOOK_DLSYM);
+ return (rv.f);
+}
+
void *
dlvsym(void *handle, const char *name, const char *version)
{