[dm-devel] [PATCH 02/11] multipath-tools: generate abi without version script

Benjamin Marzinski bmarzins at redhat.com
Thu Dec 2 17:51:54 UTC 2021


On Thu, Dec 02, 2021 at 05:06:43PM +0100, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
> 

I assume that am supposed to ignore this patch, and look at

"multipath-tools: generate abi with dummy version script"

instead, right?

-Ben

> The purpose of the "abi" makefile target is to detect ABI changes.  If using
> the version script the way we do (bumping major or minor versions), abigail
> detects a completely different ABI with every bump. This makes it very
> difficult to figure out actual changes in the code.
> 
> This patch fixes that by  using "versionless version scripts" for ABI
> generation. These version scripts just list all exported symbols, using
> just a single dummy version string. This is better than using no version
> script at all, because only exported symbols will be compared, whereas
> without a version script we'd be comparing non-exported symbols, too.
> 
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
>  Makefile.inc             |  1 +
>  libdmmp/Makefile         |  2 +-
>  libmpathcmd/Makefile     | 13 +++++++++++--
>  libmpathpersist/Makefile | 15 ++++++++++++---
>  libmpathvalid/Makefile   | 16 +++++++++++++---
>  libmultipath/Makefile    | 13 +++++++++++--
>  6 files changed, 49 insertions(+), 11 deletions(-)
> 
> diff --git a/Makefile.inc b/Makefile.inc
> index 17071ef..b340f2a 100644
> --- a/Makefile.inc
> +++ b/Makefile.inc
> @@ -79,6 +79,7 @@ GZIP		= gzip -9 -c
>  RM		= rm -f
>  LN		= ln -sf
>  INSTALL_PROGRAM	= install
> +NV_VERSION_SCRIPT = $(VERSION_SCRIPT:%.version=%-nv.version)
>  
>  # $(call TEST_CC_OPTION,option,fallback)
>  # Test if the C compiler supports the option.
> diff --git a/libdmmp/Makefile b/libdmmp/Makefile
> index c91f0c3..de61668 100644
> --- a/libdmmp/Makefile
> +++ b/libdmmp/Makefile
> @@ -58,7 +58,7 @@ uninstall:
>  	$(RM) $(DESTDIR)$(pkgconfdir)/$(PKGFILE)
>  
>  clean: dep_clean
> -	$(RM) core *.a *.o *.gz *.so *.so.* *.abi
> +	$(RM) core *.a *.o *.gz *.so *.so.* *.abi $(NV_VERSION_SCRIPT)
>  	$(RM) docs/man/*.gz
>  	$(MAKE) -C test clean
>  
> diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile
> index 5a7a6e9..72cab1e 100644
> --- a/libmpathcmd/Makefile
> +++ b/libmpathcmd/Makefile
> @@ -15,7 +15,16 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT)
>  	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
>  		-Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
>  
> -abi:    $(LIBS:%.so.0=%.abi)
> +$(NV_VERSION_SCRIPT):	$(VERSION_SCRIPT)
> +	@printf 'NOVERSION {\nglobal:\n' >$@
> +	@grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@
> +	@printf 'local:\n\t*;\n};\n' >>$@
> +
> +$(LIBS:%.so.$(SONAME)=%-nv.so):	$(OBJS) $(NV_VERSION_SCRIPT)
> +	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
> +		-Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
> +
> +abi:    $(LIBS:%.so.$(SONAME)=%-nv.abi)
>  
>  $(DEVLIB): $(LIBS)
>  	$(LN) $(LIBS) $@
> @@ -33,7 +42,7 @@ uninstall:
>  	$(RM) $(DESTDIR)$(includedir)/mpath_cmd.h
>  
>  clean: dep_clean
> -	$(RM) core *.a *.o *.so *.so.* *.gz *.abi
> +	$(RM) core *.a *.o *.so *.so.* *.gz *.abi $(NV_VERSION_SCRIPT)
>  
>  include $(wildcard $(OBJS:.o=.d))
>  
> diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile
> index d76918f..1e6399d 100644
> --- a/libmpathpersist/Makefile
> +++ b/libmpathpersist/Makefile
> @@ -3,7 +3,7 @@ include ../Makefile.inc
>  SONAME = 0
>  DEVLIB = libmpathpersist.so
>  LIBS = $(DEVLIB).$(SONAME)
> -VERSION_SCRIPT := libmpathpersist.version
> +VERSION_SCRIPT:= libmpathpersist.version
>  
>  CFLAGS += $(LIB_CFLAGS) -I$(multipathdir) -I$(mpathpersistdir) -I$(mpathcmddir)
>  LDFLAGS += -L$(multipathdir) -L$(mpathcmddir)
> @@ -18,7 +18,16 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT)
>  	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
>  		-Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
>  
> -abi:    $(LIBS:%.so.0=%.abi)
> +$(NV_VERSION_SCRIPT):	$(VERSION_SCRIPT)
> +	@printf 'NOVERSION {\nglobal:\n' >$@
> +	@grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@
> +	@printf 'local:\n\t*;\n};\n' >>$@
> +
> +$(LIBS:%.so.$(SONAME)=%-nv.so):	$(OBJS) $(NV_VERSION_SCRIPT)
> +	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
> +		-Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
> +
> +abi:    $(LIBS:%.so.$(SONAME)=%-nv.abi)
>  
>  $(DEVLIB): $(LIBS)
>  	$(LN) $(LIBS) $@
> @@ -46,7 +55,7 @@ uninstall:
>  	$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB)
>  
>  clean: dep_clean
> -	$(RM) core *.a *.o *.so *.so.* *.gz *.abi
> +	$(RM) core *.a *.o *.so *.so.* *.gz *.abi $(NV_VERSION_SCRIPT)
>  
>  include $(wildcard $(OBJS:.o=.d))
>  
> diff --git a/libmpathvalid/Makefile b/libmpathvalid/Makefile
> index b579535..dce2610 100644
> --- a/libmpathvalid/Makefile
> +++ b/libmpathvalid/Makefile
> @@ -15,10 +15,20 @@ OBJS = mpath_valid.o
>  all: $(LIBS)
>  
>  $(LIBS): $(OBJS) $(VERSION_SCRIPT)
> -	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) -Wl,--version-script=libmpathvalid.version
> +	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) \
> +		-Wl,--version-script=$(VERSION_SCRIPT)
>  	$(LN) $(LIBS) $(DEVLIB)
>  
> -abi:    $(LIBS:%.so.0=%.abi)
> +$(NV_VERSION_SCRIPT):	$(VERSION_SCRIPT)
> +	@printf 'NOVERSION {\nglobal:\n' >$@
> +	@grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@
> +	@printf 'local:\n\t*;\n};\n' >>$@
> +
> +$(LIBS:%.so.$(SONAME)=%-nv.so):	$(OBJS) $(NV_VERSION_SCRIPT)
> +	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
> +		-Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
> +
> +abi:    $(LIBS:%.so.$(SONAME)=%-nv.abi)
>  
>  install: $(LIBS)
>  	$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir)
> @@ -33,7 +43,7 @@ uninstall:
>  	$(RM) $(DESTDIR)$(includedir)/mpath_valid.h
>  
>  clean: dep_clean
> -	$(RM) core *.a *.o *.so *.so.* *.gz *.abi
> +	$(RM) core *.a *.o *.so *.so.* *.gz *.abi $(NV_VERSION_SCRIPT)
>  
>  include $(wildcard $(OBJS:.o=.d))
>  
> diff --git a/libmultipath/Makefile b/libmultipath/Makefile
> index e8fd749..d4af1a5 100644
> --- a/libmultipath/Makefile
> +++ b/libmultipath/Makefile
> @@ -81,7 +81,16 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT)
>  $(DEVLIB): $(LIBS)
>  	$(LN) $(LIBS) $@
>  
> -abi:    $(LIBS:%.so.0=%.abi)
> +$(NV_VERSION_SCRIPT):	$(VERSION_SCRIPT)
> +	@printf 'NOVERSION {\nglobal:\n' >$@
> +	@grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@
> +	@printf 'local:\n\t*;\n};\n' >>$@
> +
> +$(LIBS:%.so.$(SONAME)=%-nv.so):	$(OBJS) $(NV_VERSION_SCRIPT)
> +	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
> +		-Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
> +
> +abi:    $(LIBS:%.so.$(SONAME)=%-nv.abi)
>  
>  ../tests/$(LIBS): $(OBJS) $(VERSION_SCRIPT)
>  	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=`basename $@` \
> @@ -101,7 +110,7 @@ uninstall:
>  	$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB)
>  
>  clean: dep_clean
> -	$(RM) core *.a *.o *.so *.so.* *.gz *.abi nvme-ioctl.c nvme-ioctl.h
> +	$(RM) core *.a *.o *.so *.so.* *.gz *.abi nvme-ioctl.c nvme-ioctl.h $(NV_VERSION_SCRIPT)
>  
>  include $(wildcard $(OBJS:.o=.d))
>  
> -- 
> 2.34.0




More information about the dm-devel mailing list