public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Laszlo Ersek <lersek@redhat.com>, edk2-devel@lists.01.org
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	"Gao, Liming" <liming.gao@intel.com>,
	"Zhu, Yonghong" <yonghong.zhu@intel.com>
Subject: Re: OvmfPkg/IoMmuDxe: unused-const-variable warning fails release build with GCC 6.3
Date: Wed, 6 Sep 2017 17:08:52 +0200	[thread overview]
Message-ID: <b64167e4-d348-74f6-ada9-422a97f4d103@proxmox.com> (raw)
In-Reply-To: <56159eae-7009-5e19-386a-bde680f27197@redhat.com>

On 09/06/2017 04:22 PM, Laszlo Ersek wrote:
> On 09/06/17 15:35, Thomas Lamprecht wrote:
>> On 09/06/2017 01:15 PM, Laszlo Ersek wrote:
>> [snip]
>>> But gcc-5 would not recognize this option. I think we might have to
>>> introduce the GCC6 toolchain for this.
>>>
>>
>> After giving the "BaseTools/Conf/tools_def.template" another look, it
>> seems that adding the target would not be the main work here, but
>> testing it on all platforms and verifying that all other flags are still
>> correct and that for all platforms would be, or?
>>
>> I could add a GCC6 one which mainly inherits from GCC5, i.e. in the same
>> way as GCC49 is already the "parent" for GCC5.
>> But I could currently only compile and test OVMF for amd64 and aarch64.
> 
> Hmm, if you can compile for X64, how can you not compile it for IA32? It
> should not require different (native) compiler + binutils packages on
> your system.
> 

Yes, I can test IA32 naturally too, just forgot to mention it.

> If you are cross-compiling for AARCH64, the situation is then different,
> because for cross-compiling to ARM, separate compiler + binutils
> packages could be required.
> 

As I have an APM x-gene here I can compile aarch64 natively running our
Debian derivated distro.
Did not configured a 32-bit environment yet, but that should be possible.

>>
>> I mean from a developer perspective it seems OK to do that and add the
>> target even without full coverage and the adapt the target toolchain -
>> or the platform where appropriate,  on a case per case basis, once the
>> new toolchain will see more use there.
> 
> If you want to explore adding the new toolchain, I guess you could
> submit a patch with the whole thing (all arches), and ask for help with
> testing (always specifying "-t GCC6" explicitly). I can see the
> following test cases:
> 
>    { DEBUG, RELEASE } x { IA32, X64, ARM, AARCH64 } x { gcc-6, gcc-7 }
> 
>       1  gcc-6  AARCH64  DEBUG
>       2  gcc-6  AARCH64  RELEASE
>       3  gcc-6  ARM      DEBUG
>       4  gcc-6  ARM      RELEASE
>       5  gcc-6  IA32     DEBUG
>       6  gcc-6  IA32     RELEASE
>       7  gcc-6  X64      DEBUG
>       8  gcc-6  X64      RELEASE
>       9  gcc-7  AARCH64  DEBUG
>      10  gcc-7  AARCH64  RELEASE
>      11  gcc-7  ARM      DEBUG
>      12  gcc-7  ARM      RELEASE
>      13  gcc-7  IA32     DEBUG
>      14  gcc-7  IA32     RELEASE
>      15  gcc-7  X64      DEBUG
>      16  gcc-7  X64      RELEASE
> 
> You should be able to build-test cases 1-2, 5-8.
> 
> I can help you build-test cases 3-4 (already have that cross-compiler
> installed).
> 
> Cases 9-16 are testable, for example, within a Fedora 26 virtual
> machine. Unless someone on the list runs Fedora 26 on a permanent basis,
> the effort of setting up a VM would be the same for them as for you.
> But, you might get lucky.
> 

I got a Fedora VM here already, so this should be also no problem for
me then, great!

> Boot testing is secondary in this case, IMO. If your build passes a
> smoke test for booting, on your side, that should be sufficient.
> Miscompilations due to new GCC versions have occurred, but they are
> extremely time consuming to figure out, so we generally investigate them
> when they occur, not in advance. The point is that older toolchains are
> not regressed by adding newer ones.
> 

OK.

>>> Here's what I suggest: please file a TianoCore BZ about this issue, at
>>> <https://bugzilla.tianocore.org/>. Select "BaseTools" as Package. Feel
>>> free to reference the mailing list thread in the BZ:
>>>
>>> https://lists.01.org/pipermail/edk2-devel/2017-September/014225.html
>>>
>>
>> Done, I got #700 :
>> <https://bugzilla.tianocore.org/show_bug.cgi?id=700>
>>
>>> Now, addressing that will take a while. Meanwhile, can you please check
>>> if simply removing the CONST suppresses the issue? (Note, the CONST
>>> should be removed from the "mBusMasterOperationName" variable, *not*
>>> from the pointed-to CHAR8.)
>>>
>>> If that works, can you please submit a patch like this?
>>>
>>
>> No, it does not work, it then does not falls under the
>> "-Wno-unused-but-set-variable" case as its static, if I understand the gcc
>> Warning Options doc correctly:
>>
>>   > -Wunused-but-set-variable:
>>   >     Warn whenever a local variable is assigned to, ...
>>
>> Whereas:
>>
>>   > -Wunused-variable
>>   >     Warn whenever a local or static variable is unused aside from its
>>   >     declaration. This option implies -Wunused-const-variable=1 for C,
>> ...
>>
>> So "no-unused-but-set" allows the local variable case but not the static
>> variable case.
>>
>>
>>>> diff --git a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>>>> b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>>>> index bc57de5b572b..45d1c909b5ad 100644
>>>> --- a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>>>> +++ b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>>>> @@ -47,7 +47,9 @@ STATIC LIST_ENTRY mRecycledMapInfos =
>>>> INITIALIZE_LIST_HEAD_VARIABLE (
>>>>    //
>>>>    // ASCII names for EDKII_IOMMU_OPERATION constants, for debug logging.
>>>>    //
>>>> -STATIC CONST CHAR8 * CONST
>>>> +// Not CONST-qualified in order to suppress gcc-6+ warnings.
>>>> +//
>>>> +STATIC CONST CHAR8 *
>>>>    mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = {
>>>>      "Read",
>>>>      "Write",
>>>
>>> We could commit this patch for now. Once the BZ you file for BaseTools
>>> is fixed, we can revert this patch.
>>>
>>
>> With your proposed workaround changes my compiler emits:
>>
>> [...]
>> /root/edk2/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c:51:1: error:
>> ‘mBusMasterOperationName’ defined but not used [-Werror=unused-variable]
>>   mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = {
>>   ^~~~~~~~~~~~~~~~~~~~~~~
> 
> Thank you for trying it.
> 
> How incredibly annoying. :/
> 
> I'm unsure if we want to disble "-Wunused-variable" even for RELEASE
> builds. Probably not. Needs more discussion by others too.
> 
>> Another idea, why not also compile out the declaration of the
>> "mBusMasterOperationName" variable when building a RELEASE?
> 
> Code that depends on DEBUG vs. RELEASE should generally be evicted by
> the compiler, not the preprocessor. This makes for much better source
> code coverage.
> 

Uh, ok now looking again I see why. I first just saw:
"EdkCompatibilityPkg/Foundation/Include/EfiDebug.h"
Where both cases, mine and DEBUG(expr), would get removed by the
preprocessor. But the here actual used "MdePkg/Include/Library/DebugLib.h"
tells me otherwise.

>> Something like:
>>
>> ----8<----
>> diff --git a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>> b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>> index bc57de5b57..5af5ce258f 100644
>> --- a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>> +++ b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c
>> @@ -47,6 +47,7 @@ STATIC LIST_ENTRY mRecycledMapInfos =
>> INITIALIZE_LIST_HEAD_VARIABLE (
>>   //
>>   // ASCII names for EDKII_IOMMU_OPERATION constants, for debug logging.
>>   //
>> +#ifdef EFI_DEBUG^M
>>   STATIC CONST CHAR8 * CONST
>>   mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = {
>>     "Read",
>> @@ -56,6 +57,7 @@ mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = {
>>     "Write64",
>>     "CommonBuffer64"
>>   };
>> +#endif^M
>>
>>   //
>>   // The following structure enables Map() and Unmap() to perform in-place
>> ---->8----
>>
>> works here, not sure if its up to your coding standards.
> 
> It's not.
> 
> We already have macros like DEBUG_CODE(), DEBUG_CODE_BEGIN() and
> DEBUG_CODE_END() -- they provide the above coverage --, but they only
> work in block scope, not file scope.
> 
> Sigh. Let me submit another OvmfPkg patch for this. I'll CC you. Please
> report back if it works.
> 

OK.

cheers,
Thomas




      reply	other threads:[~2017-09-06 15:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-06  7:44 OvmfPkg/IoMmuDxe: unused-const-variable warning fails release build with GCC 6.3 Thomas Lamprecht
2017-09-06 11:15 ` Laszlo Ersek
2017-09-06 13:35   ` Thomas Lamprecht
2017-09-06 14:22     ` Laszlo Ersek
2017-09-06 15:08       ` Thomas Lamprecht [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b64167e4-d348-74f6-ada9-422a97f4d103@proxmox.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox