From: Dodji Seketeli <dodji@redhat.com>
To: libabigail@sourceware.org
Cc: dodji@redhat.com
Subject: [PATCH 00/13] Support negative suppression specifications
Date: Thu, 02 Mar 2023 19:53:17 +0100 [thread overview]
Message-ID: <87356nrnmq.fsf@redhat.com> (raw)
In-Reply-To: <877cvzrnws.fsf@redhat.com> (Dodji Seketeli's message of "Thu, 02 Mar 2023 19:47:15 +0100")
Hello,
The core of this patch is to beef up the suppression specification
language so that we can express something like this:
[allow_type] #1
label = first-suppr
type_kind = struct
has_data_member_regexp = ^__reserved_padding #2
[suppress_type]
label = second-suppr
type_kind = struct
has_data_member_inserted_between =
{
offset_of_first_data_member_regexp(^__reserved_padding), #3
offset_of_last_data_member_regexp(^__reserved_padding), #4
}
In #1, the [allow_type] directive suppresses all type changes that do
NOT match this directive. I call this a "negative type suppression
specification". In #2, the "has_data_member_regexp" property matches
a type which has a data member which name matches the regular
expression value of this property.
In #3, the offset_of_first_data_member_regexp() function-like expression
evaluates to the offset of the first data member which name matches
the regular expression in argument.
In #4, the offset_of_last_data_member_regexp() function-like
expression evaluates to the offset of the last data member which name
matches the regular expression in argument.
The patch set not only implements the features #1 to #4 but also
includes some performance work to improve the speed of the analysis of
big binaries with lots diff nodes.
Dodji Seketeli (13):
ini: Fix parsing list property values
suppr: Support has_data_member and has_data_member_regexp properties
suppression: Factorize out is_data_member_offset_in_range
suppression: Support the has_size_change property for suppress_type
suppression: Support offset_of_{first,last}_data_member_regexp offset selectors
comparison, suppression: Support [allow_type] directive
Misc white space fixes
abidiff: Add extensive logging
tools-utils: Support kernel stablelist
comp-filter: Don't re-visit node while applying filters to diff nodes
comparison: Add a mode to not apply filters on interface sub-graphs
comparison: When marking leaf nodes don't do unnecessary impact analysis
comp-filter: Speed up harmless/harmful categorization
doc/manuals/abidiff.rst | 12 +
doc/manuals/kmidiff.rst | 11 +
doc/manuals/libabigail-concepts.rst | 158 ++++-
include/abg-comparison.h | 86 ++-
include/abg-corpus.h | 6 +
include/abg-fwd.h | 48 ++
include/abg-suppression.h | 110 +++-
src/abg-comp-filter.cc | 27 +-
src/abg-comparison-priv.h | 23 +-
src/abg-comparison.cc | 581 ++++++++++++++++--
src/abg-corpus-priv.h | 4 +-
src/abg-corpus.cc | 14 +
src/abg-ctf-reader.cc | 1 +
src/abg-default-reporter.cc | 352 ++++++-----
src/abg-elf-helpers.cc | 1 +
src/abg-ini.cc | 1 +
src/abg-ir.cc | 102 ++-
src/abg-reader.cc | 22 +
src/abg-suppression-priv.h | 43 +-
src/abg-suppression.cc | 479 ++++++++++++---
src/abg-tools-utils.cc | 3 +-
tests/data/Makefile.am | 80 +++
.../test-allow-type-array-suppr.txt | 7 +
.../test-allow-type-array-v0--v1-report-1.txt | 23 +
.../test-allow-type-array-v0--v1-report-2.txt | 3 +
.../test-allow-type-array-v0--v2-report-1.txt | 20 +
.../test-allow-type-array-v0--v2-report-2.txt | 15 +
.../test-allow-type-array-v0--v3-report-1.txt | 23 +
.../test-allow-type-array-v0--v3-report-2.txt | 3 +
.../test-allow-type-array-v0.c | 18 +
.../test-allow-type-array-v0.o | Bin 0 -> 3392 bytes
.../test-allow-type-array-v1.c | 20 +
.../test-allow-type-array-v1.o | Bin 0 -> 3448 bytes
.../test-allow-type-array-v2.c | 20 +
.../test-allow-type-array-v2.o | Bin 0 -> 3456 bytes
.../test-allow-type-array-v3.c | 20 +
.../test-allow-type-array-v3.o | Bin 0 -> 3456 bytes
.../test-allow-type-region-suppr.txt | 11 +
...test-allow-type-region-v0--v1-report-1.txt | 20 +
...test-allow-type-region-v0--v1-report-2.txt | 3 +
...test-allow-type-region-v0--v2-report-1.txt | 21 +
...test-allow-type-region-v0--v2-report-2.txt | 16 +
...test-allow-type-region-v0--v3-report-1.txt | 23 +
...test-allow-type-region-v0--v3-report-2.txt | 18 +
...test-allow-type-region-v0--v4-report-1.txt | 28 +
...test-allow-type-region-v0--v4-report-2.txt | 3 +
...test-allow-type-region-v0--v5-report-1.txt | 30 +
...test-allow-type-region-v0--v5-report-2.txt | 25 +
.../test-allow-type-region-v0.c | 22 +
.../test-allow-type-region-v0.o | Bin 0 -> 3576 bytes
.../test-allow-type-region-v1.c | 23 +
.../test-allow-type-region-v1.o | Bin 0 -> 3632 bytes
.../test-allow-type-region-v2.c | 23 +
.../test-allow-type-region-v2.o | Bin 0 -> 3632 bytes
.../test-allow-type-region-v3.c | 24 +
.../test-allow-type-region-v3.o | Bin 0 -> 3688 bytes
.../test-allow-type-region-v4.c | 23 +
.../test-allow-type-region-v4.o | Bin 0 -> 3640 bytes
.../test-allow-type-region-v5.c | 24 +
.../test-allow-type-region-v5.o | Bin 0 -> 3696 bytes
.../test-allow-type-suppr1.txt | 7 +
.../test-allow-type-suppr2.txt | 7 +
.../test-diff-suppr/has-data-member-1.suppr | 3 +
.../test-diff-suppr/has-data-member-2.suppr | 3 +
.../test-diff-suppr/has-data-member-3.suppr | 3 +
.../test-diff-suppr/has-data-member-4.suppr | 3 +
.../test-diff-suppr/has-data-member-5.suppr | 3 +
.../test-diff-suppr/has-data-member-6.suppr | 3 +
.../test-diff-suppr/has-data-member-7.suppr | 3 +
...ata-member-inserted-between-1-report-1.txt | 3 +
...ata-member-inserted-between-1-report-2.txt | 13 +
...ata-member-inserted-between-1-report-3.txt | 12 +
...ata-member-inserted-between-1-report-4.txt | 11 +
...st-has-data-member-inserted-between-1-v0.c | 10 +
...st-has-data-member-inserted-between-1-v0.o | Bin 0 -> 3088 bytes
...st-has-data-member-inserted-between-1-v1.c | 10 +
...st-has-data-member-inserted-between-1-v1.o | Bin 0 -> 3088 bytes
...st-has-data-member-inserted-between-1-v2.c | 11 +
...st-has-data-member-inserted-between-1-v2.o | Bin 0 -> 3152 bytes
...st-has-data-member-inserted-between-1-v3.c | 11 +
...st-has-data-member-inserted-between-1-v3.o | Bin 0 -> 3152 bytes
...st-has-data-member-inserted-between-1-v4.c | 10 +
...st-has-data-member-inserted-between-1-v4.o | Bin 0 -> 3152 bytes
...t-has-data-member-inserted-between-1.suppr | 7 +
.../test-has-data-member-output-1.txt | 19 +
.../test-has-data-member-output-2.txt | 12 +
.../test-has-data-member-v0.cc | 22 +
.../test-diff-suppr/test-has-data-member-v0.o | Bin 0 -> 3608 bytes
.../test-has-data-member-v1.cc | 24 +
.../test-diff-suppr/test-has-data-member-v1.o | Bin 0 -> 3728 bytes
.../test11-add-data-member-0.1.suppr | 3 +
.../test11-add-data-member-0.suppr | 1 +
.../test11-add-data-member-1.1.suppr | 3 +
.../test11-add-data-member-1.suppr | 1 +
.../test11-add-data-member-2.1.suppr | 3 +
.../test11-add-data-member-2.suppr | 1 +
.../test11-add-data-member-3.1.suppr | 3 +
.../test11-add-data-member-3.suppr | 1 +
.../test11-add-data-member-4.1.suppr | 3 +
.../test11-add-data-member-4.suppr | 1 +
.../test11-add-data-member-report-1.1.txt | 13 +
.../test12-add-data-member-0.1.suppr | 3 +
.../test12-add-data-member-0.suppr | 1 +
.../test12-add-data-member-report-1.1.txt | 13 +
.../test13-suppr-through-pointer-0.1.suppr | 4 +
.../test13-suppr-through-pointer-0.suppr | 1 +
...est13-suppr-through-pointer-report-1.1.txt | 16 +
.../test35-leaf-report-0.1.txt | 18 +
.../data/test-diff-suppr/test35-leaf.1.suppr | 8 +
tests/data/test-diff-suppr/test35-leaf.suppr | 1 +
tests/test-abidiff-exit.cc | 187 ++++++
tests/test-diff-suppr.cc | 202 +++++-
tools/abidiff.cc | 189 +++++-
tools/kmidiff.cc | 8 +
114 files changed, 3176 insertions(+), 391 deletions(-)
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-suppr.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0--v1-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0--v1-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0--v2-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0--v2-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0--v3-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0--v3-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v0.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v1.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v1.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v2.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v2.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v3.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-array-v3.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-suppr.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v2-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v2-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v3-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v3-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v0.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v1.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v1.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v2.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v2.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v3.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v3.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v4.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v4.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v5.c
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-region-v5.o
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-suppr1.txt
create mode 100644 tests/data/test-abidiff-exit/test-allow-type-suppr2.txt
create mode 100644 tests/data/test-diff-suppr/has-data-member-1.suppr
create mode 100644 tests/data/test-diff-suppr/has-data-member-2.suppr
create mode 100644 tests/data/test-diff-suppr/has-data-member-3.suppr
create mode 100644 tests/data/test-diff-suppr/has-data-member-4.suppr
create mode 100644 tests/data/test-diff-suppr/has-data-member-5.suppr
create mode 100644 tests/data/test-diff-suppr/has-data-member-6.suppr
create mode 100644 tests/data/test-diff-suppr/has-data-member-7.suppr
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-report-1.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-report-2.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-report-3.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-report-4.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v0.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v0.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v1.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v1.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v2.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v2.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v3.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v3.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v4.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1-v4.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-between-1.suppr
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-output-1.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-output-2.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-v0.cc
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-v0.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-v1.cc
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-v1.o
create mode 100644 tests/data/test-diff-suppr/test11-add-data-member-0.1.suppr
create mode 100644 tests/data/test-diff-suppr/test11-add-data-member-1.1.suppr
create mode 100644 tests/data/test-diff-suppr/test11-add-data-member-2.1.suppr
create mode 100644 tests/data/test-diff-suppr/test11-add-data-member-3.1.suppr
create mode 100644 tests/data/test-diff-suppr/test11-add-data-member-4.1.suppr
create mode 100644 tests/data/test-diff-suppr/test11-add-data-member-report-1.1.txt
create mode 100644 tests/data/test-diff-suppr/test12-add-data-member-0.1.suppr
create mode 100644 tests/data/test-diff-suppr/test12-add-data-member-report-1.1.txt
create mode 100644 tests/data/test-diff-suppr/test13-suppr-through-pointer-0.1.suppr
create mode 100644 tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.1.txt
create mode 100644 tests/data/test-diff-suppr/test35-leaf-report-0.1.txt
create mode 100644 tests/data/test-diff-suppr/test35-leaf.1.suppr
--
2.39.2
--
Dodji
next parent reply other threads:[~2023-03-02 18:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <877cvzrnws.fsf@redhat.com>
2023-03-02 18:53 ` Dodji Seketeli [this message]
2023-03-02 18:55 ` [PATCH 01/13] ini: Fix parsing list property values Dodji Seketeli
2023-03-02 18:56 ` [PATCH 02/13] suppr: Support has_data_member and has_data_member_regexp properties Dodji Seketeli
2023-03-02 18:57 ` [PATCH 03/13] suppression: Factorize out is_data_member_offset_in_range Dodji Seketeli
2023-03-02 18:58 ` [PATCH 04/13] suppression: Support the has_size_change property for suppress_type Dodji Seketeli
2023-03-02 18:59 ` [PATCH 05/13] suppression: Support offset_of_{first,last}_data_member_regexp offset selectors Dodji Seketeli
2023-03-02 18:59 ` [PATCH 06/13] comparison, suppression: Support [allow_type] directive Dodji Seketeli
2023-03-02 19:00 ` [PATCH 07/13] Misc white space fixes Dodji Seketeli
2023-03-02 19:01 ` [PATCH 08/13] abidiff: Add extensive logging Dodji Seketeli
2023-03-02 19:01 ` [PATCH 09/13] tools-utils: Support kernel stablelist Dodji Seketeli
2023-03-02 19:02 ` [PATCH 10/13] comp-filter: Don't re-visit node while applying filters to diff nodes Dodji Seketeli
2023-03-02 19:03 ` [PATCH 11/13] comparison: Add a mode to not apply filters on interface sub-graphs Dodji Seketeli
2023-03-02 19:04 ` [PATCH 12/13] comparison: When marking leaf nodes don't do unnecessary impact analysis Dodji Seketeli
2023-03-02 19:05 ` [PATCH 13/13] comp-filter: Speed up harmless/harmful categorization Dodji Seketeli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87356nrnmq.fsf@redhat.com \
--to=dodji@redhat.com \
--cc=libabigail@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).