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&amp;data=02%7C01%7Cthomas.lendacky%40amd.com%7Cd75554da4959407c967608d8135877be%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637280617975250842&amp;sdata=fBlK2BFkRdAS5EWcM8YShf1ZswfRN%2F41L7XeUsb4ZCs%3D&amp;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]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to