Ø  I previously reported that GCC46 (namely 4.6) has a bug with this
conventions and should be used with the follow definition

Ø  DEFINE GCC46_X64_CC_FLAGS            = DEF(GCC45_X64_CC_FLAGS) -Wno-
unused-but-set-variable -mabi=ms

 

I reported this too: http://sourceforge.net/apps/trac/edk2/ticket/590

 

From: Sergey Isakov [mailto:isakov...@bk.ru] 
Sent: Friday, March 22, 2013 8:06 AM
To: edk2-devel@lists.sourceforge.net
Subject: Re: [edk2] [edk2-buildtools] UEFI function is broken when compiled
by GCC

 

Hi,

 

I previously reported that GCC46 (namely 4.6) has a bug with this
conventions and should be used with the follow definition

DEFINE GCC46_X64_CC_FLAGS            = DEF(GCC45_X64_CC_FLAGS) -Wno-unused-
but-set-variable -mabi=ms

 

Hope it helps,

Sergey

 

21.03.2013, в 20:23, Andrew Fish написал(а):





Tomer,

 

It is a bug in your code. You need to use the correct function prototypes,
and you especially need to use EFIAPI correctly. 

 

This is bad:

(EFI_AP_PROCEDURE)GetThread,

 

You need to make GetThead() have the proper prototype. 

 

For GCC 4.6 the generic calling convention is the Unix ABI for X64. This
means the 1st 6 args are passed in registers and the register sequence is
different than the 4 register used in EFIABI (Microsoft X64 ABI subset).
GCC only generates EFIABI if the function has the EFIABI qualifier in its
definition. 

 

So any indirect function call needs to have EFIABI. Thus any protocol
member function, pointer to function,  EFI Event function, and function
passed via an API needs to have the EFIABI qualifier. Also any assembly
code C function prototype needs to have EFIABI so it gets called correctly. 

 

Andrew Fish

 

 

 

 

On Mar 21, 2013, at 2:36 AM, "Shalev, Tomer" <tomer.sha...@intel.com> wrote:





Hi There,

 

Calls to StartupThisAP() does not work as expected when I build my UEFI
application from GCC 4.6 under Linux. If I build it under Windows using
Visual Studio 2010, it works…

 

In GCC built application, The GetThread application receives a different
value in its argument list than expected, according to what was passed to
StartupThisAP(). I actually get 1, 4 and 5 for Ap's 1, 2 and 3,
respectively, which might indicate that I get their APIC ID numbers.

 

I suspect there are other functionality that doesn't work as expected in
such situation, such as Int86().

 

I would be thankful if you can help me with this.

Attached is a sample application that works when compiled in Windows but
fails when compiled by GCC in Linux. Password is 12345678

 

Thanks,

Tomer

 

 

 

<MpTestPkg.zip>

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

----------------------------------------------------------------------------
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
 
<http://p.sf.net/sfu/appdyn_d2d_mar_________________________________________
______>
http://p.sf.net/sfu/appdyn_d2d_mar__________________________________________
_____
edk2-buildtools-devel mailing list
 <mailto:edk2-buildtools-de...@lists.sourceforge.net> edk2-buildtools-
de...@lists.sourceforge.net
 <https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel>
https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel

 

----------------------------------------------------------------------------
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar__________________________________________
_____
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to