Sergei,

We are hitting this too. 

Our temporary work around was to suppress the warning for the libraries via our 
platforms DSC file so we did not need to override things in edk2. 

You can override the library build options if you add them to the [Components] 
section. 

MdePkg/Library/UefiLib/UefiLib.inf {
  <BuildOptions>
    XCODE:*_*_*_CC_FLAGS  = -Wno-varargs
}

Thanks,

Andrew Fish

> On May 17, 2017, at 5:26 PM, Sergei Temerkhanov <[email protected]> 
> wrote:
> 
> On Wed, May 17, 2017 at 6:30 PM, Gao, Liming <[email protected]> wrote:
>> Sergey:
>>  Now, VS and GCC don't report such issue. How do you find them?
> 
> Clang build for ARM64 revealed it.
> 
>> And, this change modifies the function API, does it impact the consumer code?
> 
> No changes to the consumer code are needed - integer promotions are
> handled by the compilers. In fact, even the ABI remains the same b/c
> full words are passed as function parameters.
> 
> Regards,
> Sergey
> 
>> 
>> Thanks
>> Liming
>>> -----Original Message-----
>>> From: Sergei Temerkhanov [mailto:[email protected]]
>>> Sent: Tuesday, May 16, 2017 8:11 PM
>>> To: Gao, Liming <[email protected]>
>>> Cc: [email protected]
>>> Subject: Re: [edk2] [PATCH] MdePkg: Fix undefined behavior on variadic 
>>> parameters
>>> 
>>> On Tue, May 16, 2017 at 8:10 AM, Gao, Liming <[email protected]> wrote:
>>>> Sergey:
>>>>  Could you give more detail on the undefined behavior on variadic 
>>>> parameters?
>>>> 
>>>>  I see https://bugzilla.tianocore.org/show_bug.cgi?id=410 describe this 
>>>> issues found in the latest CLANG tool chain. Do you find
>>> other tool chain reports it?
>>> 
>>> Yes, this is exactly the bug this patch fixes.
>>> 
>>> As per the C99 standard:
>>> "The parameter parmN is the identifier of the rightmost parameter in
>>> the variable parameter list in the function definition (the one just
>>> before the , ...). If the parameter parmN is declared with the
>>> register storage class, with a function or array type, or with a type
>>> that is not compatible with the type that results after application of
>>> the default argument promotions, the behavior is undefined."
>>> 
>>> That's exactly the case here since BOOLEAN is a typedef for unsigned
>>> char. It undergoes a promotion to an unsigned int which is not a
>>> compatible type for unsigned char. Correct me if I'm wrong.
>>> 
>>> Regards,
>>> Sergey
>>> 
>>>> 
>>>> Thanks
>>>> Liming
>>>>> -----Original Message-----
>>>>> From: edk2-devel [mailto:[email protected]] On Behalf Of 
>>>>> Sergey Temerkhanov
>>>>> Sent: Tuesday, May 16, 2017 10:57 AM
>>>>> To: [email protected]
>>>>> Subject: [edk2] [PATCH] MdePkg: Fix undefined behavior on variadic 
>>>>> parameters
>>>>> 
>>>>> Fix undefined behavior by avoiding parameter type promotion
>>>>> 
>>>>> Signed-off-by: Sergey Temerkhanov <[email protected]>
>>>>> ---
>>>>> MdePkg/Include/Library/UefiLib.h | 2 +-
>>>>> MdePkg/Library/UefiLib/UefiLib.c | 2 +-
>>>>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>>>> 
>>>>> diff --git a/MdePkg/Include/Library/UefiLib.h 
>>>>> b/MdePkg/Include/Library/UefiLib.h
>>>>> index 0b14792..4e4697c 100644
>>>>> --- a/MdePkg/Include/Library/UefiLib.h
>>>>> +++ b/MdePkg/Include/Library/UefiLib.h
>>>>> @@ -818,7 +818,7 @@ CHAR8 *
>>>>> EFIAPI
>>>>> GetBestLanguage (
>>>>>   IN CONST CHAR8  *SupportedLanguages,
>>>>> -  IN BOOLEAN      Iso639Language,
>>>>> +  IN UINTN      Iso639Language,
>>>>>   ...
>>>>>   );
>>>>> 
>>>>> diff --git a/MdePkg/Library/UefiLib/UefiLib.c 
>>>>> b/MdePkg/Library/UefiLib/UefiLib.c
>>>>> index a7eee01..74528ec 100644
>>>>> --- a/MdePkg/Library/UefiLib/UefiLib.c
>>>>> +++ b/MdePkg/Library/UefiLib/UefiLib.c
>>>>> @@ -1514,7 +1514,7 @@ CHAR8 *
>>>>> EFIAPI
>>>>> GetBestLanguage (
>>>>>   IN CONST CHAR8  *SupportedLanguages,
>>>>> -  IN BOOLEAN      Iso639Language,
>>>>> +  IN UINTN      Iso639Language,
>>>>>   ...
>>>>>   )
>>>>> {
>>>>> --
>>>>> 2.7.4
>>>>> 
>>>>> _______________________________________________
>>>>> edk2-devel mailing list
>>>>> [email protected]
>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to