Hi Would you please use CopyMem() for the structure assignment? VgpuGop->GopModeInfo = *GopModeInfo;
That is best known method to resolve memcpy symbol issue. Thank you Yao Jiewen From: Pedro Falcato <pedro.falc...@gmail.com> Sent: Thursday, May 26, 2022 1:01 AM To: Ard Biesheuvel <a...@kernel.org> Cc: edk2-devel-groups-io <devel@edk2.groups.io>; Rebecca Cran <quic_rc...@quicinc.com>; Ard Biesheuvel <ardb+tianoc...@kernel.org>; Yao, Jiewen <jiewen....@intel.com>; Justen, Jordan L <jordan.l.jus...@intel.com>; Gerd Hoffmann <kra...@redhat.com> Subject: Re: [edk2-devel] OvmfPkgX64 doesn't build with CLANG38 (clang 14.0.3) NOOPT - undefined reference to `memcpy' On Wed, May 25, 2022 at 5:45 PM Ard Biesheuvel <a...@kernel.org<mailto:a...@kernel.org>> wrote: On Wed, 25 May 2022 at 18:44, Pedro Falcato <pedro.falc...@gmail.com<mailto:pedro.falc...@gmail.com>> wrote: > > > > On Wed, May 25, 2022 at 4:50 PM Ard Biesheuvel > <a...@kernel.org<mailto:a...@kernel.org>> wrote: >> >> On Wed, 25 May 2022 at 17:08, Rebecca Cran >> <quic_rc...@quicinc.com<mailto:quic_rc...@quicinc.com>> wrote: >> > >> > I noticed OvmfPkg/OvmfPkgX64.dsc doesn't build with `-t CLANG38 -b >> > NOOPT` (with clang version 14.0.2) with the latest edk2 master >> > (07c0c2eb0a5970db614ebce1060fc79d6904bdfd): >> > >> > make: Nothing to be done for 'tbuild'. >> > /usr/bin/ld: /usr/bin/ld: DWARF error: invalid or unhandled FORM value: >> > 0x23 >> > /home/bcran/src/upstream/uefi/edk2/Build/OvmfX64/NOOPT_CLANG38/X64/OvmfPkg/VirtioGpuDxe/VirtioGpu/OUTPUT/VirtioGpuDxe.lib(Gop.obj): >> > in function `GopSetMode': >> > Gop.c:(.text.GopSetMode+0x418): undefined reference to `memcpy' >> >> Can you dump the object file to see where the memcpy() call is emitted? > > I think I found the smoking gun: > https://github.com/tianocore/edk2/blob/916f90baa547b3ebef8fa87c530e2f0c8e35e1e3/OvmfPkg/VirtioGpuDxe/Gop.c#L512 Indeed. We don't support struct assignment in Tianocore code, exactly for this reason. Note: We should think about providing some basic libc functions in base EDK2 as some are required by the clang/GCC compilers (see https://gcc.gnu.org/onlinedocs/gcc/Standards.html, grep for memcpy or freestanding). Passing -ffreestanding would also be a good idea as to let the compiler know it's dealing with a freestanding environment vs a hosted user-space one. All the best, Pedro -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#90018): https://edk2.groups.io/g/devel/message/90018 Mute This Topic: https://groups.io/mt/91335000/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-