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. 

    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

Reply via email to