From: Pete Batard <pete@akeo.ie>
To: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
"Gao, Liming" <liming.gao@intel.com>
Subject: Re: [PATCH 1/6] MdePkg: Disable some Level 4 warnings for VS2017/ARM
Date: Mon, 4 Dec 2017 17:42:30 +0000 [thread overview]
Message-ID: <132bb69c-5a04-a20b-0d4c-71e1eeeba53f@akeo.ie> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E189CE6@SHSMSX104.ccr.corp.intel.com>
Hi Liming,
Thanks for reviewing these patches.
As explained in the git comment, I chose to disable warnings that I saw
being generated more than 5 times during QEMU compilation, as I suspect
we may inherit things from gcc that we may not want to spend too much
time changing, just to keep MSVC happy.
Considering that we are introducing a new target for MS users, it may be
worth being a bit more lenient with warnings for the time being, so that
people don't have to spend too much time addressing issues that they
wouldn't get with other compilers (gcc, Clang), if they decide to try
VS2017/ARM, as it may drive them off otherwise.
Especially, if we try to align ARM warnings with IA32/X64, then we're
going to have to address at least 78 instances of C4244 warnings
("conversion from 'type1' to 'type2', possible loss of data") in our ARM
codebase eventually, which is probably not in our best interest.
For reference, here is the list of Level 4 compiler warnings I got,
during QEMU compilation, along with the number of times they occurred:
C4018: 7
C4101: 6
C4132: 1
C4146: 3
C4244: 78
C4366: 1
C4389: 1
C4456: 10
C4701: 50
C4703: 48
This being said, I suspect most of the warnings above may not be
generated when compiling regular UEFI ARM applications or drivers, as I
only started to see those when trying to compile QEMU.
So, if you think that's preferable, we can proceed as you suggest, and
align ARM disabled warnings with IA32 and X64. Then we can wait and see
if users of VS2017/ARM start to complain that more warnings need to be
disabled...
Regards,
/Pete
On 2017.12.04 15:36, Gao, Liming wrote:
> Pete:
> I suggest to align the disabled warning list to IA32/X64 arch. I find someone are not listed in IA32/X64 arch. Could you give the more detail on why disable them by default?
>
> Thanks
> Liming
>> -----Original Message-----
>> From: Pete Batard [mailto:pete@akeo.ie]
>> Sent: Monday, December 4, 2017 9:12 PM
>> To: edk2-devel@lists.01.org
>> Cc: Gao, Liming <liming.gao@intel.com>
>> Subject: [PATCH 1/6] MdePkg: Disable some Level 4 warnings for VS2017/ARM
>>
>> Warnings 4018, 4100, 4101, 4127, 4214, 4244, 4456, 4701 and 4703 are
>> disabled as they were found to occur more than 5 times during QEMU
>> firmware compilation.
>>
>> Also create a dummy macro for PRESERVE8, as this is not supported by
>> the Microsoft ARM assembler.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Pete Batard <pete@akeo.ie>
>> ---
>> MdePkg/Include/Arm/ProcessorBind.h | 96 +++++++++++++++-----
>> 1 file changed, 75 insertions(+), 21 deletions(-)
>>
>> diff --git a/MdePkg/Include/Arm/ProcessorBind.h b/MdePkg/Include/Arm/ProcessorBind.h
>> index dde1fd1152ba..00de80bafe0a 100644
>> --- a/MdePkg/Include/Arm/ProcessorBind.h
>> +++ b/MdePkg/Include/Arm/ProcessorBind.h
>> @@ -1,15 +1,15 @@
>> /** @file
>> Processor or Compiler specific defines and types for ARM.
>>
>> - Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
>> + Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
>> Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
>> - This program and the accompanying materials
>> - are licensed and made available under the terms and conditions of the BSD License
>> - which accompanies this distribution. The full text of the license may be found at
>> - http://opensource.org/licenses/bsd-license.php
>> + This program and the accompanying materials
>> + are licensed and made available under the terms and conditions of the BSD License
>> + which accompanies this distribution. The full text of the license may be found at
>> + http://opensource.org/licenses/bsd-license.php
>>
>> - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>>
>> **/
>>
>> @@ -28,14 +28,63 @@
>> #pragma pack()
>> #endif
>>
>> +#if defined(_MSC_EXTENSIONS)
>> +
>> //
>> -// RVCT does not support the __builtin_unreachable() macro
>> +// Disable 'signed/unsigned mismatch' warnings.
>> //
>> -#ifdef __ARMCC_VERSION
>> +#pragma warning ( disable : 4018 )
>> +
>> +//
>> +// Disable 'unreferenced formal parameter' warnings.
>> +//
>> +#pragma warning ( disable : 4100 )
>> +
>> +//
>> +// Disable 'unreferenced local variable' warnings.
>> +//
>> +#pragma warning ( disable : 4101 )
>> +
>> +//
>> +// Suppress warnings for ASSERT(FALSE) or while(TRUE).
>> +//
>> +#pragma warning ( disable : 4127 )
>> +
>> +//
>> +// Disable bitfield type check warnings.
>> +//
>> +#pragma warning ( disable : 4214 )
>> +
>> +//
>> +// Disable 'conversion from X to Y, possible loss of data' warnings
>> +//
>> +#pragma warning ( disable : 4244 )
>> +
>> +//
>> +// Disable 'declaration of X hides previous local declaration' warnings
>> +//
>> +#pragma warning ( disable : 4456 )
>> +
>> +//
>> +// Disable 'potentially uninitialized local variable X used' warnings
>> +//
>> +#pragma warning ( disable : 4701 )
>> +
>> +//
>> +// Disable 'potentially uninitialized local pointer variable X used' warnings
>> +//
>> +#pragma warning ( disable : 4703 )
>> +
>> +#endif
>> +
>> +//
>> +// RVCT and MSFT don't support the __builtin_unreachable() macro
>> +//
>> +#if defined(__ARMCC_VERSION) || defined(_MSC_EXTENSIONS)
>> #define UNREACHABLE()
>> #endif
>>
>> -#if _MSC_EXTENSIONS
>> +#if defined(_MSC_EXTENSIONS)
>> //
>> // use Microsoft* C compiler dependent integer width types
>> //
>> @@ -52,7 +101,7 @@
>> typedef signed char INT8;
>> #else
>> //
>> - // Assume standard ARM alignment.
>> + // Assume standard ARM alignment.
>> // Need to check portability of long long
>> //
>> typedef unsigned long long UINT64;
>> @@ -121,7 +170,7 @@ typedef INT32 INTN;
>> // use the correct C calling convention. All protocol member functions and
>> // EFI intrinsics are required to modify their member functions with EFIAPI.
>> //
>> -#define EFIAPI
>> +#define EFIAPI
>>
>> // When compiling with Clang, we still use GNU as for the assembler, so we still
>> // need to define the GCC_ASM* macros.
>> @@ -142,34 +191,39 @@ typedef INT32 INTN;
>>
>> #define GCC_ASM_EXPORT(func__) \
>> .global _CONCATENATE (__USER_LABEL_PREFIX__, func__) ;\
>> - .type ASM_PFX(func__), %function
>> + .type ASM_PFX(func__), %function
>>
>> #define GCC_ASM_IMPORT(func__) \
>> .extern _CONCATENATE (__USER_LABEL_PREFIX__, func__)
>> -
>> +
>> #else
>> //
>> - // .type not supported by Apple Xcode tools
>> + // .type not supported by Apple Xcode tools
>> //
>> - #define INTERWORK_FUNC(func__)
>> + #define INTERWORK_FUNC(func__)
>>
>> #define GCC_ASM_EXPORT(func__) \
>> .globl _CONCATENATE (__USER_LABEL_PREFIX__, func__) \
>> -
>> - #define GCC_ASM_IMPORT(name)
>> +
>> + #define GCC_ASM_IMPORT(name)
>>
>> #endif
>> +#elif defined(_MSC_EXTENSIONS)
>> + //
>> + // PRESERVE8 is not supported by the MSFT assembler.
>> + //
>> + #define PRESERVE8
>> #endif
>>
>> /**
>> Return the pointer to the first instruction of a function given a function pointer.
>> - On ARM CPU architectures, these two pointer values are the same,
>> + On ARM CPU architectures, these two pointer values are the same,
>> so the implementation of this macro is very simple.
>> -
>> +
>> @param FunctionPointer A pointer to a function.
>>
>> @return The pointer to the first instruction of a function given a function pointer.
>> -
>> +
>> **/
>> #define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)
>>
>> --
>> 2.9.3.windows.2
>
next prev parent reply other threads:[~2017-12-04 17:38 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-04 13:11 [PATCH 0/6] Add ARM support for VS2017 Pete Batard
2017-12-04 13:12 ` [PATCH 1/6] MdePkg: Disable some Level 4 warnings for VS2017/ARM Pete Batard
2017-12-04 15:36 ` Gao, Liming
2017-12-04 17:42 ` Pete Batard [this message]
2017-12-04 13:12 ` [PATCH 2/6] MdePkg/Library/BaseStackCheckLib: Add Null handler " Pete Batard
2017-12-04 13:12 ` [PATCH 3/6] MdePkg/Library/BaseLib: Enable VS2017/ARM builds Pete Batard
2017-12-04 15:40 ` Gao, Liming
2017-12-04 17:43 ` Pete Batard
2017-12-04 13:12 ` [PATCH 4/6] ArmPkg/Library/CompilerIntrinsicsLib: " Pete Batard
2017-12-04 13:12 ` [PATCH 5/6] MdePkg/Include: Add VA list support for VS2017/ARM Pete Batard
2017-12-04 13:12 ` [PATCH 6/6] BaseTools/Conf: Add VS2017/ARM support Pete Batard
2017-12-04 15:48 ` Gao, Liming
2017-12-04 17:43 ` Pete Batard
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=132bb69c-5a04-a20b-0d4c-71e1eeeba53f@akeo.ie \
--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