From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 81EE33858D37 for ; Thu, 2 Mar 2023 18:53:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 81EE33858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1677783203; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=jzD5Rk9WWtLil7Z8xmPnaFmGVFZ8o6dc7+5R3P7Tuhs=; b=RcxVcr+Hyi0Cuarj/4u7aEKjEOSzCI4uiPHHV1mNzSVqL+mQynOjhUnsbPJaG1mbfyjHlr eKJ20W9mD2wN+OnwpYM86XyksJylF72XaIgxPPPFXZcDEEarrZPcGh0p1/rtDaXvzaokR8 BLH5fubiVMk37OkQ6kEm0u2/isdzl28= Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-231-HI8N0_ovN7u-dPUA3LUWAg-1; Thu, 02 Mar 2023 13:53:21 -0500 X-MC-Unique: HI8N0_ovN7u-dPUA3LUWAg-1 Received: by mail-qk1-f200.google.com with SMTP id d72-20020ae9ef4b000000b0072db6346c39so10566576qkg.16 for ; Thu, 02 Mar 2023 10:53:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677783201; h=mime-version:user-agent:message-id:in-reply-to:date:references :organization:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jzD5Rk9WWtLil7Z8xmPnaFmGVFZ8o6dc7+5R3P7Tuhs=; b=ahWmhTuLpCiz0nLdflDV1X6xU5sBtlibQ7hUcHWH4HpsVTnLUwtka0EM6xO1ZYDpkM wJxjHtih/3VIc9RdwU2Nk3HE4I+YIm/LhSFMUnd5YsCFvwjGnWl02We2jKKzB3IBrOzq v+TVx/bAs6B6uIFKEzQBwu7XVi5zr+7Ep8r9TqcB8Ya3QTX8RRd8IrDGxMlthG5wtBuZ Zee9UidKMDDdUw2y4oFXpYS6ggU7iNHLpTOF348Fp6sfHY/FbxFuE+/aAxi5SBjc5J1L 7Ywx2oYbKb4rEEmN8d2/bzhMoSG18KHw6SzntdzwGpsOTBq9PHa37rpc7UnGPmba+PLJ AAnw== X-Gm-Message-State: AO0yUKUZzvDR5n0mN3VK43y+Elm+Thaad99+Blx3/wVMQRxeC7877/wI Ojt4OAMLsgIYz3IxuPZKv0m0ArdRZWN1yRbXHyVnD0/jvJJwsmku1NhH7X+NUE25ORxgrX9yA1n YX+NVz1U+ChMOqn8xNBvUvxB/JA== X-Received: by 2002:ac8:5b4e:0:b0:3bf:b240:3817 with SMTP id n14-20020ac85b4e000000b003bfb2403817mr19332079qtw.54.1677783200824; Thu, 02 Mar 2023 10:53:20 -0800 (PST) X-Google-Smtp-Source: AK7set83p9tzh8UfQmVZxcCTVQPNsx8ahtZZ4omQMAOePGglPbPYpRYBChhYXb4EcyBUGQrgsRBIiA== X-Received: by 2002:ac8:5b4e:0:b0:3bf:b240:3817 with SMTP id n14-20020ac85b4e000000b003bfb2403817mr19332062qtw.54.1677783200545; Thu, 02 Mar 2023 10:53:20 -0800 (PST) Received: from localhost ([88.120.130.27]) by smtp.gmail.com with ESMTPSA id p2-20020a374202000000b007429961e15csm144843qka.118.2023.03.02.10.53.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Mar 2023 10:53:19 -0800 (PST) Received: by localhost (Postfix, from userid 1000) id 26D40581C79; Thu, 2 Mar 2023 19:53:17 +0100 (CET) From: Dodji Seketeli To: libabigail@sourceware.org Cc: dodji@redhat.com Subject: [PATCH 00/13] Support negative suppression specifications Organization: Red Hat / France References: <877cvzrnws.fsf@redhat.com> X-Operating-System: Fedora 38 X-URL: http://www.redhat.com Date: Thu, 02 Mar 2023 19:53:17 +0100 In-Reply-To: <877cvzrnws.fsf@redhat.com> (Dodji Seketeli's message of "Thu, 02 Mar 2023 19:47:15 +0100") Message-ID: <87356nrnmq.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-5.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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