From patchwork Wed Mar 22 16:31:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dodji Seketeli X-Patchwork-Id: 66750 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 E8D683858020 for ; Wed, 22 Mar 2023 16:32:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E8D683858020 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1679502722; bh=Ue4DHGnCvAQpjcEz7CvTqGfGQITd7mM02v0Hdu4aKac=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:From; b=VVB5zW8my1FalzyWr3AJfMep5GTwEyYhQ0wa7oicY4BtXeb9bONwMlVOhnOOzIp6P dngXwE4vRxoNyrUcLFJF31ua9etxmABw+M7FG26hQcgL5sBB6p3d3wlFf8kY9sW/FA qqho1AI2Rq1qWhqbLjByGovkp+5Jtqr1JPMfBzv4= 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 [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 5814B3858D3C for ; Wed, 22 Mar 2023 16:31:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5814B3858D3C Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-347-VsgBDOl9MtKhFvC5z_A6qQ-1; Wed, 22 Mar 2023 12:31:48 -0400 X-MC-Unique: VsgBDOl9MtKhFvC5z_A6qQ-1 Received: by mail-qt1-f197.google.com with SMTP id x5-20020a05622a000500b003e259c363f9so5522447qtw.22 for ; Wed, 22 Mar 2023 09:31:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679502707; h=mime-version:user-agent:message-id:date:organization:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Ue4DHGnCvAQpjcEz7CvTqGfGQITd7mM02v0Hdu4aKac=; b=WhJjA578yN36bTUMLnA7Uu9adfWoP3HG7kdFioE0r31FT8pWdlSvaG384/MORW+bgw Fzk3EWgvALJkiHegoja+70kH75DOJozMMYjFaQ9vEEkbruiod3n/c0qEr1GPZs4uNbBO 9L4dKltgRUi83YZa7hSkggW/ygfq+E+bBzj9SiC3ZRUXbYsP80B/SjSnyR+cer0OFLhI EjhE5HnYj399jpVXyN2oTaZeEcOK+pVsScm6avVEpqNTEgnG/K4wpGcEVulydqB7/BbT vMXESYf7TN84ZWoLBnsTrdH5XmUV/nT0S0LdFCKpB9CIu65DVfhbtnn5Wu0mCSjdCxOZ lhpw== X-Gm-Message-State: AO0yUKXfkUE7/4C4h+eKUVJk/wNuuLJ/tZPka7awyNf2J0/P79f/n9pE SUGf7Z/VPFETF1Vte5nL4C0250jSuN+G7sjzgECT5pDRc3t91qBraM6ep7nm/52/wh5sm4hmK2H 13Et4QEwwMlhxQd+Q/bFIDb7/WK+YK3e4OTVx7nLcen1bu+hF7zPTIHna0HbQrFvGKOhZUsPY1P Yc X-Received: by 2002:ac8:7d12:0:b0:3db:575e:613a with SMTP id g18-20020ac87d12000000b003db575e613amr7474132qtb.23.1679502707240; Wed, 22 Mar 2023 09:31:47 -0700 (PDT) X-Google-Smtp-Source: AK7set83NXyaG4EFAUG/11uSjC2HC7POZMl+K8dkMMqzXKH3KUwxfUlLOQdhAWdf0Pvbe+qqbKuz5w== X-Received: by 2002:ac8:7d12:0:b0:3db:575e:613a with SMTP id g18-20020ac87d12000000b003db575e613amr7474085qtb.23.1679502706726; Wed, 22 Mar 2023 09:31:46 -0700 (PDT) Received: from localhost ([88.120.130.27]) by smtp.gmail.com with ESMTPSA id r19-20020ac85213000000b003b643951117sm10546197qtn.38.2023.03.22.09.31.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Mar 2023 09:31:46 -0700 (PDT) Received: by localhost (Postfix, from userid 1000) id 4DA24581C79; Wed, 22 Mar 2023 17:31:44 +0100 (CET) To: libabigail@sourceware.org Subject: [PATCH, applied] Bug 29692 - Support binaries with empty symbol table Organization: Red Hat / France X-Operating-System: Fedora 38 X-URL: http://www.redhat.com Date: Wed, 22 Mar 2023 17:31:44 +0100 Message-ID: <87zg84n3wv.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=-11.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" Hello, Some binaries can have a symbol table in which no symbol is actually defined and exported. That binary would thus have an empty ABI corpus. Interestingly, Libabigail's DWARF reader is emits an error when it encounters such binaries. This patch adds the support for those binaries. * src/abg-dwarf-reader.cc (reader::read_debug_info_into_corpus): Get out early also upon having an empty symbol table. * src/abg-elf-reader.cc (reader::read_corpus): Error out only if there is no symbol table for the binary. If an empty symbol table is found however, that is not an error. * tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0: New binary test input. * tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi: New expected abixml file. * tests/data/Makefile.am: Add the new input test files to source distribution. * tests/test-read-dwarf.cc (in_out_specs): Add the new test inputs above to this test harness. Signed-off-by: Dodji Seketeli --- src/abg-dwarf-reader.cc | 6 ++++-- src/abg-elf-reader.cc | 7 +++++-- tests/data/Makefile.am | 2 ++ .../PR29692-kdelibs3-libkjava.so.1.0.0 | Bin 0 -> 15048 bytes .../PR29692-kdelibs3-libkjava.so.1.0.0.abi | 2 ++ tests/test-read-dwarf.cc | 9 +++++++++ 6 files changed, 22 insertions(+), 4 deletions(-) create mode 100755 tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0 create mode 100644 tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi new file mode 100644 index 00000000..e2b3e145 diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc index 66b99fd5..d842d25b 100644 --- a/src/abg-dwarf-reader.cc +++ b/src/abg-dwarf-reader.cc @@ -2130,8 +2130,10 @@ public: // Set symbols information to the corpus. corpus()->set_symtab(symtab()); - // Get out now if no debug info is found. - if (!dwarf_debug_info()) + // Get out now if no debug info is found or if the symbol table is + // empty. + if (!dwarf_debug_info() + || !corpus()->get_symtab()->has_symbols()) return corpus(); uint8_t address_size = 0; diff --git a/src/abg-elf-reader.cc b/src/abg-elf-reader.cc index 57e7f2dc..101df0dc 100644 --- a/src/abg-elf-reader.cc +++ b/src/abg-elf-reader.cc @@ -958,10 +958,13 @@ reader::read_corpus(status& status) corpus()->set_architecture_name(elf_architecture()); // See if we could find symbol tables. - if (!symtab() || !symtab()->has_symbols()) + if (!symtab()) { status |= STATUS_NO_SYMBOLS_FOUND; - // We found no ELF symbol, so we can't handle the binary. + // We found no ELF symbol, so we can't handle the binary. Note + // that we could have found a symbol table with no defined & + // exported ELF symbols in it. That case is handled as an empty + // corpus, which is different from this case. return corpus_sptr(); } diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index aafa41de..f2d0c0ca 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -666,6 +666,8 @@ test-read-dwarf/PR29443-missing-xx.o.abi \ test-read-dwarf/test-fallback.abi \ test-read-dwarf/test-fallback.c \ test-read-dwarf/test-fallback.o \ +test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0 \ +test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi \ \ test-read-ctf/test0 \ test-read-ctf/test0.abi \ diff --git a/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0 b/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0 new file mode 100755 index 0000000000000000000000000000000000000000..b92f4ef962c47e4d62eec161afbab2aeb6aaa42d GIT binary patch literal 15048 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi b/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi --- /dev/null +++ b/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi @@ -0,0 +1,2 @@ + + diff --git a/tests/test-read-dwarf.cc b/tests/test-read-dwarf.cc index 5a00e14e..d2d2ec6d 100644 --- a/tests/test-read-dwarf.cc +++ b/tests/test-read-dwarf.cc @@ -550,6 +550,15 @@ static InOutSpec in_out_specs[] = "output/test-read-dwarf/PR29443-missing-xx.o.abi", NULL, }, + { + "data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi", + "output/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi", + NULL, + }, // DWARF fallback feature. { "data/test-read-dwarf/test-fallback.o",