[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