public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Marvin Häuser" <Marvin.Haeuser@outlook.com>
To: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Gao, Liming" <liming.gao@intel.com>, Laszlo Ersek <lersek@redhat.com>
Subject: Re: [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40 in CLANG38 toolchain
Date: Mon, 25 Sep 2017 12:29:35 +0000	[thread overview]
Message-ID: <AM4PR06MB149123B1790726D894BB5FFD807A0@AM4PR06MB1491.eurprd06.prod.outlook.com> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E15D03E@SHSMSX152.ccr.corp.intel.com>

Hey Liming and Laszlo,

Thanks for your answers!

I rather thought of this (I didn't check whether Language1 should be CONST, but doesn't matter for now):

CHAR8 *
EFIAPI
GetBestLanguage (
  IN CONST CHAR8  *SupportedLanguages,
  IN BOOLEAN          Iso639Language,
  IN CHAR8               *Language1,
  ...
  );

This would be compatible with all existing code because the VA list solely consists of CHAR8 pointers.
The only difference would be that one cannot pass just NULL after Iso639Language, but this scenario makes no sense anyway.
One would just use Langauge1 on the first iteration and, as part of a do-while-loop, assign the VA args via VA_ARG().

Best regards,
Marvin.

> -----Original Message-----
> From: Gao, Liming [mailto:liming.gao@intel.com]
> Sent: Monday, September 25, 2017 11:58 AM
> To: Laszlo Ersek <lersek@redhat.com>; Marvin H?user
> <Marvin.Haeuser@outlook.com>; edk2-devel@lists.01.org
> Subject: RE: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40 in
> CLANG38 toolchain
> 
> Laszlo:
>   This is a better way. The bug
> https://bugzilla.tianocore.org/show_bug.cgi?id=410 only lists
> GetBestLanguage() API. I am not sure whether they are similar cases in edk2.
> If have, we had better fix them together.
> 
> Thanks
> Liming
> >-----Original Message-----
> >From: Laszlo Ersek [mailto:lersek@redhat.com]
> >Sent: Monday, September 25, 2017 4:13 PM
> >To: Gao, Liming <liming.gao@intel.com>; Marvin Häuser
> ><Marvin.Haeuser@outlook.com>; edk2-devel@lists.01.org
> >Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40
> >in
> >CLANG38 toolchain
> >
> >On 09/25/17 06:59, Gao, Liming wrote:
> >> Marvin:
> >>   My concern is that the fix is an incompatible change. It requires
> >> to modify
> >library API. In fact, this is an undefined behavior. But, current
> >compiler (VS, GCC and Clang) makes it work.  So, I prefer to keep the
> >code as-is, and disable this warning first. If you find any real issue,
> >we can return back and figure out the solution.
> >
> >I think we can draw a parallel here to GetVariable() and GetVariable2().
> >GetVariable() is now unavailable if
> DISABLE_NEW_DEPRECATED_INTERFACES
> >is defined.
> >
> >I think the right solution would be to
> >- introduce GetBestLanguage2(),
> >- migrate all the current call sites to GetBestLanguage2() -- I counted
> >  18, and the updates should be easy --,
> >- and then make GetVariable() conditional on
> >  not-DISABLE_NEW_DEPRECATED_INTERFACES.
> >
> >
> >CHAR8 *
> >EFIAPI
> >GetBestLanguage2 (
> >  IN CONST CHAR8  *SupportedLanguages,
> >  IN INTN         Iso639Language,
> >  ...
> >  );
> >
> >I don't feel strongly about this question, I just think technically
> >this would be best. CLANG warnings are valuable.
> >
> >Thanks
> >Laszlo
> >
> >>> -----Original Message-----
> >>> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf
> >>> Of Marvin H?user
> >>> Sent: Friday, September 22, 2017 11:53 PM
> >>> To: edk2-devel@lists.01.org
> >>> Cc: Gao, Liming <liming.gao@intel.com>
> >>> Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and
> >>> LLVM40
> >in
> >>> CLANG38 toolchain
> >>>
> >>> Hey,
> >>>
> >>> I just noticed this patch as it recently has been pushed. I found
> >>> this has
> >been a
> >>> reaction to https://bugzilla.tianocore.org/show_bug.cgi?id=410
> >>> Though as Clang correctly detected, this is Undefined Behavior per
> >>> the C specification, so why was the warning hidden?
> >>> In context of the issue in UefiLib, providing the first element of
> >>> the VA list
> >as a
> >>> prototyped argument, would have solved the issue without UB.
> >>>
> >>> Do you wish such a patch?
> >>>
> >>> Thanks,
> >>> Marvin.
> >>>
> >>>> -----Original Message-----
> >>>> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf
> >>>> Of Gao, Liming
> >>>> Sent: Monday, August 28, 2017 9:19 AM
> >>>> To: Shi, Steven <steven.shi@intel.com>; edk2-devel@lists.01.org
> >>>> Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and
> >LLVM40
> >>> in
> >>>> CLANG38 toolchain
> >>>>
> >>>> Reviewed-by: Liming Gao <liming.gao@intel.com>
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: Shi, Steven
> >>>>> Sent: Wednesday, August 23, 2017 3:01 PM
> >>>>> To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
> >>>>> Cc: Zhu, Yonghong <yonghong.zhu@intel.com>; Shi, Steven
> >>>>> <steven.shi@intel.com>
> >>>>> Subject: [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40 in
> >>> CLANG38
> >>>>> toolchain
> >>>>>
> >>>>> From: "Shi, Steven" <steven.shi@intel.com>
> >>>>>
> >>>>> Add LLVM39 and LLVM40 support in CLANG38 toolchain
> >>>>>
> >>>>> Contributed-under: TianoCore Contribution Agreement 1.0
> >>>>> Signed-off-by: Steven Shi <steven.shi@intel.com>
> >>>>> ---
> >>>>> BaseTools/Conf/tools_def.template | 5 +++--
> >>>>> 1 file changed, 3 insertions(+), 2 deletions(-)
> >>>>>
> >>>>> diff --git a/BaseTools/Conf/tools_def.template
> >>>>> b/BaseTools/Conf/tools_def.template
> >>>>> index 1fa3ca3..2f83341 100755
> >>>>> --- a/BaseTools/Conf/tools_def.template
> >>>>> +++ b/BaseTools/Conf/tools_def.template
> >>>>> @@ -380,7 +380,8 @@ DEFINE SOURCERY_CYGWIN_TOOLS =
> >>>> /cygdrive/c/Program
> >>>>> Files/CodeSourcery/Sourcery G
> >>>>> #                               Intel(r) ACPI Compiler from
> >>>>> #                               https://acpica.org/downloads
> >>>>> #   CLANG38  -Linux-  Requires:
> >>>>> -#                             Clang v3.8 or later, LLVMgold plugin and GNU binutils
> >2.26
> >>>>> targeting x86_64-linux-gnu
> >>>>> +#                             Clang v3.8, LLVMgold plugin and GNU binutils 2.26
> >>>> targeting
> >>>>> x86_64-linux-gnu
> >>>>> +#                             Clang v3.9 or later, LLVMgold plugin and GNU binutils
> >2.28
> >>>>> targeting x86_64-linux-gnu
> >>>>> #                        Optional:
> >>>>> #                             Required to build platforms or ACPI tables:
> >>>>> #                               Intel(r) ACPI Compiler from
> >>>>> @@ -5512,7 +5513,7 @@ DEFINE CLANG38_X64_PREFIX           =
> >>>>> ENV(CLANG38_BIN)
> >>>>> DEFINE CLANG38_IA32_TARGET          = -target i686-pc-linux-gnu
> >>>>> DEFINE CLANG38_X64_TARGET           = -target x86_64-pc-linux-gnu
> >>>>>
> >>>>> -DEFINE CLANG38_ALL_CC_FLAGS         = DEF(GCC44_ALL_CC_FLAGS)
> -
> >>> Wno-
> >>>>> empty-body -fno-stack-protector -mms-bitfields -Wno-address -
> Wno-
> >>> shift-
> >>>>> negative-value -Wno-parentheses-equality -Wno-unknown-pragmas
> -
> >>>> Wno-
> >>>>> tautological-constant-out-of-range-compare
> >>>>> -Wno-incompatible-library- redeclaration
> >>>>> -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -
> >>>> msoft-
> >>>>> float -mno-implicit-float  -ftrap-
> >>>>> function=undefined_behavior_has_been_optimized_away_by_clang
> -
> >>>>> funsigned-char -fno-ms-extensions -Wno-null-dereference -Wno-
> >>>>> tautological-compare -Wno-unknown-warning-option
> >>>>> +DEFINE CLANG38_ALL_CC_FLAGS         = DEF(GCC44_ALL_CC_FLAGS)
> -
> >>>> Wno-
> >>>>> empty-body -fno-stack-protector -mms-bitfields -Wno-address -
> Wno-
> >>> shift-
> >>>>> negative-value -Wno-parentheses-equality -Wno-unknown-pragmas
> -
> >>>> Wno-
> >>>>> tautological-constant-out-of-range-compare
> >>>>> -Wno-incompatible-library- redeclaration
> >>>>> -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -
> >>>> msoft-
> >>>>> float -mno-implicit-float  -ftrap-
> >>>>> function=undefined_behavior_has_been_optimized_away_by_clang
> -
> >>>>> funsigned-char -fno-ms-extensions -Wno-null-dereference -Wno-
> >>>>> tautological-compare -Wno-unknown-warning-option -Wno-varargs
> >>>>>
> >>>>> ###########################
> >>>>> # CLANG38 IA32 definitions
> >>>>> --
> >>>>> 2.7.4
> >>>>
> >>>> _______________________________________________
> >>>> edk2-devel mailing list
> >>>> edk2-devel@lists.01.org
> >>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>> _______________________________________________
> >>> edk2-devel mailing list
> >>> edk2-devel@lists.01.org
> >>> https://lists.01.org/mailman/listinfo/edk2-devel
> >> _______________________________________________
> >> edk2-devel mailing list
> >> edk2-devel@lists.01.org
> >> https://lists.01.org/mailman/listinfo/edk2-devel
> >>


  reply	other threads:[~2017-09-25 12:26 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-23  7:01 [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40 in CLANG38 toolchain Shi Steven
2017-08-28  7:19 ` Gao, Liming
2017-09-22 15:53   ` Marvin H?user
2017-09-25  4:59     ` Gao, Liming
2017-09-25  8:13       ` Laszlo Ersek
2017-09-25  9:57         ` Gao, Liming
2017-09-25 12:29           ` Marvin Häuser [this message]
2017-09-26  3:14             ` Shi, Steven

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=AM4PR06MB149123B1790726D894BB5FFD807A0@AM4PR06MB1491.eurprd06.prod.outlook.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