In current MP implementation, BSP and AP shares the same exception
configuration. Stack switch required by Stack Guard feature needs that BSP
and AP have their own configuration. This patch adds code to ask BSP and AP
to do exception handler initialization separately.
Since AP is not supposed to do memory allocation, all memory needed to
setup stack switch will be reserved in BSP and pass to AP via new API
EFI_STATUS
EFIAPI
InitializeCpuExceptionHandlersEx (
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
);
Following two new PCDs are introduced to configure how to setup new stack
for specified exception handlers.
gUefiCpuPkgTokenSpaceGuid.PcdCpuStackSwitchExceptionList
gUefiCpuPkgTokenSpaceGuid.PcdCpuKnownGoodStackSize
Cc: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Suggested-by: Ayellet Wolman <ayellet.wolman@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jian J Wang <jian.j.wang@intel.com>
Reviewed-by: Jeff Fan <vanjeff_919@hotmail.com>
Reviewed-by: Jiewen.yao@intel.com
93 lines
2.5 KiB
INI
93 lines
2.5 KiB
INI
## @file
|
|
# CPU driver installs CPU Architecture Protocol and CPU MP protocol.
|
|
#
|
|
# Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>
|
|
# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
|
|
#
|
|
# This program and the accompanying materials
|
|
# are licensed and made available under the terms and conditions of the BSD License
|
|
# which accompanies this distribution. The full text of the license may be found at
|
|
# http://opensource.org/licenses/bsd-license.php
|
|
#
|
|
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
#
|
|
##
|
|
|
|
[Defines]
|
|
INF_VERSION = 0x00010005
|
|
BASE_NAME = CpuDxe
|
|
MODULE_UNI_FILE = CpuDxe.uni
|
|
FILE_GUID = 1A1E4886-9517-440e-9FDE-3BE44CEE2136
|
|
MODULE_TYPE = DXE_DRIVER
|
|
VERSION_STRING = 1.0
|
|
ENTRY_POINT = InitializeCpu
|
|
|
|
[Packages]
|
|
MdePkg/MdePkg.dec
|
|
MdeModulePkg/MdeModulePkg.dec
|
|
UefiCpuPkg/UefiCpuPkg.dec
|
|
|
|
[LibraryClasses]
|
|
BaseLib
|
|
BaseMemoryLib
|
|
CpuLib
|
|
DebugLib
|
|
DxeServicesTableLib
|
|
MemoryAllocationLib
|
|
MtrrLib
|
|
UefiBootServicesTableLib
|
|
UefiDriverEntryPoint
|
|
LocalApicLib
|
|
UefiCpuLib
|
|
UefiLib
|
|
CpuExceptionHandlerLib
|
|
HobLib
|
|
ReportStatusCodeLib
|
|
MpInitLib
|
|
TimerLib
|
|
|
|
[Sources]
|
|
CpuDxe.c
|
|
CpuDxe.h
|
|
CpuGdt.c
|
|
CpuGdt.h
|
|
CpuMp.c
|
|
CpuMp.h
|
|
CpuPageTable.h
|
|
CpuPageTable.c
|
|
|
|
[Sources.IA32]
|
|
Ia32/CpuAsm.asm
|
|
Ia32/CpuAsm.nasm
|
|
Ia32/CpuAsm.S
|
|
|
|
[Sources.X64]
|
|
X64/CpuAsm.asm
|
|
X64/CpuAsm.nasm
|
|
X64/CpuAsm.S
|
|
|
|
[Protocols]
|
|
gEfiCpuArchProtocolGuid ## PRODUCES
|
|
gEfiMpServiceProtocolGuid ## PRODUCES
|
|
|
|
[Guids]
|
|
gIdleLoopEventGuid ## CONSUMES ## Event
|
|
gEfiVectorHandoffTableGuid ## SOMETIMES_CONSUMES ## SystemTable
|
|
|
|
[Ppis]
|
|
gEfiSecPlatformInformation2PpiGuid ## UNDEFINED # HOB
|
|
gEfiSecPlatformInformationPpiGuid ## UNDEFINED # HOB
|
|
|
|
[Pcd]
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask ## CONSUMES
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard ## CONSUMES
|
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuStackSwitchExceptionList ## CONSUMES
|
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuKnownGoodStackSize ## CONSUMES
|
|
|
|
[Depex]
|
|
TRUE
|
|
|
|
[UserExtensions.TianoCore."ExtraFiles"]
|
|
CpuDxeExtra.uni
|