Page MenuHomeFreeBSD

D11504.id30505.diff
No OneTemporary

D11504.id30505.diff

Index: contrib/mdocml/lib.in
===================================================================
--- contrib/mdocml/lib.in
+++ contrib/mdocml/lib.in
@@ -46,6 +46,7 @@
LINE("libdevinfo", "Device and Resource Information Utility Library (libdevinfo, \\-ldevinfo)")
LINE("libdevstat", "Device Statistics Library (libdevstat, \\-ldevstat)")
LINE("libdisk", "Interface to Slice and Partition Labels Library (libdisk, \\-ldisk)")
+LINE("libdl", "Dynamic Linker Services Filter (libdl, \\-ldl)")
LINE("libdm", "Device Mapper Library (libdm, \\-ldm)")
LINE("libdwarf", "DWARF Access Library (libdwarf, \\-ldwarf)")
LINE("libedit", "Command Line Editor Library (libedit, \\-ledit)")
Index: lib/Makefile
===================================================================
--- lib/Makefile
+++ lib/Makefile
@@ -40,6 +40,7 @@
libdevctl \
libdevinfo \
libdevstat \
+ libdl \
libdwarf \
libedit \
libevent \
Index: lib/libc/gen/dlfcn.c
===================================================================
--- lib/libc/gen/dlfcn.c
+++ lib/libc/gen/dlfcn.c
@@ -27,6 +27,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#if !defined(IN_LIBDL) || defined(PIC)
+
/*
* Linkage to services provided by the dynamic linker.
*/
@@ -57,95 +59,107 @@
#pragma weak _rtld_error
void
-_rtld_error(const char *fmt, ...)
+_rtld_error(const char *fmt __unused, ...)
{
}
#pragma weak dladdr
int
-dladdr(const void *addr, Dl_info *dlip)
+dladdr(const void *addr __unused, Dl_info *dlip __unused)
{
+
_rtld_error(sorry);
- return 0;
+ return (0);
}
#pragma weak dlclose
int
-dlclose(void *handle)
+dlclose(void *handle __unused)
{
+
_rtld_error(sorry);
- return -1;
+ return (-1);
}
#pragma weak dlerror
char *
dlerror(void)
{
- return sorry;
+
+ return (sorry);
}
#pragma weak dllockinit
void
dllockinit(void *context,
- void *(*lock_create)(void *context),
- void (*rlock_acquire)(void *lock),
- void (*wlock_acquire)(void *lock),
- void (*lock_release)(void *lock),
- void (*lock_destroy)(void *lock),
- void (*context_destroy)(void *context))
+ void *(*lock_create)(void *context) __unused,
+ void (*rlock_acquire)(void *lock) __unused,
+ void (*wlock_acquire)(void *lock) __unused,
+ void (*lock_release)(void *lock) __unused,
+ void (*lock_destroy)(void *lock) __unused,
+ void (*context_destroy)(void *context) __unused)
{
+
if (context_destroy != NULL)
context_destroy(context);
}
#pragma weak dlopen
void *
-dlopen(const char *name, int mode)
+dlopen(const char *name __unused, int mode __unused)
{
+
_rtld_error(sorry);
- return NULL;
+ return (NULL);
}
#pragma weak dlsym
void *
-dlsym(void * __restrict handle, const char * __restrict name)
+dlsym(void * __restrict handle __unused, const char * __restrict name __unused)
{
+
_rtld_error(sorry);
- return NULL;
+ return (NULL);
}
#pragma weak dlfunc
dlfunc_t
-dlfunc(void * __restrict handle, const char * __restrict name)
+dlfunc(void * __restrict handle __unused, const char * __restrict name __unused)
{
+
_rtld_error(sorry);
- return NULL;
+ return (NULL);
}
#pragma weak dlvsym
void *
-dlvsym(void * __restrict handle, const char * __restrict name,
- const char * __restrict version)
+dlvsym(void * __restrict handle __unused, const char * __restrict name __unused,
+ const char * __restrict version __unused)
{
+
_rtld_error(sorry);
- return NULL;
+ return (NULL);
}
#pragma weak dlinfo
int
-dlinfo(void * __restrict handle, int request, void * __restrict p)
+dlinfo(void * __restrict handle __unused, int request __unused,
+ void * __restrict p __unused)
{
+
_rtld_error(sorry);
- return 0;
+ return (0);
}
#pragma weak _rtld_thread_init
void
-_rtld_thread_init(void * li)
+_rtld_thread_init(void *li __unused)
{
+
_rtld_error(sorry);
}
+#ifndef IN_LIBDL
static pthread_once_t dl_phdr_info_once = PTHREAD_ONCE_INIT;
static struct dl_phdr_info phdr_info;
@@ -181,44 +195,50 @@
}
phdr_info.dlpi_adds = 1;
}
+#endif
#pragma weak dl_iterate_phdr
int
-dl_iterate_phdr(int (*callback)(struct dl_phdr_info *, size_t, void *),
- void *data)
+dl_iterate_phdr(int (*callback)(struct dl_phdr_info *, size_t, void *) __unused,
+ void *data __unused)
{
+#ifndef IN_LIBDL
__init_elf_aux_vector();
if (__elf_aux_vector == NULL)
return (1);
_once(&dl_phdr_info_once, dl_init_phdr_info);
return (callback(&phdr_info, sizeof(phdr_info), data));
+#else
+ return (0);
+#endif
}
#pragma weak fdlopen
void *
-fdlopen(int fd, int mode)
+fdlopen(int fd __unused, int mode __unused)
{
_rtld_error(sorry);
- return NULL;
+ return (NULL);
}
#pragma weak _rtld_atfork_pre
void
-_rtld_atfork_pre(int *locks)
+_rtld_atfork_pre(int *locks __unused)
{
}
#pragma weak _rtld_atfork_post
void
-_rtld_atfork_post(int *locks)
+_rtld_atfork_post(int *locks __unused)
{
}
#pragma weak _rtld_addr_phdr
int
-_rtld_addr_phdr(const void *addr, struct dl_phdr_info *phdr_info)
+_rtld_addr_phdr(const void *addr __unused,
+ struct dl_phdr_info *phdr_info_a __unused)
{
return (0);
@@ -234,8 +254,10 @@
#pragma weak _rtld_is_dlopened
int
-_rtld_is_dlopened(void *arg)
+_rtld_is_dlopened(void *arg __unused)
{
return (0);
}
+
+#endif /* !defined(IN_LIBDL) || defined(PIC) */
Index: lib/libc/gen/dlopen.3
===================================================================
--- lib/libc/gen/dlopen.3
+++ lib/libc/gen/dlopen.3
@@ -32,7 +32,7 @@
.\" @(#) dlopen.3 1.6 90/01/31 SMI
.\" $FreeBSD$
.\"
-.Dd February 14, 2015
+.Dd July 7, 2017
.Dt DLOPEN 3
.Os
.Sh NAME
@@ -377,6 +377,14 @@
for symbols defined in the executable to become visible to
.Fn dlsym .
.Pp
+Other ELF platforms require linking with
+.Lb libdl
+to provide
+.Fn dlopen
+and other functions.
+.Fx
+does not require linking with the library, but supports it for compatibility.
+.Pp
In previous implementations, it was necessary to prepend an underscore
to all external symbols in order to gain symbol
compatibility with object code compiled from the C language.
Index: lib/libdl/Makefile
===================================================================
--- /dev/null
+++ lib/libdl/Makefile
@@ -0,0 +1,15 @@
+# $FreeBSD$
+
+LIB=dl
+SHLIB_MAJOR=1
+
+.PATH: ${SRCTOP}/lib/libc/gen
+CFLAGS+=-I${SRCTOP}/lib/libc/include
+CFLAGS+=-DIN_LIBDL
+LDFLAGS+=-Wl,--filter=libc.so.7
+VERSION_DEF=${SRCTOP}/lib/libc/Versions.def
+SYMBOL_MAPS=${.CURDIR}/Symbol.map
+
+SRCS = dlfcn.c
+
+.include <bsd.lib.mk>
Index: lib/libdl/Symbol.map
===================================================================
--- /dev/null
+++ lib/libdl/Symbol.map
@@ -0,0 +1,20 @@
+/*
+ * $FreeBSD$
+ */
+
+FBSD_1.0 {
+ dladdr;
+ dlclose;
+ dlerror;
+ dlfunc;
+ dlopen;
+ dlsym;
+ dlvsym;
+ dlinfo;
+ dl_iterate_phdr;
+};
+
+
+FBSD_1.3 {
+ fdlopen;
+};
Index: share/mk/bsd.libnames.mk
===================================================================
--- share/mk/bsd.libnames.mk
+++ share/mk/bsd.libnames.mk
@@ -56,6 +56,7 @@
LIBDEVINFO?= ${LIBDESTDIR}${LIBDIR_BASE}/libdevinfo.a
LIBDEVSTAT?= ${LIBDESTDIR}${LIBDIR_BASE}/libdevstat.a
LIBDIALOG?= ${LIBDESTDIR}${LIBDIR_BASE}/libdialog.a
+LIBDL?= ${LIBDESTDIR}${LIBDIR_BASE}/libdl.a
LIBDNS?= ${LIBDESTDIR}${LIBDIR_BASE}/libdns.a
LIBDPV?= ${LIBDESTDIR}${LIBDIR_BASE}/libdpv.a
LIBDTRACE?= ${LIBDESTDIR}${LIBDIR_BASE}/libdtrace.a
Index: share/mk/src.libnames.mk
===================================================================
--- share/mk/src.libnames.mk
+++ share/mk/src.libnames.mk
@@ -88,6 +88,7 @@
devinfo \
devstat \
dialog \
+ dl \
dpv \
dtrace \
dwarf \

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 16, 10:49 AM (10 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27660103
Default Alt Text
D11504.id30505.diff (7 KB)

Event Timeline