[edk2-devel] [PATCH v12 07/46] MdePkg/BaseLib: Add support for the VMGEXIT instruction

Liming Gao liming.gao at intel.com
Tue Jul 28 07:39:19 UTC 2020


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.lendacky at amd.com> 
Sent: 2020年7月28日 12:08
To: Gao, Liming <liming.gao at intel.com>; devel at edk2.groups.io
Cc: Brijesh Singh <brijesh.singh at amd.com>; Ard Biesheuvel <ard.biesheuvel at arm.com>; Dong, Eric <eric.dong at intel.com>; Justen, Jordan L <jordan.l.justen at intel.com>; Laszlo Ersek <lersek at redhat.com>; Kinney, Michael D <michael.d.kinney at intel.com>; Ni, Ray <ray.ni at 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.lendacky at amd.com>
> Sent: 2020年7月27日 23:26
> To: devel at edk2.groups.io
> Cc: Brijesh Singh <brijesh.singh at amd.com>; Ard Biesheuvel 
> <ard.biesheuvel at arm.com>; Dong, Eric <eric.dong at intel.com>; Justen, 
> Jordan L <jordan.l.justen at intel.com>; Laszlo Ersek 
> <lersek at redhat.com>; Gao, Liming <liming.gao at intel.com>; Kinney, 
> Michael D <michael.d.kinney at intel.com>; Ni, Ray <ray.ni at intel.com>
> Subject: [PATCH v12 07/46] MdePkg/BaseLib: Add support for the VMGEXIT 
> instruction
> 
> From: Tom Lendacky <thomas.lendacky at 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.kinney at intel.com>
> Cc: Liming Gao <liming.gao at intel.com>
> Signed-off-by: Tom Lendacky <thomas.lendacky at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list