On Thu, Dec 17, 2020 at 12:00:17PM +0100, mwilck@xxxxxxxx wrote: > From: Martin Wilck <mwilck@xxxxxxxx> > > By adding -Wl,-z,defs, we'll get warnings about unresolved symbols > at the linking stage. This way we make sure our plugins (checkers etc.) > will use versioned symbols from libmultipath, and incompatible plugins > can't be loaded any more. Doing this requires explicitly linking > the plugins with all libraries they use, in particular libmultipath. > Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> > --- > Makefile | 1 + > Makefile.inc | 2 +- > libmpathpersist/Makefile | 8 ++++---- > libmultipath/checkers/Makefile | 7 +++---- > libmultipath/foreign/Makefile | 4 +++- > libmultipath/prioritizers/Makefile | 7 +++---- > 6 files changed, 15 insertions(+), 14 deletions(-) > > diff --git a/Makefile b/Makefile > index f127ff9..bddb2bf 100644 > --- a/Makefile > +++ b/Makefile > @@ -31,6 +31,7 @@ $(BUILDDIRS): > > libmultipath libdmmp: libmpathcmd > libmpathpersist libmpathvalid multipath multipathd: libmultipath > +libmultipath/prioritizers libmultipath/checkers libmultipath/foreign: libmultipath > mpathpersist multipathd: libmpathpersist > > libmultipath/checkers.install \ > diff --git a/Makefile.inc b/Makefile.inc > index 13587a9..0542930 100644 > --- a/Makefile.inc > +++ b/Makefile.inc > @@ -105,7 +105,7 @@ CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \ > BIN_CFLAGS = -fPIE -DPIE > LIB_CFLAGS = -fPIC > SHARED_FLAGS = -shared > -LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now > +LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs > BIN_LDFLAGS = -pie > > # Check whether a function with name $1 has been declared in header file $2. > diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile > index 456ce4c..57103e5 100644 > --- a/libmpathpersist/Makefile > +++ b/libmpathpersist/Makefile > @@ -6,17 +6,17 @@ LIBS = $(DEVLIB).$(SONAME) > VERSION_SCRIPT := libmpathpersist.version > > CFLAGS += $(LIB_CFLAGS) -I$(multipathdir) -I$(mpathpersistdir) -I$(mpathcmddir) > +LDFLAGS += -L$(multipathdir) -L$(mpathcmddir) > > -LIBDEPS += -lpthread -ldevmapper -ldl -L$(multipathdir) -lmultipath \ > - -L$(mpathcmddir) -lmpathcmd > +LIBDEPS += -lmultipath -lmpathcmd -ldevmapper -lpthread -ldl > > OBJS = mpath_persist.o mpath_updatepr.o mpath_pr_ioctl.o > > all: $(DEVLIB) man > > $(LIBS): $(OBJS) $(VERSION_SCRIPT) > - $(CC) $(LDFLAGS) $(SHARED_FLAGS) $(LIBDEPS) -Wl,-soname=$@ \ > - -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) > + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ > + -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) > > $(DEVLIB): $(LIBS) > $(LN) $(LIBS) $@ > diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile > index 01c0451..8e0ed5e 100644 > --- a/libmultipath/checkers/Makefile > +++ b/libmultipath/checkers/Makefile > @@ -4,6 +4,8 @@ > include ../../Makefile.inc > > CFLAGS += $(LIB_CFLAGS) -I.. > +LDFLAGS += -L.. -lmultipath > +LIBDEPS = -lmultipath -laio -lpthread -lrt > > # If you add or remove a checker also update multipath/multipath.conf.5 > LIBS= \ > @@ -17,11 +19,8 @@ LIBS= \ > > all: $(LIBS) > > -libcheckdirectio.so: directio.o > - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -laio > - > libcheck%.so: %.o > - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ > + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) > > install: > $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir) > diff --git a/libmultipath/foreign/Makefile b/libmultipath/foreign/Makefile > index fae58a0..f447a1c 100644 > --- a/libmultipath/foreign/Makefile > +++ b/libmultipath/foreign/Makefile > @@ -5,13 +5,15 @@ TOPDIR=../.. > include ../../Makefile.inc > > CFLAGS += $(LIB_CFLAGS) -I.. -I$(nvmedir) > +LDFLAGS += -L.. > +LIBDEPS = -lmultipath -ludev -lpthread -lrt > > LIBS = libforeign-nvme.so > > all: $(LIBS) > > libforeign-%.so: %.o > - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ > + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) > > install: > $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir) > diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile > index fc6e0e0..8d34ae3 100644 > --- a/libmultipath/prioritizers/Makefile > +++ b/libmultipath/prioritizers/Makefile > @@ -4,6 +4,8 @@ > include ../../Makefile.inc > > CFLAGS += $(LIB_CFLAGS) -I.. > +LDFLAGS += -L.. > +LIBDEPS = -lmultipath -lm -lpthread -lrt > > # If you add or remove a prioritizer also update multipath/multipath.conf.5 > LIBS = \ > @@ -28,11 +30,8 @@ endif > > all: $(LIBS) > > -libpriopath_latency.so: path_latency.o > - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -lm > - > libprio%.so: %.o > - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ > + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) > > install: $(LIBS) > $(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(libdir) > -- > 2.29.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel