From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay12.mail.gandi.net (relay12.mail.gandi.net [217.70.178.232]) by sourceware.org (Postfix) with ESMTPS id F1FB138582BA for ; Fri, 8 Jul 2022 13:46:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F1FB138582BA Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=seketeli.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=seketeli.org Received: (Authenticated sender: dodji@seketeli.org) by mail.gandi.net (Postfix) with ESMTPSA id E8248200004; Fri, 8 Jul 2022 13:46:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seketeli.org; s=gm1; t=1657287980; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=E3cwBfcNcY9hty7eBhpnUF95Kz1FkkwszmaJd/+3UyU=; b=YRbInlXfR0AxUe9M/a3qA1BXDOCYnzf6ldXl6n3SRxZa87LgFMWPlOP5+GPxErC/2k5rj+ PgdOl6E59EgCZroPP5llUwTCnIMBTBfSkb21tP6+E3eL68hxBPDtHTCEAqi/ffWZ7HseqL Di7YrzfvQn2V/FL3/9HiPKdZjoojoVWsl7o9kGvGmWXfw6xLMc5OQqYegcDv4Hz0aD29f+ KtCjFVDTynOkPiGzchFdHyNvlXM7AouBr33Zg9+kr9ouwM4vbo5F4RaIK1jWPaNxoSdWz6 UYYnBgM+XxXWAWlTXK6IFL4DyT4u4LY1dpcZugKD1JjGtTihyRISJQAT2pT/Cg== Received: by localhost (Postfix, from userid 1000) id 1C5365800FC; Fri, 8 Jul 2022 15:46:12 +0200 (CEST) From: Dodji Seketeli To: "Guillermo E. Martinez via Libabigail" Subject: Re: [PATCH v2] Add regression tests for abipkgdiff using ctf info Organization: Me, myself and I References: <20220623151642.1904752-1-guillermo.e.martinez@oracle.com> <20220705010023.349341-1-guillermo.e.martinez@oracle.com> X-Operating-System: Fedora 37 X-URL: http://www.seketeli.net/~dodji Date: Fri, 08 Jul 2022 15:46:11 +0200 In-Reply-To: <20220705010023.349341-1-guillermo.e.martinez@oracle.com> (Guillermo E. Martinez via Libabigail's message of "Mon, 4 Jul 2022 20:00:22 -0500") Message-ID: <87h73rbtuk.fsf@seketeli.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Mailman-Approved-At: Fri, 08 Jul 2022 13:59:50 +0000 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-List-Received-Date: Fri, 08 Jul 2022 13:46:29 -0000 Hello Guillermo, "Guillermo E. Martinez via Libabigail" a =C3=A9crit: > Hello, > > This patch is meant to execute the testsuite for abipkgdiff tool using > sources with CTF debug info. Main changes from v1: > > - Use tests/test-diff-pkg.cc to run both CTF and DWARF testsuite. > > Comments will be welcomed and appreciated. Thanks! The patch looks good. It however lacks the ChangeLog part of the commit log, so I have added it. But then I cannot commit it because you haven't provided the 'signed-of-by' mention, which is needed before I can commit. Please find below the amended version that I came up with. Could you please add a signed-of-by mention to it and send it back to the list so that I can commit it? Cheers, >From 786b2cc9f00645f8ba7704bc0cd639e7d3c37f3d Mon Sep 17 00:00:00 2001 From: Guillermo E. Martinez Date: Mon, 4 Jul 2022 20:00:22 -0500 Subject: [PATCH] Add regression tests for abipkgdiff using ctf info This patch is meant to execute the testsuite for abipkgdiff tool using sources with CTF debug info. * doc/manuals/abipkgdiff.rst: Document the fact that abipkgdiff now supports the CTF format. * tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-report-0.txt: New test input. * tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u0.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u6.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-0-dir1/dir.abignore: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-0-dir1/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-0-dir1/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-0-dir2/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-0-dir2/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-0-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-dir1/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-dir1/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-dir2/dir.abignore: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-dir2/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-dir2/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-1-report-1.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-dir1/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-dir1/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/.abignore: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/dir.abignore: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-2-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-dir1/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-dir1/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-dir2/.abignore: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-dir2/libobj-v0.so: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-dir2/obj-v0.c: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-report-1.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3-report-2.txt: Likewise. * tests/data/test-diff-pkg-ctf/dirpkg-3.suppr: Likewise. * tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-1.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-2.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-report-1.txt: Likewise. * tests/data/test-diff-pkg-ctf/gmp-6.1.2-8-ol8u0.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/gmp-6.2.0-10-ol9u0.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/isl-0.16.1-6.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/isl-0.16.1-7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/isl-0.16.1-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/isl-debuginfo-0.16.1-6.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/isl-debuginfo-0.16.1-7.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/libdwarf-20180129-4-no-ctf.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/libdwarf-20180129-5-no-ctf.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/libdwarf-20180129-5.x86_64.rpm: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1-report0.txt: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/symlinks/foo.o: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/symlinks/libfoo.so: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/targets/foo.c: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/targets/foo.o: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/targets/libfoo.so: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/symlinks/foo.o: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/symlinks/libfoo.so: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/targets/foo.c: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/targets/foo.o: Likewise. * tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/targets/libfoo.so: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.ta: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.tar: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.tar.bz2: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.tar.gz: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.ta: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.tar: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.tar.bz2: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.tar.gz: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-0-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-1-dir1.tar.gz: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-1-dir2.tar.gz: Likewise. * tests/data/test-diff-pkg-ctf/tarpkg-1-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/test-rpm-report-0.txt: Likewise. * tests/data/test-diff-pkg-ctf/test-rpm-report-1.txt: Likewise. * tests/data/test-diff-pkg-ctf/test-rpm-report-2.txt: Likewise. * tests/data/test-diff-pkg-ctf/test-rpm-report-3.txt: Likewise. * tests/data/test-diff-pkg-ctf/test-rpm-report-4.txt: Likewise. * tests/data/test-diff-pkg-ctf/test-rpm-report-5.txt: Likewise. * tests/data/Makefile.am: Add the test material above to source distribution. * tests/test-diff-pkg.cc (in_out_spec): Add the test inputs above to this harness. Signed-off-by: Dodji Seketeli --- doc/manuals/abipkgdiff.rst | 9 +- tests/data/Makefile.am | 77 +++++ .../cracklib-2.9.6-15-ol8.x86_64-report-0.txt | 10 + .../cracklib-2.9.6-15-ol8u0.x86_64.rpm | Bin 0 -> 100854 bytes .../cracklib-2.9.6-15-ol8u6.x86_64.rpm | Bin 0 -> 100854 bytes .../dirpkg-0-dir1/dir.abignore | 4 + .../dirpkg-0-dir1/libobj-v0.so | Bin 0 -> 15520 bytes .../test-diff-pkg-ctf/dirpkg-0-dir1/obj-v0.c | 11 + .../dirpkg-0-dir2/libobj-v0.so | Bin 0 -> 15560 bytes .../test-diff-pkg-ctf/dirpkg-0-dir2/obj-v0.c | 12 + .../test-diff-pkg-ctf/dirpkg-0-report-0.txt | 0 .../dirpkg-1-dir1/libobj-v0.so | Bin 0 -> 15520 bytes .../test-diff-pkg-ctf/dirpkg-1-dir1/obj-v0.c | 11 + .../dirpkg-1-dir2/dir.abignore | 4 + .../dirpkg-1-dir2/libobj-v0.so | Bin 0 -> 15560 bytes .../test-diff-pkg-ctf/dirpkg-1-dir2/obj-v0.c | 12 + .../test-diff-pkg-ctf/dirpkg-1-report-0.txt | 0 .../test-diff-pkg-ctf/dirpkg-1-report-1.txt | 15 + .../dirpkg-2-dir1/libobj-v0.so | Bin 0 -> 15600 bytes .../test-diff-pkg-ctf/dirpkg-2-dir1/obj-v0.c | 19 ++ .../test-diff-pkg-ctf/dirpkg-2-dir2/.abignore | 2 + .../dirpkg-2-dir2/dir.abignore | 2 + .../dirpkg-2-dir2/libobj-v0.so | Bin 0 -> 15656 bytes .../test-diff-pkg-ctf/dirpkg-2-dir2/obj-v0.c | 21 ++ .../test-diff-pkg-ctf/dirpkg-2-report-0.txt | 0 .../dirpkg-3-dir1/libobj-v0.so | Bin 0 -> 15600 bytes .../test-diff-pkg-ctf/dirpkg-3-dir1/obj-v0.c | 19 ++ .../test-diff-pkg-ctf/dirpkg-3-dir2/.abignore | 2 + .../dirpkg-3-dir2/libobj-v0.so | Bin 0 -> 15656 bytes .../test-diff-pkg-ctf/dirpkg-3-dir2/obj-v0.c | 21 ++ .../test-diff-pkg-ctf/dirpkg-3-report-0.txt | 0 .../test-diff-pkg-ctf/dirpkg-3-report-1.txt | 16 + .../test-diff-pkg-ctf/dirpkg-3-report-2.txt | 0 tests/data/test-diff-pkg-ctf/dirpkg-3.suppr | 2 + .../elfutils-libelf-0.186-1.x86_64.rpm | Bin 0 -> 384365 bytes .../elfutils-libelf-0.186-2.x86_64.rpm | Bin 0 -> 384437 bytes .../elfutils-libelf-0.186-report-0.txt | 0 .../elfutils-libelf-0.186-report-1.txt | 10 + .../gmp-6.1.2-8-ol8u0.x86_64.rpm | Bin 0 -> 349632 bytes .../gmp-6.2.0-10-ol9u0.x86_64.rpm | Bin 0 -> 370863 bytes .../gmp-6.x.x86_64-report-0.txt | 176 ++++++++++ .../test-diff-pkg-ctf/isl-0.16.1-6.x86_64.rpm | Bin 0 -> 1183693 bytes .../test-diff-pkg-ctf/isl-0.16.1-7.x86_64.rpm | Bin 0 -> 1183717 bytes .../test-diff-pkg-ctf/isl-0.16.1-report-0.txt | 10 + .../isl-debuginfo-0.16.1-6.x86_64.rpm | Bin 0 -> 252918 bytes .../isl-debuginfo-0.16.1-7.x86_64.rpm | Bin 0 -> 252929 bytes .../libdwarf-20180129-4-no-ctf.x86_64.rpm | Bin 0 -> 218575 bytes .../libdwarf-20180129-4.x86_64.rpm | Bin 0 -> 233283 bytes .../libdwarf-20180129-5-no-ctf.x86_64.rpm | Bin 0 -> 218627 bytes .../libdwarf-20180129-5.x86_64.rpm | Bin 0 -> 233330 bytes .../symlink-dir-test1-report0.txt | 15 + .../symlink-dir-test1/dir1/symlinks/foo.o | 1 + .../symlink-dir-test1/dir1/symlinks/libfoo.so | 1 + .../symlink-dir-test1/dir1/targets/foo.c | 10 + .../symlink-dir-test1/dir1/targets/foo.o | Bin 0 -> 3248 bytes .../symlink-dir-test1/dir1/targets/libfoo.so | Bin 0 -> 16552 bytes .../symlink-dir-test1/dir2/symlinks/foo.o | 1 + .../symlink-dir-test1/dir2/symlinks/libfoo.so | 1 + .../symlink-dir-test1/dir2/targets/foo.c | 11 + .../symlink-dir-test1/dir2/targets/foo.o | Bin 0 -> 3328 bytes .../symlink-dir-test1/dir2/targets/libfoo.so | Bin 0 -> 16616 bytes tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.ta | Bin 0 -> 20480 bytes .../data/test-diff-pkg-ctf/tarpkg-0-dir1.tar | Bin 0 -> 20480 bytes .../test-diff-pkg-ctf/tarpkg-0-dir1.tar.bz2 | Bin 0 -> 2194 bytes .../test-diff-pkg-ctf/tarpkg-0-dir1.tar.gz | Bin 0 -> 2151 bytes tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.ta | Bin 0 -> 20480 bytes .../data/test-diff-pkg-ctf/tarpkg-0-dir2.tar | Bin 0 -> 20480 bytes .../test-diff-pkg-ctf/tarpkg-0-dir2.tar.bz2 | Bin 0 -> 2226 bytes .../test-diff-pkg-ctf/tarpkg-0-dir2.tar.gz | Bin 0 -> 2180 bytes .../test-diff-pkg-ctf/tarpkg-0-report-0.txt | 15 + .../test-diff-pkg-ctf/tarpkg-1-dir1.tar.gz | Bin 0 -> 2139 bytes .../test-diff-pkg-ctf/tarpkg-1-dir2.tar.gz | Bin 0 -> 2283 bytes .../test-diff-pkg-ctf/tarpkg-1-report-0.txt | 0 .../test-diff-pkg-ctf/test-rpm-report-0.txt | 10 + .../test-diff-pkg-ctf/test-rpm-report-1.txt | 12 + .../test-diff-pkg-ctf/test-rpm-report-2.txt | 12 + .../test-diff-pkg-ctf/test-rpm-report-3.txt | 12 + .../test-diff-pkg-ctf/test-rpm-report-4.txt | 0 .../test-diff-pkg-ctf/test-rpm-report-5.txt | 0 tests/test-diff-pkg.cc | 321 ++++++++++++++++++ 80 files changed, 885 insertions(+), 2 deletions(-) create mode 100644 tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_= 64-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u0.x8= 6_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u6.x8= 6_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-0-dir1/dir.abignore create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-0-dir1/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-0-dir1/obj-v0.c create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-0-dir2/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-0-dir2/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-0-report-0.txt create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-1-dir1/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-1-dir1/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-1-dir2/dir.abignore create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-1-dir2/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-1-dir2/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-1-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-1-report-1.txt create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-2-dir1/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-2-dir1/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/.abignore create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/dir.abignore create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-2-dir2/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-2-report-0.txt create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-3-dir1/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3-dir1/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3-dir2/.abignore create mode 100755 tests/data/test-diff-pkg-ctf/dirpkg-3-dir2/libobj-v0.so create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3-dir2/obj-v0.c create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3-report-1.txt create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3-report-2.txt create mode 100644 tests/data/test-diff-pkg-ctf/dirpkg-3.suppr create mode 100644 tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-1.x8= 6_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-2.x8= 6_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-repo= rt-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/elfutils-libelf-0.186-repo= rt-1.txt create mode 100644 tests/data/test-diff-pkg-ctf/gmp-6.1.2-8-ol8u0.x86_64.r= pm create mode 100644 tests/data/test-diff-pkg-ctf/gmp-6.2.0-10-ol9u0.x86_64.= rpm create mode 100644 tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/isl-0.16.1-6.x86_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/isl-0.16.1-7.x86_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/isl-0.16.1-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/isl-debuginfo-0.16.1-6.x86= _64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/isl-debuginfo-0.16.1-7.x86= _64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/libdwarf-20180129-4-no-ctf= .x86_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64= .rpm create mode 100644 tests/data/test-diff-pkg-ctf/libdwarf-20180129-5-no-ctf= .x86_64.rpm create mode 100644 tests/data/test-diff-pkg-ctf/libdwarf-20180129-5.x86_64= .rpm create mode 100644 tests/data/test-diff-pkg-ctf/symlink-dir-test1-report0.= txt create mode 120000 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/sym= links/foo.o create mode 120000 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/sym= links/libfoo.so create mode 100644 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/tar= gets/foo.c create mode 100644 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/tar= gets/foo.o create mode 100755 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir1/tar= gets/libfoo.so create mode 120000 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/sym= links/foo.o create mode 120000 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/sym= links/libfoo.so create mode 100644 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/tar= gets/foo.c create mode 100644 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/tar= gets/foo.o create mode 100755 tests/data/test-diff-pkg-ctf/symlink-dir-test1/dir2/tar= gets/libfoo.so create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.ta create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.tar create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.tar.bz2 create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir1.tar.gz create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.ta create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.tar create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.tar.bz2 create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-dir2.tar.gz create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-0-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-1-dir1.tar.gz create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-1-dir2.tar.gz create mode 100644 tests/data/test-diff-pkg-ctf/tarpkg-1-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/test-rpm-report-0.txt create mode 100644 tests/data/test-diff-pkg-ctf/test-rpm-report-1.txt create mode 100644 tests/data/test-diff-pkg-ctf/test-rpm-report-2.txt create mode 100644 tests/data/test-diff-pkg-ctf/test-rpm-report-3.txt create mode 100644 tests/data/test-diff-pkg-ctf/test-rpm-report-4.txt create mode 100644 tests/data/test-diff-pkg-ctf/test-rpm-report-5.txt diff --git a/doc/manuals/abipkgdiff.rst b/doc/manuals/abipkgdiff.rst index f297c9a8..15ea9072 100644 --- a/doc/manuals/abipkgdiff.rst +++ b/doc/manuals/abipkgdiff.rst @@ -13,7 +13,11 @@ binaries. For a comprehensive ABI change report that includes changes about function and variable sub-types, the two input packages must be accompanied with their debug information packages that contain debug -information in `DWARF`_ format. +information either in `DWARF`_ or in `CTF` formats. Please note +however that some packages contain binaries that embed the debug +information directly in a section of said binaries. In those cases, +obviously, no separate debug information package is needed as the tool +will find the debug information inside the binaries. =20 =20 .. _abipkgdiff_invocation_label: @@ -470,7 +474,8 @@ Options =20 * ``--ctf`` =20 - This is used to compare packages with CTF debug information, if prese= nt. + This is used to compare packages with CTF debug information, if + present. =20 .. _abipkgdiff_return_value_label: =20 diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 3a7f6f67..c7875b01 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -2012,6 +2012,83 @@ test-diff-pkg/wireshark/wireshark-cli-3.4.9-1.fc36.x= 86_64-self-check-report.txt test-diff-pkg/wireshark/wireshark-cli-3.4.9-1.fc36.x86_64.rpm \ test-diff-pkg/wireshark/wireshark-cli-debuginfo-3.4.9-1.fc36.x86_64.rpm \ test-diff-pkg/wireshark/wireshark-debuginfo-3.4.9-1.fc36.x86_64.rpm \ +test-diff-pkg-ctf/tarpkg-0-dir1.tar \ +test-diff-pkg-ctf/dirpkg-0-report-0.txt \ +test-diff-pkg-ctf/isl-debuginfo-0.16.1-7.x86_64.rpm \ +test-diff-pkg-ctf/tarpkg-1-report-0.txt \ +test-diff-pkg-ctf/elfutils-libelf-0.186-1.x86_64.rpm \ +test-diff-pkg-ctf/tarpkg-0-dir2.ta \ +test-diff-pkg-ctf/elfutils-libelf-0.186-report-0.txt \ +test-diff-pkg-ctf/gmp-6.2.0-10-ol9u0.x86_64.rpm \ +test-diff-pkg-ctf/dirpkg-3-dir1/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-3-dir1/libobj-v0.so \ +test-diff-pkg-ctf/isl-0.16.1-report-0.txt \ +test-diff-pkg-ctf/tarpkg-0-dir2.tar.gz \ +test-diff-pkg-ctf/test-rpm-report-2.txt \ +test-diff-pkg-ctf/dirpkg-3-report-2.txt \ +test-diff-pkg-ctf/libdwarf-20180129-5.x86_64.rpm \ +test-diff-pkg-ctf/test-rpm-report-3.txt \ +test-diff-pkg-ctf/test-rpm-report-1.txt \ +test-diff-pkg-ctf/tarpkg-0-report-0.txt \ +test-diff-pkg-ctf/libdwarf-20180129-4-no-ctf.x86_64.rpm \ +test-diff-pkg-ctf/tarpkg-0-dir1.tar.gz \ +test-diff-pkg-ctf/dirpkg-2-report-0.txt \ +test-diff-pkg-ctf/dirpkg-1-report-1.txt \ +test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-report-0.txt \ +test-diff-pkg-ctf/dirpkg-1-report-0.txt \ +test-diff-pkg-ctf/elfutils-libelf-0.186-2.x86_64.rpm \ +test-diff-pkg-ctf/elfutils-libelf-0.186-report-1.txt \ +test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt \ +test-diff-pkg-ctf/dirpkg-0-dir2/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-0-dir2/libobj-v0.so \ +test-diff-pkg-ctf/test-rpm-report-5.txt \ +test-diff-pkg-ctf/tarpkg-1-dir2.tar.gz \ +test-diff-pkg-ctf/libdwarf-20180129-5-no-ctf.x86_64.rpm \ +test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm \ +test-diff-pkg-ctf/test-rpm-report-0.txt \ +test-diff-pkg-ctf/tarpkg-0-dir2.tar \ +test-diff-pkg-ctf/isl-0.16.1-6.x86_64.rpm \ +test-diff-pkg-ctf/dirpkg-1-dir2/dir.abignore \ +test-diff-pkg-ctf/dirpkg-1-dir2/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-1-dir2/libobj-v0.so \ +test-diff-pkg-ctf/dirpkg-3-dir2/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-3-dir2/.abignore \ +test-diff-pkg-ctf/dirpkg-3-dir2/libobj-v0.so \ +test-diff-pkg-ctf/test-rpm-report-4.txt \ +test-diff-pkg-ctf/dirpkg-2-dir1/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-2-dir1/libobj-v0.so \ +test-diff-pkg-ctf/dirpkg-3-report-1.txt \ +test-diff-pkg-ctf/tarpkg-0-dir2.tar.bz2 \ +test-diff-pkg-ctf/gmp-6.1.2-8-ol8u0.x86_64.rpm \ +test-diff-pkg-ctf/dirpkg-2-dir2/dir.abignore \ +test-diff-pkg-ctf/dirpkg-2-dir2/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-2-dir2/.abignore \ +test-diff-pkg-ctf/dirpkg-2-dir2/libobj-v0.so \ +test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u6.x86_64.rpm \ +test-diff-pkg-ctf/isl-0.16.1-7.x86_64.rpm \ +test-diff-pkg-ctf/tarpkg-0-dir1.ta \ +test-diff-pkg-ctf/dirpkg-3.suppr \ +test-diff-pkg-ctf/dirpkg-1-dir1/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-1-dir1/libobj-v0.so \ +test-diff-pkg-ctf/tarpkg-0-dir1.tar.bz2 \ +test-diff-pkg-ctf/dirpkg-3-report-0.txt \ +test-diff-pkg-ctf/dirpkg-0-dir1/dir.abignore \ +test-diff-pkg-ctf/dirpkg-0-dir1/obj-v0.c \ +test-diff-pkg-ctf/dirpkg-0-dir1/libobj-v0.so \ +test-diff-pkg-ctf/symlink-dir-test1/dir1/targets/libfoo.so \ +test-diff-pkg-ctf/symlink-dir-test1/dir1/targets/foo.c \ +test-diff-pkg-ctf/symlink-dir-test1/dir1/targets/foo.o \ +test-diff-pkg-ctf/symlink-dir-test1/dir1/symlinks/libfoo.so \ +test-diff-pkg-ctf/symlink-dir-test1/dir1/symlinks/foo.o \ +test-diff-pkg-ctf/symlink-dir-test1/dir2/targets/libfoo.so \ +test-diff-pkg-ctf/symlink-dir-test1/dir2/targets/foo.c \ +test-diff-pkg-ctf/symlink-dir-test1/dir2/targets/foo.o \ +test-diff-pkg-ctf/symlink-dir-test1/dir2/symlinks/libfoo.so \ +test-diff-pkg-ctf/symlink-dir-test1/dir2/symlinks/foo.o \ +test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u0.x86_64.rpm \ +test-diff-pkg-ctf/isl-debuginfo-0.16.1-6.x86_64.rpm \ +test-diff-pkg-ctf/tarpkg-1-dir1.tar.gz \ +test-diff-pkg-ctf/symlink-dir-test1-report0.txt \ \ test-fedabipkgdiff/dbus-glib-0.104-3.fc23.x86_64.rpm \ test-fedabipkgdiff/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm \ diff --git a/tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-repo= rt-0.txt b/tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-report= -0.txt new file mode 100644 index 00000000..2113a646 --- /dev/null +++ b/tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-report-0.txt @@ -0,0 +1,10 @@ +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D changes of 'libcrack.so.2= .9.0'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + Functions changes summary: 1 Removed, 0 Changed, 0 Added function + Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + 1 Removed function: + + [D] 'function char* LowercaseWrapper(char*, char*)' {LowercaseWrapp= er} + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D end of changes of 'libcra= ck.so.2.9.0'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + diff --git a/tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u0.x86_64.rp= m b/tests/data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u0.x86_64.rpm new file mode 100644 index 0000000000000000000000000000000000000000..95a19aaca342bcb4989ce55ddc9= 54e5ed30adeec GIT binary patch literal 100854 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