Since librspreload is a LD_PRELOAD library it should only export symbols it intends to override. The following internal symbols were leaking out: getenv_options idm_clear idm_set idx_insert idx_remove idx_replace set_rsocket_options The simplest way to fix this is with a map file. Signed-off-by: Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx> --- librdmacm/Makefile.am | 5 ++++- librdmacm/src/librspreload.map | 33 +++++++++++++++++++++++++++++++++ librdmacm/src/preload.c | 4 ++-- 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 librdmacm/src/librspreload.map diff --git a/librdmacm/Makefile.am b/librdmacm/Makefile.am index 84af01a14b4b..edfb36bb4149 100644 --- a/librdmacm/Makefile.am +++ b/librdmacm/Makefile.am @@ -23,7 +23,10 @@ src_librdmacm_la_LDFLAGS = -version-info 1 -export-dynamic \ src_librdmacm_la_DEPENDENCIES = $(srcdir)/src/librdmacm.map src_librspreload_la_SOURCES = src/preload.c src/indexer.c -src_librspreload_la_LDFLAGS = -version-info 1 -export-dynamic +src_librspreload_la_LDFLAGS = -version-info 1 +if HAVE_LD_VERSION_SCRIPT + src_librspreload_la_LDFLAGS += -Wl,--version-script=$(srcdir)/src/librspreload.map +endif src_librspreload_la_LIBADD = $(top_builddir)/src/librdmacm.la bin_PROGRAMS = examples/ucmatose examples/rping examples/udaddy examples/mckey \ diff --git a/librdmacm/src/librspreload.map b/librdmacm/src/librspreload.map new file mode 100644 index 000000000000..67ecf33b8203 --- /dev/null +++ b/librdmacm/src/librspreload.map @@ -0,0 +1,33 @@ +{ + /* FIXME: It is probably not a great idea to not tag these with the + proper symbol version from glibc, at least if glibc ever changes + the signature this will go sideways.. */ + global: + accept; + bind; + close; + connect; + dup2; + fcntl; + getpeername; + getsockname; + getsockopt; + listen; + poll; + read; + readv; + recv; + recvfrom; + recvmsg; + select; + send; + sendfile; + sendmsg; + sendto; + setsockopt; + shutdown; + socket; + write; + writev; + local: *; +}; diff --git a/librdmacm/src/preload.c b/librdmacm/src/preload.c index a0bc1cfbd7a5..2a90f79b226c 100644 --- a/librdmacm/src/preload.c +++ b/librdmacm/src/preload.c @@ -356,7 +356,7 @@ static enum fd_type fd_close(int index, int *fd) return type; } -void getenv_options(void) +static void getenv_options(void) { char *var; @@ -521,7 +521,7 @@ err: /* * Use defaults on failure. */ -void set_rsocket_options(int rsocket) +static void set_rsocket_options(int rsocket) { if (sq_size) rsetsockopt(rsocket, SOL_RDMA, RDMA_SQSIZE, &sq_size, sizeof sq_size); -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html