From patchwork Wed Nov 4 15:57:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 83686 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2BAC2A04B1; Wed, 4 Nov 2020 16:58:13 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9B847C944; Wed, 4 Nov 2020 16:58:10 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by dpdk.org (Postfix) with ESMTP id 9888CC938 for ; Wed, 4 Nov 2020 16:58:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604505486; 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=rckO2Rex75PSw9i9yVazB3P6wUKzaWfuy+Yg8Nel7PY=; b=gaatZ/G2+ekl9ZKjf+3knGXRBrWnxBc8cwEBfIx6PvRKLYSczzFPK2KBB4F1NWeUCkVYOP esv6KpKzxa4ssjcqp0xgGWyGZ2DLvB+60frFp4LUk/kbfvSL7TLsC6V9K8r7FFEgSb0DNk 6C6ZgmL7LUzMPX+4b7URbelbOlkOx8k= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-415-4Ruk0RBuPIykC8OnJ1GRIA-1; Wed, 04 Nov 2020 10:58:02 -0500 X-MC-Unique: 4Ruk0RBuPIykC8OnJ1GRIA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4334B1007466; Wed, 4 Nov 2020 15:57:59 +0000 (UTC) Received: from dmarchan.remote.csb (unknown [10.40.193.68]) by smtp.corp.redhat.com (Postfix) with ESMTP id 01DCF5D9CC; Wed, 4 Nov 2020 15:57:54 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: bruce.richardson@intel.com, robin.jarry@6wind.com, stephen@networkplumber.org, olivier.matz@6wind.com, Neil Horman , Rosen Xu , Andrew Rybchenko , Luca Boccassi Date: Wed, 4 Nov 2020 16:57:21 +0100 Message-Id: <20201104155721.21627-1-david.marchand@redhat.com> In-Reply-To: <20201103183906.8088-1-david.marchand@redhat.com> References: <20201103183906.8088-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david.marchand@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [dpdk-dev] [PATCH v3] usertools: fix pmdinfo parsing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This script inspects an ELF file (binary or shared library) and its linked dependencies by following DT_NEEDED tags. So far a simple librte_pmd prefix was used as a filter to only parse DPDK drivers dependencies. While the reason is not clear from the commitlog of the patch that introduced this filter, it was probably added for performance reasons, since going through all dependencies can be quite long. Testing with a DPDK built before the driver name changes: - running the script takes ~0.3s with the filter, - running the script takes ~9s without the filter, Now that we changed the driver library names, it becomes more difficult to identify only DPDK drivers, but we can just filter on the librte_ prefix to identify DPDK libraries: the script later checks for the PMD_INFO_STRING string in .rodata and it is enough to differentiate the DPDK drivers from the other DPDK libraries. A debug message was logged for each inspected file, it gives no useful information and is removed. Fixes: a20b2c01a7a1 ("build: standardize component names and defines") Signed-off-by: David Marchand Acked-by: Robin Jarry Acked-by: Bruce Richardson --- Changelog since v2: - revisited the issue and simplified to only filter on librte_ prefix, Changelog since v1: - moved driver classes list as a class variable and did some cosmetic change for readibility, - used dpdk_driver_classes variable name in the hope that someone changing meson will catch this script too, - added bus, common, mempool and raw driver classes as some of them do carry some pmdinfo stuff and were skipped so far but I found no indication this skipping was intended, --- usertools/dpdk-pmdinfo.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/usertools/dpdk-pmdinfo.py b/usertools/dpdk-pmdinfo.py index 1661982791..95fb0111d8 100755 --- a/usertools/dpdk-pmdinfo.py +++ b/usertools/dpdk-pmdinfo.py @@ -434,7 +434,6 @@ def process_dt_needed_entries(self): """ Look to see if there are any DT_NEEDED entries in the binary And process those if there are """ - global raw_output runpath = "" ldlibpath = os.environ.get('LD_LIBRARY_PATH') if ldlibpath is None: @@ -450,13 +449,11 @@ def process_dt_needed_entries(self): for tag in dynsec.iter_tags(): # pyelftools may return byte-strings, force decode them if force_unicode(tag.entry.d_tag) == 'DT_NEEDED': - if 'librte_pmd' in force_unicode(tag.needed): + if 'librte_' in force_unicode(tag.needed): library = search_file(force_unicode(tag.needed), runpath + ":" + ldlibpath + ":/usr/lib64:/lib64:/usr/lib:/lib") if library is not None: - if raw_output is False: - print("Scanning %s for pmd information" % library) with io.open(library, 'rb') as file: try: libelf = ReadElf(file, sys.stdout)