From patchwork Mon Feb 1 13:32:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dodji Seketeli X-Patchwork-Id: 41883 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 179FF384A033; Mon, 1 Feb 2021 13:33:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 179FF384A033 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612186391; bh=YlCnm1fQXuFCODR8mm7VTHRtLwAEDgVuOxXL42EV494=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:From; b=RabQJOpGmHsE+y6OLckhjwahKJg4vE3CZDBJ7Kotyu2UomUydHNGqxclThYySujVW RX1tmGZw7MGeuyp1qsh5VQqNgYwNEdXRTqkdyK1WsL4X93ut/tLhQLmzxAohFWaumr Z4WUSc+v0dEAUVPLYH0sKDUDpimgAFFYmio8ggqw= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 0C8CD385482A for ; Mon, 1 Feb 2021 13:32:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0C8CD385482A Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-457-TB3mRrtwPOyrq-XqABpk2w-1; Mon, 01 Feb 2021 08:32:51 -0500 X-MC-Unique: TB3mRrtwPOyrq-XqABpk2w-1 Received: by mail-wr1-f70.google.com with SMTP id s18so10402205wrf.0 for ; Mon, 01 Feb 2021 05:32:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:organization:date:message-id :user-agent:mime-version; bh=YlCnm1fQXuFCODR8mm7VTHRtLwAEDgVuOxXL42EV494=; b=GeKvAlcWJtVLVCSAk8NbofIZarRjinn+gHS9qDtgIJSAfje8BJkqQkLZjE4UaWGKaL kcAErhRFI/4vuyKksJlNoNcGffwvxQ4s7NFRrXJti9PE/JMaXYUuaTBBfmUBH3wEZt7Q I7zrlYpanpI/DExcFoUcPXr3Pp2TOctcKUeeKsW1aUDzShVA2kzQMJxtDar5YVp7LD5s R4KjHRBVGU9Hauv+mxx+sC20Uxw594kND+OKw/+3FD5Hpy+RXmjY+kxRpQADxGIngaEo cMN0wdpEuZdPRtd7ilHrV0+1buiNBZkjxqmpr8grQFlzT+ZzU1zn0R/lOd7mjtkWsDnr MPAw== X-Gm-Message-State: AOAM533ZFRyZ2JdtgDUPQNrwk5odvB/QtXVaG4Rk7pbzg8NJBkPzCMwi bdDqkA7zeAbRnlEOvYNlB9jGMVAEkZRgs3/YBmbkEbU4lLlB4tTBPejVfj3odfHMk8JCmMDqf/d I06GiIC9a4QI/7lHBwetTVpdUcy5Ly0hd2lT55mUVuALcObe4ByMmiwQ7ZyL9PsIb/0eL X-Received: by 2002:a5d:4242:: with SMTP id s2mr18494138wrr.108.1612186369058; Mon, 01 Feb 2021 05:32:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJxYHEm+oTai02HgkEA2Mmvr/5DlNOQ4x+g6sSB9qcQPwDO5B5GcEBlxses6cMl8oJYbIJkZsQ== X-Received: by 2002:a5d:4242:: with SMTP id s2mr18494087wrr.108.1612186368358; Mon, 01 Feb 2021 05:32:48 -0800 (PST) Received: from localhost (91-166-131-65.subs.proxad.net. [91.166.131.65]) by smtp.gmail.com with ESMTPSA id q7sm27907004wrx.18.2021.02.01.05.32.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Feb 2021 05:32:27 -0800 (PST) Received: by localhost (Postfix, from userid 1000) id 4E2CE581C93; Mon, 1 Feb 2021 14:32:09 +0100 (CET) To: libabigail@sourceware.org Subject: [PATCH ] Bug 26684 - Support DW_AT_data_bit_offset attribute Organization: Red Hat / France X-Operating-System: Fedora 34 X-URL: http://www.redhat.com Date: Mon, 01 Feb 2021 14:32:09 +0100 Message-ID: <8735yfhq1y.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 X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_LOTSOFHASH, NORMAL_HTTP_TO_IP, NUMERIC_HTTP_ADDR, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SCC_10_SHORT_WORD_LINES, SCC_20_SHORT_WORD_LINES, SCC_35_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: Dodji Seketeli via Libabigail From: Dodji Seketeli Reply-To: Dodji Seketeli Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" Hello, This patch adds support for the DW_AT_data_bit_offset DWARF 5 attribute. Note that this attribute has been introduced in prior versions of DWARF, but since the version 5, it supersedes the DW_AT_bit_offset attribute. Note that Libabigail was wrongly interpreting the DW_AT_bit_offset attribute. It was considering it as the offset of the bit field data member, starting from the least significant bit of the containing structure. That is not the case on little endian machines, unfortunately. So this patch fixes that mistake. So with this patch, we can now compare a binary using DW_AT_bit_offset against a binary using DW_AT_data_bit_offset and expect things to work correctly. The problem is that abixml files generated with Libabigail versions prior to this patch contain bit field data member offset values that are not compatible with those contained in abixml files generated with this version, onward. So I guess a subsequent patch is needed to introduce a new abixml version string (maybe "2.0") that would be deemed incompatible with the previous "1.0" one. That way, we can prevent comparing 2.0 abixml files against 1.0 ones in abidiff, for instance. For now, the patch adjusts the various abixml files to make them reflect the proper representation of DW_AT_bit_offset on little endian machines. * src/abg-dwarf-reader.cc (read_and_convert_DW_at_bit_offset): Define new static function. (die_member_offset): Primarily use DW_AT_data_bit_offset if its present. Otherwise, look for DW_AT_bit_offset. Use the new read_and_convert_DW_at_bit_offset function to properly interpret DW_AT_bit_offset if its present. Update comment. * tests/data/test-diff-filter/test-PR26684-dwarf{4,5}.o: New binary test inputs. * tests/data/test-diff-filter/test-PR26684.c: Source code of the new binary test inputs above. * tests/data/test-diff-filter/test-PR26684-report-0.txt: New reference test output. * tests/data/Makefile.am: Add the new test material above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the test inputs above to this test harness. * tests/data/test-annotate/test13-pr18894.so.abi: Adjust. * tests/data/test-annotate/test15-pr18892.so.abi: Adjust. * tests/data/test-annotate/test17-pr19027.so.abi: Adjust. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-annotate/test21-pr19092.so.abi: Adjust. * tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi: Adjust. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Adjust. * tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Adjust. * tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi: Adjust. * tests/data/test-read-dwarf/test13-pr18894.so.abi: Adjust. * tests/data/test-read-dwarf/test15-pr18892.so.abi: Adjust. * tests/data/test-read-dwarf/test16-pr18904.so.abi: Adjust. * tests/data/test-read-dwarf/test17-pr19027.so.abi: Adjust. * tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi: Adjust. * tests/data/test-read-dwarf/test21-pr19092.so.abi: Adjust. * tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi: Adjust. Signed-off-by: Dodji Seketeli Applied to master. --- src/abg-dwarf-reader.cc | 254 +++++++++++++++++- tests/data/Makefile.am | 4 + .../data/test-annotate/test13-pr18894.so.abi | 64 ++--- .../data/test-annotate/test15-pr18892.so.abi | 4 +- .../data/test-annotate/test17-pr19027.so.abi | 12 +- ...19-pr19023-libtcmalloc_and_profiler.so.abi | 16 +- .../data/test-annotate/test21-pr19092.so.abi | 80 +++--- .../PR25409-librte_bus_dpaa.so.20.0.abi | 214 +++++++-------- .../test-diff-filter/test-PR26684-dwarf4.o | Bin 0 -> 2336 bytes .../test-diff-filter/test-PR26684-dwarf5.o | Bin 0 -> 2320 bytes .../test-PR26684-report-0.txt | 0 tests/data/test-diff-filter/test-PR26684.c | 14 + ...4--libcdio-0.94-2.fc26.x86_64-report.1.txt | 18 +- .../data/test-read-dwarf/PR25007-sdhci.ko.abi | 174 ++++++------ .../PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi | 48 ++-- .../test-read-dwarf/test13-pr18894.so.abi | 64 ++--- .../test-read-dwarf/test15-pr18892.so.abi | 4 +- .../test-read-dwarf/test16-pr18904.so.abi | 44 +-- .../test-read-dwarf/test17-pr19027.so.abi | 12 +- ...19-pr19023-libtcmalloc_and_profiler.so.abi | 16 +- .../test-read-dwarf/test21-pr19092.so.abi | 80 +++--- .../test22-pr19097-libstdc++.so.6.0.17.so.abi | 14 +- tests/test-diff-filter.cc | 7 + 23 files changed, 699 insertions(+), 444 deletions(-) create mode 100644 tests/data/test-diff-filter/test-PR26684-dwarf4.o create mode 100644 tests/data/test-diff-filter/test-PR26684-dwarf5.o create mode 100644 tests/data/test-diff-filter/test-PR26684-report-0.txt create mode 100644 tests/data/test-diff-filter/test-PR26684.c diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc index 4b39e966..761af3ec 100644 --- a/src/abg-dwarf-reader.cc +++ b/src/abg-dwarf-reader.cc @@ -10307,6 +10307,223 @@ eval_last_constant_dwarf_sub_expr(Dwarf_Op* expr, // // ----------------------------------- +/// Convert the value of the DW_AT_bit_offset attribute into the value +/// of the DW_AT_data_bit_offset attribute. +/// +/// On big endian machines, the value of the DW_AT_bit_offset +/// attribute is the same as the value of the DW_AT_data_bit_offset +/// attribute. +/// +/// On little endian machines however, the situation is different. +/// The DW_AT_bit_offset value for a bit field is the number of bits +/// to the left of the most significant bit of the bit field. +/// +/// The DW_AT_data_bit_offset offset value is the number of bits to +/// the right of the least significant bit of the bit field. +/// +/// In other words, DW_AT_data_bit_offset is what everybody would +/// instinctively think of as being the "offset of the bit +/// field". DW_AT_bit_offset however is very counter-intuitive on +/// little endian machines. +/// +/// This function thus reads the value of a DW_AT_bit_offset property +/// of a DIE and converts it into what the DW_AT_data_bit_offset would +/// have been if it was present. +/// +/// Note that DW_AT_bit_offset has been made obsolete starting from +/// DWARF5. +/// +/// If you like coffee and it's not too late, now might be a good time +/// to have a coffee break. Otherwise if it's late at night, you +/// might want to consider an herbal tea break. Then come back to +/// read this. +/// +/// +/// Okay, to have a better idea of what DW_AT_bit_offset and +/// DW_AT_data_bit_offset represent, let's consider a struct 'S' which +/// have bit fields data members defined as: +/// +/// struct S +/// { +/// int j:5; +/// int k:6; +/// int m:5; +/// int n:8; +/// }; +/// +/// The below wonderful (at least!) ASCII art sketch describes the +/// layout of the bitfields of 'struct S' on a little endian machine. +/// You need to read the sketch from the bottom-up. +/// +/// So please scroll down to its bottom. Note how the 32 bits integer +/// word containing the bit fields is laid out with its least +/// significant bit starting on the right hand side, at index 0. +/// +/// Then slowly scroll up starting from there, and take the time to +/// read each line and see how the bit fields are laid out and what +/// DW_AT_bit_offset and DW_AT_data_bit_offset represent for each of +/// the bit fields. +/// +/// DW_AT_bit_offset(n) +/// < - - - - - - > +/// | | n | +/// ^ ^< - - - - >^ +/// DW_AT_data_bit_offset(n) +/// < - - - - - - - - - - - - - - - > +/// | | +/// ^ ^ +/// DW_AT_bit_offset(m) +/// <---------------------------------> +/// | | m | +/// ^ ^< - >^ +/// DW_AT_data_bit_offset(m) +/// < - - - - - - - - - - > +/// | | +/// ^ ^ +/// DW_AT_bit_offset(k) +/// <--------------------------------------------> +/// | | k | +/// ^ ^< - - >^ +/// DW_AT_data_bit_offset(k) +/// < - - - - > +/// | | +/// ^ ^ +/// DW_AT_bit_offset(j) +/// <--------------------------------------------------------> +/// | | +/// ^ ^ +/// n m k j +/// < - - - - - - > < - - - > < - - - - > < - - - > +/// +/// | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +/// ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ +/// 31 27 23 16 15 11 10 6 5 4 0 +/// +/// So, the different bit fields all fit in one 32 bits word, assuming +/// the bit fields are tightly packed. +/// +/// Let's look at what DW_AT_bit_offset of the 'j' bit field would be +/// on this little endian machine and let's see how it relates to +/// DW_AT_data_bit_offset of j. +/// +/// DW_AT_bit_offset(j) would be equal to the number of bits from the +/// left of the 32 bits word (i.e from bit number 31) to the most +/// significant bit of the j bit field (i.e, bit number 4). Thus: +/// +/// DW_AT_bit_offset(j) = +/// sizeof_in_bits(int) - size_in_bits_of(j) = 32 - 5 = 27. +/// +/// DW_AT_data_bit_offset(j) is the number of bits from the right of the +/// 32 bits word (i.e, bit number 0) to the lest significant bit of +/// the 'j' bit field (ie, bit number 0). Thus: +/// +/// DW_AT_data_bit_offset(j) = 0. +/// +/// More generally, we can notice that: +/// +/// sizeof_in_bits(int) = +/// DW_AT_bit_offset(j) + sizeof_in_bits(j) + DW_AT_data_bit_offset(j). +/// +/// It follows that: +/// +/// DW_AT_data_bit_offset(j) = +/// sizeof_in_bits(int) - sizeof_in_bits(j) - DW_AT_bit_offset(j); +/// +/// Thus: +/// +/// DW_AT_data_bit_offset(j) = 32 - 27 - 5 = 0; +/// +/// Note that DW_AT_data_bit_offset(j) is the offset of 'j' starting +/// from the right hand side of the word. It is what we would +/// intuitively think it is. DW_AT_bit_offset however is super +/// counter-intuitive, pfff. +/// +/// Anyway, this general equation holds true for all bit fields. +/// +/// Similarly, it follows that: +/// +/// DW_AT_bit_offset(k) = +/// sizeof_in_bits(int) - sizeof_in_bits(k) - DW_AT_data_bit_offset(k); +/// +/// Thus: +/// DW_AT_bit_offset(k) = 32 - 6 - 5 = 21. +/// +/// +/// Likewise: +/// +/// DW_AT_bit_offset(m) = +/// sizeof_in_bits(int) - sizeof_in_bits(m) - DW_AT_data_bit_offset(m); +/// +/// +/// Thus: +/// DW_AT_bit_offset(m) = 32 - 5 - (5 + 6) = 16. +/// +/// And: +/// +/// +/// Lastly: +/// +/// DW_AT_bit_offset(n) = +/// sizeof_in_bits(int) - sizeof_in_bits(n) - DW_AT_bit_offset(n); +/// +/// Thus: +/// DW_AT_bit_offset(n) = 32 - 8 - (5 + 6 + 5) = 8. +/// +/// Luckily, the body of the function is much smaller than this +/// comment. Enjoy! +/// +/// @param die the DIE to consider. +/// +/// @param is_big_endian this is true iff the machine we are looking at +/// is big endian. +/// +/// @param offset this is the output parameter into which the value of +/// the DW_AT_bit_offset is put, converted as if it was the value of +/// the DW_AT_data_bit_offset parameter. This parameter is set iff +/// the function returns true. +/// +/// @return true if DW_AT_bit_offset was found on @p die. +static bool +read_and_convert_DW_at_bit_offset(const Dwarf_Die* die, + bool is_big_endian, + uint64_t &offset) +{ + uint64_t off = 0; + if (!die_unsigned_constant_attribute(die, DW_AT_bit_offset, off)) + return false; + + if (is_big_endian) + { + offset = off; + return true; + } + + // Okay, we are looking at a little endian machine. We need to + // convert DW_AT_bit_offset into what DW_AT_data_bit_offset would + // have been. To understand this, you really need to read the + // preliminary comment of this function. + uint64_t containing_anonymous_object_size = 0; + ABG_ASSERT(die_unsigned_constant_attribute(die, DW_AT_byte_size, + containing_anonymous_object_size)); + containing_anonymous_object_size *= 8; + + uint64_t bitfield_size = 0; + ABG_ASSERT(die_unsigned_constant_attribute(die, DW_AT_bit_size, + bitfield_size)); + + // As noted in the the preliminary comment of this function if we + // want to get the DW_AT_data_bit_offset of a bit field 'k' from the + // its DW_AT_bit_offset value, the equation is: + // + // DW_AT_data_bit_offset(k) = + // sizeof_in_bits(containing_anonymous_object_size) + // - DW_AT_data_bit_offset(k) + // - sizeof_in_bits(k) + offset = containing_anonymous_object_size - off - bitfield_size; + + return true; +} + /// Get the offset of a struct/class member as represented by the /// value of the DW_AT_data_member_location attribute. /// @@ -10314,10 +10531,10 @@ eval_last_constant_dwarf_sub_expr(Dwarf_Op* expr, /// DW_AT_data_member_location is not necessarily a constant that one /// would just read and be done with it. Rather, it can be a DWARF /// expression that one has to interpret. In general, the offset can -/// be given by the DW_AT_bit_offset attribute. In that case the -/// offset is a constant. But it can also be given by the -/// DW_AT_data_member_location attribute. In that case it's a DWARF -/// location expression. +/// be given by the DW_AT_bit_offset or DW_AT_data_bit_offset +/// attribute. In that case the offset is a constant. But it can +/// also be given by the DW_AT_data_member_location attribute. In +/// that case it's a DWARF location expression. /// /// When the it's the DW_AT_data_member_location that is present, /// there are three cases to possibly take into account: @@ -10363,15 +10580,28 @@ die_member_offset(const read_context& ctxt, uint64_t expr_len = 0; uint64_t off = 0; - if (die_unsigned_constant_attribute(die, DW_AT_bit_offset, off)) + // First let's see if the DW_AT_data_bit_offset attribute is + // present. + if (die_unsigned_constant_attribute(die, DW_AT_data_bit_offset, off)) { - // The DW_AT_bit_offset is present. If it contains a non-zero - // value, let's read that one. - if (off != 0) - { - offset = off; - return true; - } + offset = off; + return true; + } + + // Otherwise, let's see if the DW_AT_bit_offset attribute is + // present. On little endian machines, we need to convert this + // attribute into what it would have been if the + // DW_AT_data_bit_offset was used instead. In other words, + // DW_AT_bit_offset needs to be converted into a + // human-understandable form that represents the offset of the + // bitfield data member it describes. For details about the + // conversion, please read the extensive comments of + // read_and_convert_DW_at_bit_offset. + bool is_big_endian = architecture_is_big_endian(ctxt.elf_handle()); + if (read_and_convert_DW_at_bit_offset(die, is_big_endian, off)) + { + offset = off; + return true; } if (!die_location_expr(die, DW_AT_data_member_location, &expr, &expr_len)) diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index a23dbc63..e1354534 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -913,6 +913,10 @@ test-diff-filter/test-PR26739-2-v0.c \ test-diff-filter/test-PR26739-2-v0.o \ test-diff-filter/test-PR26739-2-v1.o \ test-diff-filter/test-PR26739-2-report-0.txt \ +test-diff-filter/test-PR26684-dwarf5.o \ +test-diff-filter/test-PR26684-dwarf4.o \ +test-diff-filter/test-PR26684.c \ +test-diff-filter/test-PR26684-report-0.txt \ \ test-diff-suppr/test0-type-suppr-v0.cc \ test-diff-suppr/test0-type-suppr-v1.cc \ diff --git a/tests/data/test-annotate/test13-pr18894.so.abi b/tests/data/test-annotate/test13-pr18894.so.abi index 5e51cac5..cad84c9b 100644 --- a/tests/data/test-annotate/test13-pr18894.so.abi +++ b/tests/data/test-annotate/test13-pr18894.so.abi @@ -516,19 +516,19 @@ - + - + - + - + @@ -562,23 +562,23 @@ - + - + - + - + - + @@ -799,27 +799,27 @@ - + - + - + - + - + - + @@ -1087,11 +1087,11 @@ - + - + @@ -1103,7 +1103,7 @@ - + @@ -1173,11 +1173,11 @@ - + - + @@ -1247,11 +1247,11 @@ - + - + @@ -1288,7 +1288,7 @@ - + @@ -1331,11 +1331,11 @@ - + - + @@ -1377,11 +1377,11 @@ - + - + @@ -1393,7 +1393,7 @@ - + @@ -1434,11 +1434,11 @@ - + - + @@ -3433,11 +3433,11 @@ - + - + diff --git a/tests/data/test-annotate/test15-pr18892.so.abi b/tests/data/test-annotate/test15-pr18892.so.abi index cacace2a..274aceb9 100644 --- a/tests/data/test-annotate/test15-pr18892.so.abi +++ b/tests/data/test-annotate/test15-pr18892.so.abi @@ -11541,11 +11541,11 @@ - + - + diff --git a/tests/data/test-annotate/test17-pr19027.so.abi b/tests/data/test-annotate/test17-pr19027.so.abi index 427b8703..a0bce9e2 100644 --- a/tests/data/test-annotate/test17-pr19027.so.abi +++ b/tests/data/test-annotate/test17-pr19027.so.abi @@ -16877,7 +16877,7 @@ - + @@ -16914,11 +16914,11 @@ - + - + @@ -17098,15 +17098,15 @@ - + - + - + diff --git a/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi b/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi index 1ba7ead9..0c5063b8 100644 --- a/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi +++ b/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi @@ -3145,19 +3145,19 @@ - + - + - + - + @@ -24392,19 +24392,19 @@ - + - + - + - + diff --git a/tests/data/test-annotate/test21-pr19092.so.abi b/tests/data/test-annotate/test21-pr19092.so.abi index 9d4a6417..4bf3a6c8 100644 --- a/tests/data/test-annotate/test21-pr19092.so.abi +++ b/tests/data/test-annotate/test21-pr19092.so.abi @@ -1323,15 +1323,15 @@ - + - + - + @@ -1453,11 +1453,11 @@ - + - + @@ -1465,11 +1465,11 @@ - + - + @@ -1638,7 +1638,7 @@ - + @@ -1712,7 +1712,7 @@ - + @@ -2745,27 +2745,27 @@ - + - + - + - + - + - + @@ -2858,7 +2858,7 @@ - + @@ -6433,15 +6433,15 @@ - + - + - + @@ -6478,15 +6478,15 @@ - + - + - + @@ -8237,7 +8237,7 @@ - + @@ -8346,27 +8346,27 @@ - + - + - + - + - + - + @@ -9908,15 +9908,15 @@ - + - + - + @@ -10045,15 +10045,15 @@ - + - + - + @@ -12659,26 +12659,26 @@ - + - + - + - + - + diff --git a/tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi b/tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi index 3c4e1021..c9a7bc08 100644 --- a/tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi +++ b/tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi @@ -1,4 +1,4 @@ - + @@ -587,10 +587,10 @@ - + - + @@ -1021,19 +1021,19 @@ - + - + - + - + @@ -1044,10 +1044,10 @@ - + - + @@ -1066,13 +1066,13 @@ - + - + - + @@ -1085,18 +1085,18 @@ - + - + - + - + @@ -1215,7 +1215,7 @@ - + @@ -1232,13 +1232,13 @@ - + - + - + @@ -1247,7 +1247,7 @@ - + @@ -1371,10 +1371,10 @@ - + - + @@ -1399,16 +1399,16 @@ - + - + - + - + @@ -1421,10 +1421,10 @@ - + - + @@ -1440,21 +1440,21 @@ - + - + - + - + - + @@ -1492,16 +1492,16 @@ - + - + - + - + @@ -1625,19 +1625,19 @@ - + - + - + - + - + @@ -1679,13 +1679,13 @@ - + - + - + @@ -1745,10 +1745,10 @@ - + - + @@ -1818,64 +1818,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1887,7 +1887,7 @@ - + @@ -1935,19 +1935,19 @@ - + - + - + - + @@ -2001,10 +2001,10 @@ - + - + @@ -2020,10 +2020,10 @@ - + - + @@ -2068,10 +2068,10 @@ - + - + @@ -2094,10 +2094,10 @@ - + - + @@ -2186,22 +2186,22 @@ - + - + - + - + - + @@ -2347,22 +2347,22 @@ - + - + - + - + - + @@ -2375,10 +2375,10 @@ - + - + @@ -2667,22 +2667,22 @@ - + - + - + - + - + @@ -3545,19 +3545,19 @@ - + - + - + - + - + @@ -3609,13 +3609,13 @@ - + - + - + @@ -3692,13 +3692,13 @@ - + - + - + @@ -3983,13 +3983,13 @@ - + - + - + diff --git a/tests/data/test-diff-filter/test-PR26684-dwarf4.o b/tests/data/test-diff-filter/test-PR26684-dwarf4.o new file mode 100644 index 0000000000000000000000000000000000000000..018c90704abb9d4bd5c5aa5c49ddcc798bb8b343 GIT binary patch literal 2336 zcmbtU&2G~`5FW=#|JnJbjo^6cD1oHk?@k1u$}F zdLvRBFb5alJ?h!W)}pZ4Nasst$Q;lVO>+@Y2~=kCq(jyLMb|vkH03&EU9<|Zbq%sj zv=(CPDnKrq^ZXE|w5Wpo5R~F9!Y~~rq-3DXE6c@_t`?VybC&=zB}LVAeN(@u-_?~8 z9$f&n7@Lnv8#*43fF=N4FX*#6!MU5D>)X1j0ZehV2#~L($oCgBm+{0a_+;p4K<*g1 zjhG6{xGKu8Vgc9aj`4~V2-zq!_x7vx`bN!aM#169kU?+YcMN(}yF2JJyESON_Uw)q z+C9&8T(9GJJ)4Kwlw)MKoY09>v*oqhX4~t9ERgf>K7V2CRMw43*{WI=>4s&hQF#F-5&$c?uXMxv5(+Qg0t>cZlS+5ypr}fqe+GY)4cV}nQSi!`r z|B!Xe?W7=Tnk@YMoq`fo9ova?vGLU>M6RfDkI68iafiwd6{ch;vQ@}Wz^5nRGZXN0 ze?!7i0eel7Ike|f^(Sp5b<2>)iOT6@p_5CTNH|sdia?b4cmshyfxFo^fA&_Z?`f<;XamOC1O z6|kOTwU~R@Iq>}U0DY0}xNg9X&bghy@jDDdVn)yNnb0viSj|Dd&+yl?{6WYp>}+!s zI?XpxMgO%dVKlwFcwdpMArxsRZdz`jLD<=_i@l9_`)ifsZy|%e-=z5Tx20sVT|rFF zNxTLvC?Dc2S!M1W^w8heNEos5jTiKt;|1J_C(frKOR|NJoRjb$w4em>maH;&4?QwQ zJ|{qy>aoM`S<%IheRAYMWUCMFumwmofE+HGx@+Y|l+ z{TV*_>Z^arXCHKC_ndY;Y!eeF>6w{tE@#f{FkC!+@oa)Iki=jUMw&zc(y@_T@x=${m`mL2I>z#LmlWppjIkV;~`_)isOjMxJd zHCV)xv0teqo_ zPSvhDP1|YbL|Be;403hbvwhL5JB^0faM~X4tNFKIy*9QAkBmazDq01jm@noF`TVM} zw9o6tj_nD9xw>qa9q-uX8%^%=zEeZh?$=ryXXTPvS~1LK{nYL^%vFHxt*td<2@@~> zL)KAKA|#rvN%;9Y!i4>cnmp=j(0MgRLrWBC!Khs_X)tvOBS3@r7<_sRJ~IZN9fRYj zDU?QiE>!<;s+3{ri8yJeo5Qb23OnIc?K`2*EBH&HUsZ4%cb{&CaCsL&4?}pk8}Aid zt_N4(^d-aHkTp}C(${yj2In2mu7Wl2`T=iA$>V1pSTyrsRR;sG`n+vhbzVJg9y)HL zi#A`jtJOX~`O9qgZMVrWB=BfEE|)T92dmcYbU6OyS#Hd#0>;wY z<$GnSiWC&CPJ9;agsGEVQR1Yk#@|N+eZO(>;crVhRK0+hnv?u0bReAuYo@{{+|jwRZ_pPG~K?{px24A}5gefQ9!V&uFeK!cPJslLzA7FB=C z|L+AL>!kW=YpC@fBBtg<2zCURBPB$tFO48!`H&BZr^4}@g3EZxPtYC}zbIDdxcg=N zg@{+KfrIE3eCe%}C(8AW0L$Vc+B>u#)c( - + @@ -900,31 +900,31 @@ - + - + - + - + - + - + - + - + - + @@ -1157,16 +1157,16 @@ - + - + - + - + @@ -1192,19 +1192,19 @@ - + - + - + - + - + @@ -3319,13 +3319,13 @@ - + - + - + @@ -3934,37 +3934,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -4606,19 +4606,19 @@ - + - + - + - + - + @@ -4704,16 +4704,16 @@ - + - + - + - + @@ -5471,10 +5471,10 @@ - + - + @@ -6341,10 +6341,10 @@ - + - + @@ -7581,10 +7581,10 @@ - + - + @@ -7882,34 +7882,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -7927,19 +7927,19 @@ - + - + - + - + - + @@ -7963,37 +7963,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -8082,10 +8082,10 @@ - + - + @@ -8707,19 +8707,19 @@ - + - + - + - + - + @@ -9005,22 +9005,22 @@ - + - + - + - + - + - + diff --git a/tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi b/tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi index 7c082339..24e7feff 100644 --- a/tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi +++ b/tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi @@ -166,28 +166,28 @@ - + - + - + - + - + - + - + - + @@ -232,16 +232,16 @@ - + - + - + - + @@ -509,28 +509,28 @@ - + - + - + - + - + - + - + - + @@ -575,16 +575,16 @@ - + - + - + - + diff --git a/tests/data/test-read-dwarf/test13-pr18894.so.abi b/tests/data/test-read-dwarf/test13-pr18894.so.abi index 3d9b3b9d..5efa92d3 100644 --- a/tests/data/test-read-dwarf/test13-pr18894.so.abi +++ b/tests/data/test-read-dwarf/test13-pr18894.so.abi @@ -268,16 +268,16 @@ - + - + - + - + @@ -301,19 +301,19 @@ - + - + - + - + - + @@ -463,22 +463,22 @@ - + - + - + - + - + - + @@ -633,10 +633,10 @@ - + - + @@ -645,7 +645,7 @@ - + @@ -692,10 +692,10 @@ - + - + @@ -743,10 +743,10 @@ - + - + @@ -773,7 +773,7 @@ - + @@ -804,10 +804,10 @@ - + - + @@ -834,10 +834,10 @@ - + - + @@ -846,7 +846,7 @@ - + @@ -876,10 +876,10 @@ - + - + @@ -2030,10 +2030,10 @@ - + - + diff --git a/tests/data/test-read-dwarf/test15-pr18892.so.abi b/tests/data/test-read-dwarf/test15-pr18892.so.abi index 34ff0fb8..dd370815 100644 --- a/tests/data/test-read-dwarf/test15-pr18892.so.abi +++ b/tests/data/test-read-dwarf/test15-pr18892.so.abi @@ -7139,10 +7139,10 @@ - + - + diff --git a/tests/data/test-read-dwarf/test16-pr18904.so.abi b/tests/data/test-read-dwarf/test16-pr18904.so.abi index 01605868..47b20541 100644 --- a/tests/data/test-read-dwarf/test16-pr18904.so.abi +++ b/tests/data/test-read-dwarf/test16-pr18904.so.abi @@ -2800,46 +2800,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3736,10 +3736,10 @@ - + - + @@ -3756,10 +3756,10 @@ - + - + @@ -3843,20 +3843,20 @@ - + - + - + - + diff --git a/tests/data/test-read-dwarf/test17-pr19027.so.abi b/tests/data/test-read-dwarf/test17-pr19027.so.abi index f0388775..f98624d8 100644 --- a/tests/data/test-read-dwarf/test17-pr19027.so.abi +++ b/tests/data/test-read-dwarf/test17-pr19027.so.abi @@ -11151,7 +11151,7 @@ - + @@ -11179,10 +11179,10 @@ - + - + @@ -11309,13 +11309,13 @@ - + - + - + diff --git a/tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi b/tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi index d2e97237..71f8a129 100644 --- a/tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi +++ b/tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi @@ -1806,16 +1806,16 @@ - + - + - + - + @@ -15168,16 +15168,16 @@ - + - + - + - + diff --git a/tests/data/test-read-dwarf/test21-pr19092.so.abi b/tests/data/test-read-dwarf/test21-pr19092.so.abi index 393679a8..cf635351 100644 --- a/tests/data/test-read-dwarf/test21-pr19092.so.abi +++ b/tests/data/test-read-dwarf/test21-pr19092.so.abi @@ -760,13 +760,13 @@ - + - + - + @@ -855,19 +855,19 @@ - + - + - + - + @@ -984,7 +984,7 @@ - + @@ -1039,7 +1039,7 @@ - + @@ -1658,22 +1658,22 @@ - + - + - + - + - + - + @@ -1739,7 +1739,7 @@ - + @@ -4341,13 +4341,13 @@ - + - + - + @@ -4374,13 +4374,13 @@ - + - + - + @@ -5416,7 +5416,7 @@ - + @@ -5496,22 +5496,22 @@ - + - + - + - + - + - + @@ -6633,13 +6633,13 @@ - + - + - + @@ -6735,13 +6735,13 @@ - + - + - + @@ -8338,21 +8338,21 @@ - + - + - + - + - + diff --git a/tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi b/tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi index cd8fd33f..807cf30f 100644 --- a/tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi +++ b/tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi @@ -41846,10 +41846,10 @@ - + - + @@ -42056,10 +42056,10 @@ - + - + @@ -51947,13 +51947,13 @@ - + - + - + diff --git a/tests/test-diff-filter.cc b/tests/test-diff-filter.cc index f378fa23..50e2f226 100644 --- a/tests/test-diff-filter.cc +++ b/tests/test-diff-filter.cc @@ -773,6 +773,13 @@ InOutSpec in_out_specs[] = "data/test-diff-filter/test-PR26739-2-report-0.txt", "output/test-diff-filter/test-PR26739-2-report-0.txt", }, + { + "data/test-diff-filter/test-PR26684-dwarf4.o", + "data/test-diff-filter/test-PR26684-dwarf5.o", + "--no-default-suppression --leaf-changes-only", + "data/test-diff-filter/test-PR26684-report-0.txt", + "output/test-diff-filter/test-PR26684-report-0.txt", + }, // This should be the last entry {NULL, NULL, NULL, NULL, NULL} };