Liming, Yes, perhaps that was unclear from my message. From what I understand __builtin_va_start behaves the same way as __builtin_ms_va__start for EFIAPI functions, and these are currently the only functions where variadic arguments are allowed.
For non-EFIAPI functions the calling conventions may be different from Microsoft 64-bit, i.e. they are System V for CLANG, CLANGPDB, and GCC. If you use variadic arguments in non-EFIAPI functions (which I believe is currently unsupported), you will end up with different calling conventions for variadic arguments as well. In this case the use of __builtin_va_start will work fine here, as System V variadic arguments will be used for non-EFIAPI, and Microsoft 64-bit for EFIAPI, while __builtin_ms_va_start may technically break non-EFIAPI. Perhaps I do not fully understand the underlying mechanism, but that is how I have always thought it works. Best wishes, Vitaly On Wed, Feb 12, 2020 at 17:01, Gao, Liming <liming....@intel.com> wrote: > Vitaly: > > With this change, X64 GCC and CLANG tool chain will use below VA_START > definition. > > #define VA_START(Marker, Parameter) __builtin_ms_va_start (Marker, Parameter) > > Thanks > > Liming > > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Vitaly > Cheptsov via Groups.Io > Sent: Wednesday, February 12, 2020 4:08 PM > To: Liu, Zhiguang <zhiguang....@intel.com> > Cc: devel@edk2.groups.io; Gao, Liming <liming....@intel.com>; Shi, Steven > <steven....@intel.com> > Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: Switch to GNU mode for > CLANGPDB > > Liu, > > Thanks for explanation, it does make sense now. As for no need to > -DNO_MSABI_VA_FUNCS I agree, but it will not make much difference, because > from what I understand the VA_ARG implementation is chosen based on EFIAPI > presence when generic __builtin’s are used. > > Best, > > Vitaly > >> 12 февр. 2020 г., в 04:38, Liu, Zhiguang <zhiguang....@intel.com> написал(а): >> >> Hi Vitaly, >> >> After your patch to Switch to GNU mode for CLANGPDB, the build option >> -DNO_MSABI_VA_FUNCS is not required. I will send another patch to remove it. >> >> And for you question, this is a patch set that resolves BZ 2415, and the >> second patch 21821933aea284cd3dfea6994bd4b83bd9739fc9 has direct influence >> to CLANG38. >> >> Thanks >> >> Zhiguang >> >> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Vitaly >> Cheptsov via Groups.Io >> Sent: Tuesday, February 11, 2020 3:09 PM >> To: Gao, Liming <liming....@intel.com>; Liu, Zhiguang >> <zhiguang....@intel.com>; Shi, Steven <steven....@intel.com> >> Cc: devel@edk2.groups.io >> Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: Switch to GNU mode for >> CLANGPDB >> >> Liming, >> >> Done. As a side note, I am not positive how can >> 7990438f1437f47990a8890dee51978cb8dbc25c[1] resolve BZ 2415[2]. The bug was >> about CLANG38, and the toolchain updated was CLANGPDB. While it makes sense >> to update CLANGPDB with this flag to stay clean (it will not make a >> difference for clang in GNU mode), CLANGPDB has nothing to do to CLANG38. >> >> Best wishes, >> >> Vitaly >> >> [1] https://bugzilla.tianocore.org/show_bug.cgi?id=2415 >> >> [2] >> https://github.com/tianocore/edk2/commit/7990438f1437f47990a8890dee51978cb8dbc25c >> >>> 11 февр. 2020 г., в 09:02, Gao, Liming <liming....@intel.com> написал(а): >>> >>> Vitaly: >>> >>> Can you update this patch based on the latest edk2 trunk? I will catch it >>> for edk2 Q1 stable tag. >>> >>> Thanks >>> >>> Liming >>> >>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Liming Gao >>> Sent: Tuesday, February 11, 2020 1:34 PM >>> To: vit9696 <vit9...@protonmail.com>; devel@edk2.groups.io >>> Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: Switch to GNU mode for >>> CLANGPDB >>> >>> Reviewed-by: Liming Gao <liming....@intel.com> >>> >>> From: vit9696 <vit9...@protonmail.com> >>> Sent: Tuesday, February 11, 2020 3:23 AM >>> To: Gao, Liming <liming....@intel.com>; devel@edk2.groups.io >>> Subject: RE: [edk2-devel] [PATCH 1/1] BaseTools: Switch to GNU mode for >>> CLANGPDB >>> >>> Liming, >>> >>> We did run several of our projects based on EDK II in X64 mode, DEBUG, >>> RELEASE, NOOPT. Noticed no change from XCODE5. >>> >>> We also tried building several EDK builtin packages like CryptoPkg, MdePkg, >>> MdeModulePkg. >>> >>> Best wishes, >>> >>> Vitaly >>> >>> В пн, февр. 10, 2020 в 16:47, Gao, Liming <liming....@intel.com> пишет: >>> >>>> Vitaly: >>>> This change is good. Can you your test for it? I verify this patch for >>>> Ovmf platform on Windows. It can make ovmf pass build with CLANGPDB. >>>> >>>> Thanks >>>> Liming >>>>> -----Original Message----- >>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Vitaly >>>>> Cheptsov via Groups.Io >>>>> Sent: Monday, February 10, 2020 6:59 PM >>>>> To: devel@edk2.groups.io >>>>> Subject: [edk2-devel] [PATCH 1/1] BaseTools: Switch to GNU mode for >>>>> CLANGPDB >>>>> >>>>> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2397 >>>>> >>>>> Signed-off-by: Vitaly Cheptsov <vit9...@protonmail.com> >>>>> --- >>>>> BaseTools/Conf/tools_def.template | 6 +++--- >>>>> 1 file changed, 3 insertions(+), 3 deletions(-) >>>>> >>>>> diff --git a/BaseTools/Conf/tools_def.template >>>>> b/BaseTools/Conf/tools_def.template >>>>> index feee2bbf16..6bf6c5768e 100755 >>>>> --- a/BaseTools/Conf/tools_def.template >>>>> +++ b/BaseTools/Conf/tools_def.template >>>>> @@ -2755,11 +2755,11 @@ RELEASE_CLANG38_AARCH64_DLINK_FLAGS = >>>>> DEF(CLANG38_AARCH64_DLINK_FLAGS) -flto -Wl >>>>> DEFINE CLANGPDB_IA32_PREFIX = ENV(CLANG_BIN) >>>>> DEFINE CLANGPDB_X64_PREFIX = ENV(CLANG_BIN) >>>>> >>>>> -DEFINE CLANGPDB_IA32_TARGET = -target i686-unknown-windows >>>>> -DEFINE CLANGPDB_X64_TARGET = -target x86_64-unknown-windows >>>>> +DEFINE CLANGPDB_IA32_TARGET = -target i686-unknown-windows-gnu >>>>> +DEFINE CLANGPDB_X64_TARGET = -target x86_64-unknown-windows-gnu >>>>> >>>>> DEFINE CLANGPDB_WARNING_OVERRIDES = -Wno-parentheses-equality >>>>> -Wno-tautological-compare -Wno-tautological-constant-out- >>>>> of-range-compare -Wno-empty-body -Wno-unused-const-variable -Wno-varargs >>>>> -Wno-unknown-warning-option -Wno-microsoft-enum- >>>>> forward-reference >>>>> -DEFINE CLANGPDB_ALL_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) >>>>> DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector - >>>>> mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-pragmas >>>>> -Wno-incompatible-library-redeclaration -fno- >>>>> asynchronous-unwind-tables -mno-implicit-float >>>>> -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang - >>>>> funsigned-char -fno-ms-extensions -Wno-null-dereference >>>>> -fms-compatibility -mno-stack-arg-probe >>>>> +DEFINE CLANGPDB_ALL_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) >>>>> DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector - >>>>> fno-asynchronous-unwind-tables -funsigned-char >>>>> -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang -Wno- >>>>> address -Wno-shift-negative-value -Wno-unknown-pragmas >>>>> -Wno-incompatible-library-redeclaration -Wno-null-dereference -mno- >>>>> implicit-float -mms-bitfields -mno-stack-arg-probe -nostdlib -nostdlibinc >>>>> >>>>> ########################### >>>>> # CLANGPDB IA32 definitions >>>>> -- >>>>> 2.21.1 (Apple Git-122.3) >>>>> >>>>> >>>>> -=-=-=-=-=-= >>>>> [Groups.io](http://groups.io/) Links: You receive all messages sent to >>>>> this group. >>>>> >>>>> View/Reply Online (#54130): https://edk2.groups.io/g/devel/message/54130 >>>>> Mute This Topic: https://groups.io/mt/71134286/1759384 >>>>> Group Owner: devel+ow...@edk2.groups.io >>>>> Unsubscribe: https://edk2.groups.io/g/devel/unsub [liming....@intel.com] >>>>> -=-=-=-=-=-= > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#54298): https://edk2.groups.io/g/devel/message/54298 Mute This Topic: https://groups.io/mt/71134286/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-