Library ABI tracking with abigail

Provide two make targets: checkabi and storeabi.

storeabi uses libabigail to generate a reference copy of the ABI for the
public libraries.

checkabi compares such a reference to the compiled version, failing if
they are not compatible.  No ABI is generated for libzpool.so, it is
only used by ztest and zdb and not external consumers.

Co-authored-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Antonio Russo <aerusso@aerusso.net>
Closes #11144
This commit is contained in:
Antonio Russo
2020-11-14 21:35:31 -07:00
committed by Brian Behlendorf
parent 043ef5c25e
commit 4f9014b70b
13 changed files with 93 additions and 1 deletions
+18 -1
View File
@@ -15,4 +15,21 @@ SUBDIRS += libzutil libunicode
# These five libraries, which are installed as the final build product,
# incorporate the eight convenience libraries given above.
SUBDIRS += libuutil libzfs_core libzfs libzpool libzfsbootenv
DISTLIBS = libuutil libzfs_core libzfs libzpool libzfsbootenv
SUBDIRS += $(DISTLIBS)
DISTLIBS += libnvpair
# An ABI is stored for each of these libraries. Note that libzpool.so
# is only linked against by ztest and zdb and no stable ABI is provided.
ABILIBS = libnvpair libuutil libzfs_core libzfs libzfsbootenv
PHONY = checkabi storeabi
checkabi: $(ABILIBS)
set -e ; for dir in $(ABILIBS) ; do \
$(MAKE) -C $$dir checkabi ; \
done
storeabi: $(ABILIBS)
set -e ; for dir in $(ABILIBS) ; do \
$(MAKE) -C $$dir storeabi ; \
done
+3
View File
@@ -1,4 +1,5 @@
include $(top_srcdir)/config/Rules.am
PHONY =
VPATH = \
$(top_srcdir)/module/nvpair \
@@ -10,6 +11,8 @@ AM_CFLAGS += $(FRAME_LARGER_THAN) $(LIBTIRPC_CFLAGS)
lib_LTLIBRARIES = libnvpair.la
include $(top_srcdir)/config/Abigail.am
USER_C = \
libnvpair.c \
libnvpair_json.c \
+2
View File
@@ -0,0 +1,2 @@
[suppress_type]
name = FILE*
+3
View File
@@ -1,7 +1,10 @@
include $(top_srcdir)/config/Rules.am
PHONY =
lib_LTLIBRARIES = libuutil.la
include $(top_srcdir)/config/Abigail.am
USER_C = \
uu_alloc.c \
uu_avl.c \
+2
View File
@@ -0,0 +1,2 @@
[suppress_type]
name = FILE*
+3
View File
@@ -1,4 +1,5 @@
include $(top_srcdir)/config/Rules.am
PHONY =
VPATH = \
$(top_srcdir)/module/icp \
@@ -13,6 +14,8 @@ pkgconfig_DATA = libzfs.pc
lib_LTLIBRARIES = libzfs.la
include $(top_srcdir)/config/Abigail.am
USER_C = \
libzfs_changelist.c \
libzfs_config.c \
+13
View File
@@ -0,0 +1,13 @@
[suppress_type]
name = FILE*
[suppress_type]
type_kind = typedef
name = SHA256_CTX
[suppress_type]
type_kind = typedef
name = SHA2_CTX
[suppress_variable]
name = zfs_deleg_perm_tab
+3
View File
@@ -1,9 +1,12 @@
include $(top_srcdir)/config/Rules.am
PHONY =
pkgconfig_DATA = libzfs_core.pc
lib_LTLIBRARIES = libzfs_core.la
include $(top_srcdir)/config/Abigail.am
USER_C = \
libzfs_core.c
+5
View File
@@ -0,0 +1,5 @@
[suppress_type]
name = FILE*
[suppress_type]
name = pthread_cond_t
+3
View File
@@ -1,9 +1,12 @@
include $(top_srcdir)/config/Rules.am
PHONY =
pkgconfig_DATA = libzfsbootenv.pc
lib_LTLIBRARIES = libzfsbootenv.la
include $(top_srcdir)/config/Abigail.am
if BUILD_FREEBSD
DEFAULT_INCLUDES += -I$(top_srcdir)/include/os/freebsd/zfs
endif
+2
View File
@@ -0,0 +1,2 @@
[suppress_type]
name = FILE*