libabigail/default.abignore

137 lines
4.7 KiB
Plaintext
Raw Normal View History

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.
#
#############################################
# 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
############################################
###########################################################
# Below are suppression specifications for webkitgtk
###########################################################
[suppress_function]
soname_regexp = libwebkit2?gtk-.*\\.so.*
name_not_regexp = ^webkit_.*
drop = true
[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::.*)
drop = true
#######################################################
# End of webkitgtk suppression specifications
#######################################################
########################################################
# 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.
########################################################