Bug 20180 - Support system-wide suppression specifications
This patch adds support for loading system and user level suppression
specifications for libabigail tools.
At launch time, relevant libabigail tools (abidiff, abipkgdiff
fedabipkgdiff for now) read the default system suppression
specification file, if it's present, from a file which path is the
value of the environment variable
LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE, if set, or from the file
$libdir/libabigail/default.abignore.
Then it reads the user system suppression specification file, if it's
present, from a file which path is the value of the environment
variable LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE, if set, or from the
file $HOME/.abignore.
The content of the user system suppression file is merged with the
content of default system suppression file.
That content is also merged with the content of the suppression
specification files that might be provided by the --suppressions
command line option of the invoked tools.
The resulting set of all these suppression specifications is thus used
to filter the ABI change reports that are emitted.
abidiff, abipkgdiff and abipkgdiff gain a --no-default-suppression
option to avoid loading any of these default suppression specification
files.
The patch also installs a default.abignore file into $(pkglibdir).
Note that on x86_64, that directory is /usr/lib64/libabigail. Now we
just need to think about the content of that default.abignore file.
* doc/manuals/abidiff.rst: Document the default suppression
scheme, its interaction with the --supprs option and the new
--no-default option.
* doc/manuals/abipkgdiff.rst: Likewise.
* doc/manuals/fedabipkgdiff.rst: Likewise.
* configure.ac: Generate the tests/runtestdefaultsupprs.py file
from the new tests/runtestdefaultsupprs.py.in template.
* default.abignore: New file.
* Makefile.am: Add it to source distribution.
* src/Makefile.am: Define the ABIGAIL_ROOT_SYSTEM_LIBDIR
preprocessor macro that is set the value of the $libdir autotools
macro.
* include/abg-tools-utils.h: Update copyright years.
(get_system_libdir, get_default_system_suppression_file_path)
(get_default_user_suppression_file_path)
(load_default_system_suppressions)
(load_default_user_suppressions): Declare new functions
* src/abg-tools-utils.cc (get_system_libdir)
(get_default_system_suppression_file_path)
(get_default_user_suppression_file_path)
(load_default_system_suppressions)
(load_default_user_suppressions): Define new functions.
(is_regular_file): Amend this so that it return true for symlinks
to regular files too.
(is_dir): Amend this so that it returns true for symlinks to
directories too.
* tools/abidiff.cc (options::no_default_supprs): New data member.
(options::options): Initialize the new data member.
(display_usage): Display a new help string for the new
--no-default-suppression command line option.
(parse_command_line): Parse this new command line option.
(set_diff_context_from_opts): Load the default suppression
specifications, unless --no-default-suppression or --supprs was
provided.
* tools/abipkgdiff.cc (options::no_default_supprs): New data
member.
(options::options): Initialize the new data member.
(parse_command_line): Parse the new --no-default-suppression
command line option.
(main): Load the default suppression specifications, unless
--no-default-suppression or --supprs was provided.
* tools/fedabipkgdiff (abipkgdiff): Add --no-default-suppression
to the invocation of abipkgdiff if it was provided on the command
line.
(build_commandline_args_parser): Parse the new
--no-default-suppression command line option.
* tests/runtestdefaultsupprs.py.in: New test harness template.
* tests/Makefile.am: Add the new runtestdefaultsupprs.py to the
set of tests.
* tests/data/test-default-supprs/test0-type-suppr-0.suppr: New
test input.
* tests/data/test-default-supprs/test0-type-suppr-report-0.txt: Likewise.
* tests/data/test-default-supprs/test0-type-suppr-v0.o: Likewise.
* tests/data/test-default-supprs/test0-type-suppr-v1.o: Likewise.
* tests/data/test-default-supprs/dirpkg-1-dir-report-0.txt:
Likewise.
* tests/data/test-default-supprs/dirpkg-1-dir1: Likewise.
* tests/data/test-default-supprs/dirpkg-1-dir2: Likewise.
* tests/data/Makefile.am: Add new the new tests input above to
Makefile.am.
* tests/runtestcanonicalizetypes.sh.in: Pass
--no-default-suppression to abidiff invocations.
* tests/runtestdefaultsupprs.py.in: Likewise.
* tests/test-abidiff-exit.cc: Likewise.
* tests/test-diff-dwarf-abixml.cc: Likewise.
* tests/test-diff-filter.cc: Likewise.
* tests/test-diff-suppr.cc: Likewise.
* tools/abidiff.cc: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2016-05-30 08:37:48 +00:00
|
|
|
# This file contains default system-wide suppression specifications to
|
|
|
|
# be used by Abigail tools[1] to filter out specific ABI change
|
|
|
|
# reports when comparing the ABI of some core system binaries.
|
|
|
|
#
|
|
|
|
# To learn about the syntax of Abigail suppression specifications,
|
|
|
|
# please refer to the relevant section of the online manual[2].
|
|
|
|
#
|
|
|
|
# If you feel like some suppression specifications should be added to
|
|
|
|
# this file so that they can be applied system-wide each time an
|
|
|
|
# Abigail tool is invoked to compare a given core system binary,
|
|
|
|
# please file an enhance request to
|
|
|
|
# https://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail.
|
|
|
|
#
|
|
|
|
# Or, consider just adding those suppression specification to your
|
|
|
|
# ~/.abignore file.
|
|
|
|
#
|
|
|
|
# [1]: https://sourceware.org/libabigail/manual/libabigail-overview.html
|
|
|
|
# [2]: https://sourceware.org/libabigail/manual/libabigail-concepts.html#suppression-specifications.
|
|
|
|
#
|
2016-05-31 10:34:36 +00:00
|
|
|
|
|
|
|
#############################################
|
|
|
|
# Below are glibc suppression specifications
|
|
|
|
############################################
|
|
|
|
|
|
|
|
# The idea is to suppress ABI change reports on functions and variable
|
|
|
|
# which symbol version is "GLIBC_PRIVATE". The SONAMEs of the
|
|
|
|
# libraries these suppression specification are to be applied to are:
|
|
|
|
#
|
|
|
|
# ld-linux-x86-64.so.2
|
|
|
|
# libanl.so.1
|
|
|
|
# libcidn.so.1
|
|
|
|
# libcrypt.so.1
|
|
|
|
# libc.so.6
|
|
|
|
# libdl.so.2
|
|
|
|
# libm.so.6
|
|
|
|
# libmvec.so.1
|
|
|
|
# libnsl.so.1
|
|
|
|
# libnss_compat.so.2
|
|
|
|
# libnss_db.so.2
|
|
|
|
# libnss_dns.so.2
|
|
|
|
# libnss_files.so.2
|
|
|
|
# libnss_hesiod.so.2
|
|
|
|
# libnss_nisplus.so.2
|
|
|
|
# libnss_nis.so.2
|
|
|
|
# libpthread.so.0
|
|
|
|
# libresolv.so.2
|
|
|
|
# librt.so.1
|
|
|
|
# libthread_db.so.1
|
|
|
|
# libutil.so.1
|
|
|
|
#
|
|
|
|
# The SONAMEs above can be derived from
|
|
|
|
# https://sourceware.org/glibc/wiki/ABIList.
|
|
|
|
|
|
|
|
[suppress_function]
|
|
|
|
# Suppress ABI change reports about functions which symbol version
|
|
|
|
# is "GLIBC_PRIVATE"
|
|
|
|
symbol_version = GLIBC_PRIVATE
|
|
|
|
|
|
|
|
# And we want to restrict this suppression specification only to
|
|
|
|
# libraries with these SONAMEs:
|
|
|
|
soname_regexp = (libanl|libcidn|libcrypt|libc|libdl|libm|libmvec|libnsl|libnss_compat|libnss_db|libnss_dns|libnss_files|libnss_hesiod|libnss_nisplus|libnss_nis|libpthread|libresolv|librt|libthread_db|libutil|ld\[a-z0-9-\]*)\\.so\\.\[0-9\]*
|
|
|
|
|
|
|
|
[suppress_variable]
|
|
|
|
# Suppress ABI change reports about functions which symbol version
|
|
|
|
# is "GLIBC_PRIVATE"
|
|
|
|
symbol_version = GLIBC_PRIVATE
|
|
|
|
|
|
|
|
# And we want to restrict this suppression specification only to
|
|
|
|
# libraries with these SONAMEs:
|
|
|
|
soname_regexp = (libanl|libcidn|libcrypt|libc|libdl|libm|libmvec|libnsl|libnss_compat|libnss_db|libnss_dns|libnss_files|libnss_hesiod|libnss_nisplus|libnss_nis|libpthread|libresolv|librt|libthread_db|libutil|ld\[a-z0-9-\]*)\\.so\\.\[0-9\]*
|
|
|
|
|
|
|
|
#############################################
|
|
|
|
# End of glibc suppression specifications
|
|
|
|
############################################
|
2016-09-20 13:54:51 +00:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
# Below are suppression specifications for webkitgtk
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
[suppress_function]
|
2016-09-16 13:57:34 +00:00
|
|
|
soname_regexp = libwebkit2?gtk-.*\\.so.*
|
2016-09-20 13:54:51 +00:00
|
|
|
name_not_regexp = ^webkit_.*
|
|
|
|
drop = true
|
|
|
|
|
2016-09-16 13:57:34 +00:00
|
|
|
[suppress_variable]
|
|
|
|
soname_regexp = libwebkit2?gtk-.*\\.so.*
|
|
|
|
name_regexp = (^std::.*|WebCore::.*|WebKit::.*)
|
|
|
|
drop = true
|
|
|
|
|
|
|
|
[suppress_type]
|
|
|
|
soname_regexp = libwebkit2?gtk-.*\\.so.*
|
|
|
|
name_regexp = (^std::.*|WebCore::.*|WebKit::.*)
|
2016-09-20 13:54:51 +00:00
|
|
|
drop = true
|
|
|
|
|
|
|
|
#######################################################
|
|
|
|
# End of webkitgtk suppression specifications
|
2016-09-16 13:57:34 +00:00
|
|
|
#######################################################
|
|
|
|
|
|
|
|
########################################################
|
|
|
|
# Suppression specification for C++ libraries
|
|
|
|
# that are not libstdc++.so
|
|
|
|
########################################################
|
|
|
|
|
|
|
|
[suppress_function]
|
|
|
|
soname_not_regexp = libstdc\\+\\+\\.so.*
|
|
|
|
name_regexp = std::.*
|
|
|
|
drop = true
|
|
|
|
|
|
|
|
[suppress_variable]
|
|
|
|
soname_not_regexp = libstdc\\+\\+\\.so.*
|
|
|
|
name_regexp = std::.*
|
|
|
|
drop = true
|
|
|
|
|
|
|
|
########################################################
|
|
|
|
# End of suppression specification for C++ libraries
|
|
|
|
# that are not libstdc++.so
|
|
|
|
########################################################
|
|
|
|
|
|
|
|
########################################################
|
|
|
|
# Suppression specification for C++ libraries
|
|
|
|
# that are not Boost.
|
|
|
|
########################################################
|
|
|
|
|
|
|
|
[suppress_function]
|
|
|
|
soname_not_regexp = libboost_.*\\.so.*
|
|
|
|
name_regexp = boost::.*
|
|
|
|
drop = true
|
|
|
|
|
|
|
|
[suppress_variable]
|
|
|
|
soname_not_regexp = libboost_.*\\.so.*
|
|
|
|
name_regexp = boost::.*
|
|
|
|
drop = true
|
|
|
|
|
|
|
|
########################################################
|
|
|
|
# End of suppression specification for C++ libraries
|
|
|
|
# that are not Boost.
|
|
|
|
########################################################
|