On Sep 29, 2014, at 5:39 AM, Scott Duplichan <[email protected]> wrote:
> J. E. [mailto:[email protected]] wrote:
>
> Sent: Monday, September 29, 2014 03:24 AM
> To: [email protected]
> Subject: [edk2] Compiler inserting memcpy. Unresolved external symbol memcpy
>
> I'm getting this error when compiling my project in X64. (But no error in
> NT32 for some reason, probably a 32bit vs 64bit thing).
>
> error LNK2001: unresolved external symbol memcpy
>
> I don't use memcpy at all, I only use CopyMem.
> So it must be the compiler optimizing code and inserting memcpy here and
> there.
>
> I added compile option /FAcs
> I found 20+ instances of memcpy.
>
> Is there a trick around this so I don't have to modify lots of code?
>
> This is a real problem with no easy solution that I know of. My rant: Why
> doesn't EDK2 provide
> just memcpy, etc?
> For your code, passing &rcDest instead of rcDest should eliminate the memcpy
> calls you show.
>
> Thanks,
> Scott
>
> If there is no way around it, should I not be parsing STRUCTS through
> functions and use pointers instead?
>
Yes.
UEFI 2.4 2.3.4.2 Detailed Calling Conventions
The caller passes the first four integer arguments in registers. The integer
values are passed from left to right in Rcx, Rdx, R8, and R9 registers. The
caller passes arguments five and above onto the stack. All arguments must be
right-justified in the register in which they are passed. This ensures the
callee can process only the bits in the register that are required.
The caller passes arrays and strings via a pointer to memory allocated by the
caller. The caller passes structures and unions of size 8, 16, 32, or 64 bits
as if they were integers of the same size. The caller is not allowed to pass
structures and unions of other than these sizes and must pass these unions and
structures via a pointer.
…
Thus the memcpy is the compiler enforcing the calling conventions.
RECT A, B;
A = B;
Will also cause memcpy to be emitted.
Thanks,
Andrew Fish
------------------------------------------------------------------------------
Slashdot TV. Videos for Nerds. Stuff that Matters.
http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel