> On Feb 9, 2018, at 12:13 AM, Ruslan Nikolaev <nruslan_de...@yahoo.com> wrote:
> 
> Sorry, I did not answer this question last time. It is basically may not be 
> very easy to change if you already have some assembly code which makes use of 
> a specific calling convention. Plus there may be benefits of using 
> register-based calls elsewhere.
> 
> I thought, since EFIAPI aims to define a specific calling convention 
> regardless of compilation flags, why not specify regparm(0) there as well. 
> 

Rusian,

The primary goal of EFIAPI is to make sure it produces the correct code with 
the set of compilers that are supported by the edk2 project: 
https://github.com/tianocore/edk2/blob/master/BaseTools/Conf/tools_def.template 
<https://github.com/tianocore/edk2/blob/master/BaseTools/Conf/tools_def.template>

Thus it has the values that work correctly with the supported toolchains. It is 
very hard to support some conceptual toolchain if a version of that toolchain 
is not checked in as there is no way to test it. 

Thanks,

Andrew Fish


>    On Friday, February 9, 2018 2:17 AM, Andrew Fish <af...@apple.com> wrote:
> 
> 
> 
> 
>> On Feb 8, 2018, at 11:12 PM, Ruslan Nikolaev <nruslan_de...@yahoo.com> wrote:
>> 
>> Well, what I was implying is that if MdePkg (Ia32) headers are included in 
>> some UEFI program which itself is compiled with some custom register-based 
>> calling convention, current EFIAPI definition is insufficient.
>> Current definition with cdecl attribute merely forces caller stack clean-up 
>> in gcc/clang for Ia32
>> So, if I build with '-mrtd' option (a callee cleans up the stack) current 
>> EFIAPI definition will take care of it. However, if in addition to that I 
>> specify -mregparm=1,2,3 to pass some parameters in registers, cdecl will not 
>> take care of it.
>> EFIAPI for Ia32 wants all parameters in the stack. Therefore, it should be 
>> reasonable to specify regparm(0) as part of EFIAPI definition as well, so 
>> that regardless of mregparm parameter the compiler will generate correct 
>> code. 
>> 
> 
> Ruslan,
> 
> Thanks for the info. I guess I still have the question of if you are making 
> firmware why not solve this problem with compiler flags in the 1st place. 
> 
> Thanks,
> 
> Andrew Fish
> 
>> 
>>     On Friday, February 9, 2018 1:59 AM, Andrew Fish <af...@apple.com> wrote:
>> 
>> 
>> 
>> 
>> On Feb 8, 2018, at 5:32 PM, Ruslan Nikolaev <nruslan_de...@yahoo.com> wrote:
>> I submitted a bug report and a patch: 
>> https://bugzilla.tianocore.org/show_bug.cgi?id=870
>> It is very straight-forward. Can someone review it, and, hopefully, commit 
>> the change?
>> 
>> 
>> Ruslan,
>> Was there an example of how to code this? Sorry if I missed it, I'm getting 
>> a lot of email these days.
>> Also what is you usage model? Clang is very cross compiler friendly and you 
>> can specify a triple to support the ABI you need. To get EFI supported on 
>> macOS tools we ended up open sourcing a triple to support the EFIAPI. If you 
>> look in 
>> https://github.com/tianocore/edk2/blob/master/BaseTools/Conf/tools_def.template
>>  you will see that you can use Xcode to build EFIAPI if you pass -target 
>> x86_64-pc-win32-macho. 
>> I guess I'm asking the question if you really need to support multiple ABIs 
>> with clang? The best way to solve this in clang is to make it support 
>> EFIAPI. If you don't need multiple ABIs take a look at what we did with 
>> -target x86_64-pc-win32-macho, which tells clang to build EFIABI, but output 
>> a mach-O executable (we need the mach-O for our debugger). Basically with 
>> clang you could upstream what you need into the compiler you are using for 
>> other things...
>> Thanks,
>> Andrew Fish
>> 
>> - Ruslan
>> _______________________________________________
>> 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

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to