On 6/18/20 2:23 AM, Dong, Eric wrote: > Hi Tom, > > When use VS2015 to build this code, it reports below error. Please help to > fix it. > > k:\edk2\UefiCpuPkg\Include\Library/VmgExitLib.h: error C2220: warning treated > as error - no 'object' file generated > k:\edk2\UefiCpuPkg\Include\Library/VmgExitLib.h: warning C4335: Mac file > format detected: please convert the source file to either DOS or UNIX format
That is strange... I didn't see this when I ran through the CI. When I do a file command against the file it reports: UefiCpuPkg/Include/Library/VmgExitLib.h: C source, ASCII text, with CRLF line terminators I'll investigate this and try and figure out what's going on, but if anyone else has some ideas, please let me know. Thanks, Tom > > Thanks, > Eric > >> -----Original Message----- >> From: Tom Lendacky <thomas.lenda...@amd.com> >> Sent: Friday, June 5, 2020 9:27 PM >> 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 v9 08/46] UefiCpuPkg: Implement library support for >> VMGEXIT >> >> BZ: >> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2198&data=02%7C01%7Cthomas.lendacky%40amd.com%7Cd75554da4959407c967608d8135877be%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637280617975250842&sdata=fBlK2BFkRdAS5EWcM8YShf1ZswfRN%2F41L7XeUsb4ZCs%3D&reserved=0 >> >> To support handling #VC exceptions and issuing VMGEXIT instructions, >> create a library with functions that can be used to perform these >> #VC/VMGEXIT related operations. This includes functions for: >> - Handling #VC exceptions >> - Preparing for and issuing a VMGEXIT >> - Performing MMIO-related write operations to support flash emulation >> - Performing AP related boot opeations >> >> The base functions in this driver will not do anything and will return >> an error if a return value is required. It is expected that other packages >> (like OvmfPkg) will create a version of the library to fully support an >> SEV-ES guest. >> >> Cc: Eric Dong <eric.d...@intel.com> >> Cc: Ray Ni <ray...@intel.com> >> Cc: Laszlo Ersek <ler...@redhat.com> >> Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com> >> --- >> UefiCpuPkg/UefiCpuPkg.dec | 3 + >> UefiCpuPkg/UefiCpuPkg.dsc | 2 + >> UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf | 27 +++++ >> UefiCpuPkg/Include/Library/VmgExitLib.h | 103 >> +++++++++++++++++ >> UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c | 121 >> ++++++++++++++++++++ >> UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni | 15 +++ >> 6 files changed, 271 insertions(+) >> >> diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec >> index df5d02bae6b4..cb92f34b6f55 100644 >> --- a/UefiCpuPkg/UefiCpuPkg.dec >> +++ b/UefiCpuPkg/UefiCpuPkg.dec >> @@ -53,6 +53,9 @@ [LibraryClasses.IA32, LibraryClasses.X64] >> ## >> >> MpInitLib|Include/Library/MpInitLib.h >> >> >> >> + ## @libraryclass Provides function to support VMGEXIT processing. >> >> + VmgExitLib|Include/Library/VmgExitLib.h >> >> + >> >> [Guids] >> >> gUefiCpuPkgTokenSpaceGuid = { 0xac05bf33, 0x995a, 0x4ed4, { 0xaa, >> 0xb8, 0xef, 0x7a, 0xe8, 0xf, 0x5c, 0xb0 }} >> >> gMsegSmramGuid = { 0x5802bce4, 0xeeee, 0x4e33, { 0xa1, >> 0x30, >> 0xeb, 0xad, 0x27, 0xf0, 0xe4, 0x39 }} >> >> diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc >> index afa304128221..f0e58b90ff0a 100644 >> --- a/UefiCpuPkg/UefiCpuPkg.dsc >> +++ b/UefiCpuPkg/UefiCpuPkg.dsc >> @@ -56,6 +56,7 @@ [LibraryClasses] >> >> PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/Base >> PeCoffGetEntryPointLib.inf >> >> >> PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BaseP >> eCoffExtraActionLibNull.inf >> >> >> TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/Tp >> mMeasurementLibNull.inf >> >> + VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf >> >> >> >> [LibraryClasses.common.SEC] >> >> >> PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNull.i >> nf >> >> @@ -143,6 +144,7 @@ [Components.IA32, Components.X64] >> >> UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLib >> Null.inf >> >> UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf >> >> UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf >> >> + UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf >> >> UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf >> >> UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf >> >> UefiCpuPkg/SecCore/SecCore.inf >> >> diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf >> b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf >> new file mode 100644 >> index 000000000000..d8770a21c355 >> --- /dev/null >> +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf >> @@ -0,0 +1,27 @@ >> +## @file >> >> +# VMGEXIT Support Library. >> >> +# >> >> +# Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR> >> >> +# SPDX-License-Identifier: BSD-2-Clause-Patent >> >> +# >> >> +## >> >> + >> >> +[Defines] >> >> + INF_VERSION = 0x00010005 >> >> + BASE_NAME = VmgExitLibNull >> >> + MODULE_UNI_FILE = VmgExitLibNull.uni >> >> + FILE_GUID = 3cd7368f-ef9b-4a9b-9571-2ed93813677e >> >> + MODULE_TYPE = BASE >> >> + VERSION_STRING = 1.0 >> >> + LIBRARY_CLASS = VmgExitLib >> >> + >> >> +[Sources.common] >> >> + VmgExitLibNull.c >> >> + >> >> +[Packages] >> >> + MdePkg/MdePkg.dec >> >> + UefiCpuPkg/UefiCpuPkg.dec >> >> + >> >> +[LibraryClasses] >> >> + BaseLib >> >> + >> >> diff --git a/UefiCpuPkg/Include/Library/VmgExitLib.h >> b/UefiCpuPkg/Include/Library/VmgExitLib.h >> new file mode 100644 >> index 000000000000..0b2f39026a4a >> --- /dev/null >> +++ b/UefiCpuPkg/Include/Library/VmgExitLib.h >> @@ -0,0 +1,103 @@ >> +/** @file >> >> + Public header file for the VMGEXIT Support library class. >> >> + >> >> + This library class defines some routines used when invoking the VMGEXIT >> >> + instruction in support of SEV-ES and to handle #VC exceptions. >> >> + >> >> + Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR> >> >> + SPDX-License-Identifier: BSD-2-Clause-Patent >> >> + >> >> +**/ >> >> + >> >> +#ifndef __VMG_EXIT_LIB_H__ >> >> +#define __VMG_EXIT_LIB_H__ >> >> + >> >> +#include <Protocol/DebugSupport.h> >> >> +#include <Register/Amd/Ghcb.h> >> >> + >> >> + >> >> +/** >> >> + Perform VMGEXIT. >> >> + >> >> + Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction >> and >> >> + then handles the return actions. >> >> + >> >> + @param[in, out] Ghcb A pointer to the GHCB >> >> + @param[in] ExitCode VMGEXIT code to be assigned to the SwExitCode >> >> + field of the GHCB. >> >> + @param[in] ExitInfo1 VMGEXIT information to be assigned to the >> >> + SwExitInfo1 field of the GHCB. >> >> + @param[in] ExitInfo2 VMGEXIT information to be assigned to the >> >> + SwExitInfo2 field of the GHCB. >> >> + >> >> + @return 0 VMGEXIT succeeded. >> >> + @return Others VMGEXIT processing did not succeed. Exception >> >> + number to be propagated. >> >> + >> >> +**/ >> >> +UINT64 >> >> +EFIAPI >> >> +VmgExit ( >> >> + IN OUT GHCB *Ghcb, >> >> + IN UINT64 ExitCode, >> >> + IN UINT64 ExitInfo1, >> >> + IN UINT64 ExitInfo2 >> >> + ); >> >> + >> >> +/** >> >> + Perform pre-VMGEXIT initialization/preparation. >> >> + >> >> + Performs the necessary steps in preparation for invoking VMGEXIT. Must >> be >> >> + called before setting any fields within the GHCB. >> >> + >> >> + @param[in, out] Ghcb A pointer to the GHCB >> >> + >> >> +**/ >> >> +VOID >> >> +EFIAPI >> >> +VmgInit ( >> >> + IN OUT GHCB *Ghcb >> >> + ); >> >> + >> >> +/** >> >> + Perform post-VMGEXIT cleanup. >> >> + >> >> + Performs the necessary steps to cleanup after invoking VMGEXIT. Must be >> >> + called after obtaining needed fields within the GHCB. >> >> + >> >> + @param[in, out] Ghcb A pointer to the GHCB >> >> + >> >> +**/ >> >> +VOID >> >> +EFIAPI >> >> +VmgDone ( >> >> + IN OUT GHCB *Ghcb >> >> + ); >> >> + >> >> +/** >> >> + Handle a #VC exception. >> >> + >> >> + Performs the necessary processing to handle a #VC exception. >> >> + >> >> + The base library function returns an error equal to VC_EXCEPTION, >> >> + to be propagated to the standard exception handling stack. >> >> + >> >> + @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to be >> set >> >> + as value to use on error. >> >> + @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT >> >> + >> >> + @retval EFI_SUCCESS Exception handled >> >> + @retval EFI_UNSUPPORTED #VC not supported, (new) exception >> value to >> >> + propagate provided >> >> + @retval EFI_PROTOCOL_ERROR #VC handling failed, (new) exception >> value to >> >> + propagate provided >> >> + >> >> +**/ >> >> +EFI_STATUS >> >> +EFIAPI >> >> +VmgExitHandleVc ( >> >> + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, >> >> + IN OUT EFI_SYSTEM_CONTEXT SystemContext >> >> + ); >> >> + >> >> +#endif >> >> diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c >> b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c >> new file mode 100644 >> index 000000000000..30a239df298e >> --- /dev/null >> +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c >> @@ -0,0 +1,121 @@ >> +/** @file >> >> + VMGEXIT Base Support Library. >> >> + >> >> + Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR> >> >> + SPDX-License-Identifier: BSD-2-Clause-Patent >> >> + >> >> +**/ >> >> + >> >> +#include <Base.h> >> >> +#include <Uefi.h> >> >> +#include <Library/VmgExitLib.h> >> >> + >> >> +/** >> >> + Perform VMGEXIT. >> >> + >> >> + Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction >> and >> >> + then handles the return actions. >> >> + >> >> + The base library function returns an error in the form of a >> >> + GHCB_EVENT_INJECTION representing a GP_EXCEPTION. >> >> + >> >> + @param[in, out] Ghcb A pointer to the GHCB >> >> + @param[in] ExitCode VMGEXIT code to be assigned to the SwExitCode >> >> + field of the GHCB. >> >> + @param[in] ExitInfo1 VMGEXIT information to be assigned to the >> >> + SwExitInfo1 field of the GHCB. >> >> + @param[in] ExitInfo2 VMGEXIT information to be assigned to the >> >> + SwExitInfo2 field of the GHCB. >> >> + >> >> + @return 0 VMGEXIT succeeded. >> >> + @return Others VMGEXIT processing did not succeed. Exception >> >> + event to be propagated. >> >> + >> >> +**/ >> >> +UINT64 >> >> +EFIAPI >> >> +VmgExit ( >> >> + IN OUT GHCB *Ghcb, >> >> + IN UINT64 ExitCode, >> >> + IN UINT64 ExitInfo1, >> >> + IN UINT64 ExitInfo2 >> >> + ) >> >> +{ >> >> + GHCB_EVENT_INJECTION Event; >> >> + >> >> + Event.Uint64 = 0; >> >> + Event.Elements.Vector = GP_EXCEPTION; >> >> + Event.Elements.Type = GHCB_EVENT_INJECTION_TYPE_EXCEPTION; >> >> + Event.Elements.Valid = 1; >> >> + >> >> + return Event.Uint64; >> >> +} >> >> + >> >> +/** >> >> + Perform pre-VMGEXIT initialization/preparation. >> >> + >> >> + Performs the necessary steps in preparation for invoking VMGEXIT. Must >> be >> >> + called before setting any fields within the GHCB. >> >> + >> >> + The base library function does nothing. >> >> + >> >> + @param[in, out] Ghcb A pointer to the GHCB >> >> + >> >> +**/ >> >> +VOID >> >> +EFIAPI >> >> +VmgInit ( >> >> + IN OUT GHCB *Ghcb >> >> + ) >> >> +{ >> >> +} >> >> + >> >> +/** >> >> + Perform post-VMGEXIT cleanup. >> >> + >> >> + Performs the necessary steps to cleanup after invoking VMGEXIT. Must be >> >> + called after obtaining needed fields within the GHCB. >> >> + >> >> + The base library function does nothing. >> >> + >> >> + @param[in, out] Ghcb A pointer to the GHCB >> >> + >> >> +**/ >> >> +VOID >> >> +EFIAPI >> >> +VmgDone ( >> >> + IN OUT GHCB *Ghcb >> >> + ) >> >> +{ >> >> +} >> >> + >> >> +/** >> >> + Handle a #VC exception. >> >> + >> >> + Performs the necessary processing to handle a #VC exception. >> >> + >> >> + The base library function returns an error equal to VC_EXCEPTION, >> >> + to be propagated to the standard exception handling stack. >> >> + >> >> + @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to be >> set >> >> + as value to use on error. >> >> + @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT >> >> + >> >> + @retval EFI_SUCCESS Exception handled >> >> + @retval EFI_UNSUPPORTED #VC not supported, (new) exception >> value to >> >> + propagate provided >> >> + @retval EFI_PROTOCOL_ERROR #VC handling failed, (new) exception >> value to >> >> + propagate provided >> >> + >> >> +**/ >> >> +EFI_STATUS >> >> +EFIAPI >> >> +VmgExitHandleVc ( >> >> + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, >> >> + IN OUT EFI_SYSTEM_CONTEXT SystemContext >> >> + ) >> >> +{ >> >> + *ExceptionType = VC_EXCEPTION; >> >> + >> >> + return EFI_UNSUPPORTED; >> >> +} >> >> diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni >> b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni >> new file mode 100644 >> index 000000000000..8639bc0e8ce9 >> --- /dev/null >> +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni >> @@ -0,0 +1,15 @@ >> +// /** @file >> >> +// VMGEXIT support library instance. >> >> +// >> >> +// VMGEXIT support library instance. >> >> +// >> >> +// Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR> >> >> +// SPDX-License-Identifier: BSD-2-Clause-Patent >> >> +// >> >> +// **/ >> >> + >> >> + >> >> +#string STR_MODULE_ABSTRACT #language en-US "VMGEXIT support >> NULL library instance" >> >> + >> >> +#string STR_MODULE_DESCRIPTION #language en-US "VMGEXIT >> support NULL library instance." >> >> + >> >> -- >> 2.27.0 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#61486): https://edk2.groups.io/g/devel/message/61486 Mute This Topic: https://groups.io/mt/74692413/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-