From: Ruslan Nikolaev <nruslan_devel@yahoo.com>
To: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: Patch to fix EFIAPI definition
Date: Fri, 9 Feb 2018 07:12:07 +0000 (UTC) [thread overview]
Message-ID: <409605137.4680848.1518160327442@mail.yahoo.com> (raw)
In-Reply-To: <113792737.4648564.1518159755787@mail.yahoo.com>
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.
On Friday, February 9, 2018 1:59 AM, Andrew Fish <afish@apple.com> wrote:
On Feb 8, 2018, at 5:32 PM, Ruslan Nikolaev <nruslan_devel@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
>From afish@apple.com Thu Feb 8 23:11:24 2018
Return-Path: <afish@apple.com>
X-Original-To: edk2-devel@lists.01.org
Delivered-To: edk2-devel@lists.01.org
Received-SPF: Pass (sender SPF authorized) identity
next prev parent reply other threads:[~2018-02-09 7:06 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <774033816.4534639.1518139941905.ref@mail.yahoo.com>
2018-02-09 1:32 ` Patch to fix EFIAPI definition Ruslan Nikolaev
2018-02-09 6:59 ` Andrew Fish
[not found] ` <113792737.4648564.1518159755787@mail.yahoo.com>
2018-02-09 7:12 ` Ruslan Nikolaev [this message]
[not found] ` <29D926A0-3F6B-47AB-AE2E-BE2F256EA8A0@apple.com>
2018-02-09 8:13 ` Ruslan Nikolaev
2018-02-11 0:48 ` Ruslan Nikolaev
2018-02-12 23:49 ` Andrew Fish
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=409605137.4680848.1518160327442@mail.yahoo.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