This error is reported from nasm compiler. My nasm compiler version is 2.11.08. It may be a little old. 2.12 should be fine.
This change also requires to update edk2\BaseTools\Conf\tools_def.template and mention nasm compiler version. Thanks Liming -----Original Message----- From: Tom Lendacky <thomas.lenda...@amd.com> Sent: 2020年7月28日 12:08 To: Gao, Liming <liming....@intel.com>; devel@edk2.groups.io Cc: Brijesh Singh <brijesh.si...@amd.com>; Ard Biesheuvel <ard.biesheu...@arm.com>; Dong, Eric <eric.d...@intel.com>; Justen, Jordan L <jordan.l.jus...@intel.com>; Laszlo Ersek <ler...@redhat.com>; Kinney, Michael D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com> Subject: Re: [PATCH v12 07/46] MdePkg/BaseLib: Add support for the VMGEXIT instruction On 7/27/20 8:34 PM, Gao, Liming wrote: > Tom: Hi Liming, > I meet with GCC failure on this patch. Can you help check it? If nasm > doesn't support the vmmcall instruction in 32-bit mode, you have to use > inline assembly to support it. What version of GCC are you using. I was able to successfully build the Ia32 version with my GCC level. The Ia32 version uses a trick to do switch to 64-bit just to encode the instruction. Looks like that doesn't work with your version of GCC. I can probably switch to defining the instruction as bytes. Let me look into that and possibly send you a patch to test. Thanks, Tom > > Edk2/Build/IntelFsp2Pkg/DEBUG_GCC5/IA32/MdePkg/Library/BaseLib/BaseLib > /OUTPUT/Ia32/VmgExit.iii:33: error: elf32 output format does not > support 64-bit code > GNUmakefile:741: recipe for target > > Thanks > Liming > -----Original Message----- > From: Tom Lendacky <thomas.lenda...@amd.com> > Sent: 2020年7月27日 23:26 > To: devel@edk2.groups.io > Cc: Brijesh Singh <brijesh.si...@amd.com>; Ard Biesheuvel > <ard.biesheu...@arm.com>; Dong, Eric <eric.d...@intel.com>; Justen, > Jordan L <jordan.l.jus...@intel.com>; Laszlo Ersek > <ler...@redhat.com>; Gao, Liming <liming....@intel.com>; Kinney, > Michael D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com> > Subject: [PATCH v12 07/46] MdePkg/BaseLib: Add support for the VMGEXIT > instruction > > From: Tom Lendacky <thomas.lenda...@amd.com> > > BZ: > https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugz > illa.tianocore.org%2Fshow_bug.cgi%3Fid%3D2198&data=02%7C01%7Cthoma > s.lendacky%40amd.com%7C77c8250cd9e14f2929a008d832965726%7C3dd8961fe488 > 4e608e11a82d994e183d%7C0%7C0%7C637314968570901400&sdata=6zqseI3tVm > aw351w9mfEymMnDcjDzjvcBrhARU6r3Ho%3D&reserved=0 > > VMGEXIT is a new instruction used for Hypervisor/Guest communication when > running as an SEV-ES guest. A VMGEXIT will cause an automatic exit (AE) to > occur, resulting in a #VMEXIT with an exit code value of 0x403. > > Provide the necessary support to execute the VMGEXIT instruction, which is > "rep; vmmcall". > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com> > --- > MdePkg/Library/BaseLib/BaseLib.inf | 2 ++ > MdePkg/Include/Library/BaseLib.h | 14 +++++++++ > MdePkg/Library/BaseLib/Ia32/VmgExit.nasm | 37 ++++++++++++++++++++++++ > MdePkg/Library/BaseLib/X64/VmgExit.nasm | 32 ++++++++++++++++++++ > 4 files changed, 85 insertions(+) > create mode 100644 MdePkg/Library/BaseLib/Ia32/VmgExit.nasm > create mode 100644 MdePkg/Library/BaseLib/X64/VmgExit.nasm > > diff --git a/MdePkg/Library/BaseLib/BaseLib.inf > b/MdePkg/Library/BaseLib/BaseLib.inf > index 3b93b5db8d24..3b85c56c3c03 100644 > --- a/MdePkg/Library/BaseLib/BaseLib.inf > +++ b/MdePkg/Library/BaseLib/BaseLib.inf > @@ -184,6 +184,7 @@ [Sources.Ia32] > Ia32/DisableCache.nasm| GCC > Ia32/RdRand.nasm > Ia32/XGetBv.nasm > + Ia32/VmgExit.nasm > > Ia32/DivS64x64Remainder.c > Ia32/InternalSwitchStack.c | MSFT > @@ -317,6 +318,7 @@ [Sources.X64] > X64/DisablePaging64.nasm > X64/RdRand.nasm > X64/XGetBv.nasm > + X64/VmgExit.nasm > ChkStkGcc.c | GCC > > [Sources.EBC] > diff --git a/MdePkg/Include/Library/BaseLib.h > b/MdePkg/Include/Library/BaseLib.h > index 7edf0051a0a0..04fb329eaabb 100644 > --- a/MdePkg/Include/Library/BaseLib.h > +++ b/MdePkg/Include/Library/BaseLib.h > @@ -7848,6 +7848,20 @@ AsmXGetBv ( > ); > > > +/** > + Executes a VMGEXIT instruction (VMMCALL with a REP prefix) > + > + Executes a VMGEXIT instruction. This function is only available on > + IA-32 and x64. > + > +**/ > +VOID > +EFIAPI > +AsmVmgExit ( > + VOID > + ); > + > + > /** > Patch the immediate operand of an IA32 or X64 instruction such that the > byte, > word, dword or qword operand is encoded at the end of the > instruction's diff --git a/MdePkg/Library/BaseLib/Ia32/VmgExit.nasm > b/MdePkg/Library/BaseLib/Ia32/VmgExit.nasm > new file mode 100644 > index 000000000000..a4b37385cc7a > --- /dev/null > +++ b/MdePkg/Library/BaseLib/Ia32/VmgExit.nasm > @@ -0,0 +1,37 @@ > +;-------------------------------------------------------------------- > +-- > +-------- > +; > +; Copyright (C) 2020, Advanced Micro Devices, Inc. All rights > +reserved.<BR> ; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; > +Module > +Name: > +; > +; VmgExit.Asm > +; > +; Abstract: > +; > +; AsmVmgExit function > +; > +; Notes: > +; > +;-------------------------------------------------------------------- > +-- > +-------- > + > + SECTION .text > + > +;-------------------------------------------------------------------- > +-- > +-------- > +; VOID > +; EFIAPI > +; AsmVmgExit ( > +; VOID > +; ); > +;-------------------------------------------------------------------- > +-- > +-------- > +global ASM_PFX(AsmVmgExit) > +ASM_PFX(AsmVmgExit): > +; > +; NASM doesn't support the vmmcall instruction in 32-bit mode, so > +work around ; this by temporarily switching to 64-bit mode. > +; > +BITS 64 > + rep vmmcall > +BITS 32 > + ret > + > diff --git a/MdePkg/Library/BaseLib/X64/VmgExit.nasm > b/MdePkg/Library/BaseLib/X64/VmgExit.nasm > new file mode 100644 > index 000000000000..26f034593c67 > --- /dev/null > +++ b/MdePkg/Library/BaseLib/X64/VmgExit.nasm > @@ -0,0 +1,32 @@ > +;-------------------------------------------------------------------- > +-- > +-------- > +; > +; Copyright (C) 2020, Advanced Micro Devices, Inc. All rights > +reserved.<BR> ; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; > +Module > +Name: > +; > +; VmgExit.Asm > +; > +; Abstract: > +; > +; AsmVmgExit function > +; > +; Notes: > +; > +;-------------------------------------------------------------------- > +-- > +-------- > + > + DEFAULT REL > + SECTION .text > + > +;-------------------------------------------------------------------- > +-- > +-------- > +; VOID > +; EFIAPI > +; AsmVmgExit ( > +; VOID > +; ); > +;-------------------------------------------------------------------- > +-- > +-------- > +global ASM_PFX(AsmVmgExit) > +ASM_PFX(AsmVmgExit): > + rep vmmcall > + ret > + > -- > 2.27.0 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#63390): https://edk2.groups.io/g/devel/message/63390 Mute This Topic: https://groups.io/mt/75824947/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-