From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C89BF21E97812 for ; Wed, 6 Sep 2017 09:45:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9E432883A0; Wed, 6 Sep 2017 16:48:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9E432883A0 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=lersek@redhat.com Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-41.rdu2.redhat.com [10.10.120.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3CC2E187BD; Wed, 6 Sep 2017 16:48:29 +0000 (UTC) From: Laszlo Ersek To: edk2-devel-01 Cc: Ard Biesheuvel , Brijesh Singh , Jordan Justen , Thomas Lamprecht Date: Wed, 6 Sep 2017 18:48:19 +0200 Message-Id: <20170906164819.5082-2-lersek@redhat.com> In-Reply-To: <20170906164819.5082-1-lersek@redhat.com> References: <20170906164819.5082-1-lersek@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 06 Sep 2017 16:48:30 +0000 (UTC) Subject: [PATCH 1/1] OvmfPkg/IoMmuDxe: shut up "unused-const-variable" gcc-6 warning in RELEASE X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Sep 2017 16:45:41 -0000 Starting with gcc-6, a new warning option called "-Wunused-const-variable" has become available (and enabled by default under our build settings): https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gcc/Warning-Options.html We should give it the same treatment as Ard gave "unused-but-set-variable" in commit 20d00edf21d2 ("BaseTools/GCC: set -Wno-unused-but-set-variables only on RELEASE builds", 2016-03-24); i.e., we should restrict the warning to the DEBUG build target. However, because the new warning is gcc-6+ only, we cannot add "-Wno-unused-const-variable" to any GCC5 macros in "BaseTools/Conf/tools_def.template". While the GCC6 toolchain and/or the desired handling of the new warning are investigated in , suppress the warning for gcc-6+ (in RELEASE builds) as follows: - Replace the "mBusMasterOperationName" array with the BUS_MASTER_OPERATION_NAME(Expression, ShortName) macro that compares Expression against EdkiiIoMmuOperationBusMaster, and in case of a match, evaluates to "ShortName", stringified, - when composing the DEBUG message -- which the preprocessor might eliminate from RELEASE builds, thereby removing its references to variables --, build a ladder of comparisons with BUS_MASTER_OPERATION_NAME(). Cc: Ard Biesheuvel Cc: Brijesh Singh Cc: Jordan Justen Cc: Thomas Lamprecht Reported-by: Thomas Lamprecht Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek --- OvmfPkg/IoMmuDxe/AmdSevIoMmu.c | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c index bc57de5b572b..dcd03d8f0474 100644 --- a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c +++ b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c @@ -45,17 +45,17 @@ STATIC LIST_ENTRY mRecycledMapInfos = INITIALIZE_LIST_HEAD_VARIABLE ( #define COMMON_BUFFER_SIG SIGNATURE_64 ('C', 'M', 'N', 'B', 'U', 'F', 'F', 'R') // -// ASCII names for EDKII_IOMMU_OPERATION constants, for debug logging. +// The following macro builds the first two operands of a conditional (ternary) +// operator that matches Expression against the EDKII_IOMMU_OPERATION constant +// derived from ShortName. In case of a match, the replacement text evaluates +// to an ASCII string literal that stands for the constant. The replacement +// text stops before the colon (":"). The macro invocation site is supposed to +// provide the colon and the third operand, either as another invocation of the +// same macro, or as a default (fallback) string literal. // -STATIC CONST CHAR8 * CONST -mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = { - "Read", - "Write", - "CommonBuffer", - "Read64", - "Write64", - "CommonBuffer64" -}; +#define BUS_MASTER_OPERATION_NAME(Expression, ShortName) \ + ((Expression) == (EdkiiIoMmuOperationBusMaster ## ShortName)) ? \ + (# ShortName) // // The following structure enables Map() and Unmap() to perform in-place @@ -133,9 +133,12 @@ IoMmuMap ( DEBUG_VERBOSE, "%a: Operation=%a Host=0x%p Bytes=0x%Lx\n", __FUNCTION__, - ((Operation >= 0 && - Operation < ARRAY_SIZE (mBusMasterOperationName)) ? - mBusMasterOperationName[Operation] : + (BUS_MASTER_OPERATION_NAME (Operation, Read) : + BUS_MASTER_OPERATION_NAME (Operation, Write) : + BUS_MASTER_OPERATION_NAME (Operation, CommonBuffer) : + BUS_MASTER_OPERATION_NAME (Operation, Read64) : + BUS_MASTER_OPERATION_NAME (Operation, Write64) : + BUS_MASTER_OPERATION_NAME (Operation, CommonBuffer64) : "Invalid"), HostAddress, (UINT64)((NumberOfBytes == NULL) ? 0 : *NumberOfBytes) -- 2.14.1.3.gb7cf6e02401b