public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
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


       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).