From eeb1cd5af35f45308aa2ff153feed9f768a6ef77 Mon Sep 17 00:00:00 2001 From: bxing Date: Mon, 21 Aug 2006 02:53:29 +0000 Subject: [PATCH] 1. Added Non-existing.c in BaseLib to assert no invocations of SwitchStack() on IPF. 2. Added SwitchIplStacks() function to DxeIplPeim to encapsulate arch details on stack switching. 3. Added PeiSwitchStacks() function to PeiMain to encapsulate arch details on stack switching. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1328 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkModulePkg/Core/DxeIplPeim/DxeIpl.h | 54 +++++--- EdkModulePkg/Core/DxeIplPeim/DxeLoad.c | 11 +- .../Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 51 ++++++-- .../Core/DxeIplPeim/Ipf/DxeLoadFunc.c | 61 +++++++-- EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 9 +- EdkModulePkg/Core/Pei/Dispatcher/Stack.c | 50 ++++++++ EdkModulePkg/Core/Pei/Ipf/Stack.c | 58 +++++++++ EdkModulePkg/Core/Pei/PeiMain.h | 118 +++++++++++------- EdkModulePkg/Core/Pei/PeiMain.msa | 8 +- MdePkg/Library/BaseLib/BaseLib.msa | 1 + MdePkg/Library/BaseLib/Ipf/Non-existing.c | 53 ++++++++ 11 files changed, 385 insertions(+), 89 deletions(-) create mode 100644 EdkModulePkg/Core/Pei/Dispatcher/Stack.c create mode 100644 EdkModulePkg/Core/Pei/Ipf/Stack.c create mode 100644 MdePkg/Library/BaseLib/Ipf/Non-existing.c diff --git a/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h b/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h index 5e35042861..9e626a7dc7 100644 --- a/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h +++ b/EdkModulePkg/Core/DxeIplPeim/DxeIpl.h @@ -1,13 +1,13 @@ /*++ -Copyright (c) 2006, Intel Corporation -All rights reserved. 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. +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. Module Name: @@ -25,15 +25,37 @@ Abstract: extern BOOLEAN gInMemory; +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's + Reserved on other architectures. + +**/ VOID +EFIAPI SwitchIplStacks ( - VOID *EntryPoint, - UINTN Parameter1, - UINTN Parameter2, - VOID *NewStack, - VOID *NewBsp - ) -; + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VOID *NewBsp + ); EFI_STATUS PeiFindFile ( @@ -133,7 +155,7 @@ CreateIdentityMappingPageTables ( VOID ActivateLongMode ( - IN EFI_PHYSICAL_ADDRESS PageTables, + IN EFI_PHYSICAL_ADDRESS PageTables, IN EFI_PHYSICAL_ADDRESS HobStart, IN EFI_PHYSICAL_ADDRESS Stack, IN EFI_PHYSICAL_ADDRESS CodeEntryPoint1, diff --git a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c index 4492376462..c53a7316c9 100644 --- a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c +++ b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c @@ -130,7 +130,7 @@ Returns: NULL ); - if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) { + if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) { // // The DxeIpl has not yet been shadowed // @@ -396,11 +396,12 @@ Returns: ); DEBUG ((EFI_D_INFO, "DXE Core Entry\n")); - SwitchStack ( + SwitchIplStacks ( (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint, HobList.Raw, - (VOID *) (UINTN) BspStore, - TopOfStack + NULL, + TopOfStack, + (VOID *) (UINTN) BspStore ); // @@ -757,7 +758,7 @@ Returns: EFI_FIRMWARE_VOLUME_HEADER *FvHeader; EFI_COMPRESSION_SECTION *CompressionSection; EFI_FFS_FILE_HEADER *FfsFileHeader; - + FfsFileHeader = *RealFfsFileHeader; Status = PeiServicesFfsFindSectionData ( diff --git a/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c b/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c index 4d1015bbd8..0aa323ec2f 100644 --- a/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c +++ b/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c @@ -1,13 +1,13 @@ /*++ -Copyright (c) 2006, Intel Corporation -All rights reserved. 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. +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. Module Name: @@ -49,3 +49,38 @@ Returns: *BspStore = 0; return EFI_SUCCESS; } + +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's + Reserved on other architectures. + +**/ +VOID +EFIAPI +SwitchIplStacks ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VOID *NewBsp + ) +{ + SwitchStack (EntryPoint, Context1, Context2, NewStack); +} diff --git a/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c b/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c index bcf59f970a..cdc418f6f3 100644 --- a/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c +++ b/EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c @@ -1,13 +1,13 @@ /*++ -Copyright (c) 2006, Intel Corporation -All rights reserved. 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. +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. Module Name: @@ -48,8 +48,8 @@ Returns: { EFI_STATUS Status; - Status = EFI_SUCCESS; - + Status = EFI_SUCCESS; + ASSERT (NULL != BspStore); // @@ -68,3 +68,44 @@ Returns: return EFI_SUCCESS; } + +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's + Reserved on other architectures. + +**/ +VOID +EFIAPI +SwitchIplStacks ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VOID *NewBsp + ) +{ + AsmSwitchStackAndBackingStore ( + EntryPoint, + Context1, + Context2, + NewStack, + NewBsp + ); +} diff --git a/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c index 6d32368fb7..b0de859073 100644 --- a/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c +++ b/EdkModulePkg/Core/Pei/Dispatcher/Dispatcher.c @@ -208,12 +208,13 @@ Returns: //in order to provide buffer protection against possible illegal stack //access that might corrupt the stack. // - SwitchStack ( + PeiSwitchStacks ( (SWITCH_STACK_ENTRY_POINT)(UINTN)TempPtr.Raw, PeiStartupDescriptor, (VOID*)PrivateDataInMem, - (VOID*)((UINTN)PrivateData->StackBase + (UINTN)PrivateData->StackSize) - ); + (VOID*)((UINTN)PrivateData->StackBase + (UINTN)PrivateData->StackSize), + (VOID*)(UINTN)PrivateData->StackBase + ); } } } @@ -345,7 +346,7 @@ Returns: DebugFoundPeimPoint++; DebugNotDispatchedBitmap >>= 1; } - + DEBUG_CODE_END (); return EFI_NOT_FOUND; diff --git a/EdkModulePkg/Core/Pei/Dispatcher/Stack.c b/EdkModulePkg/Core/Pei/Dispatcher/Stack.c new file mode 100644 index 0000000000..057537eef0 --- /dev/null +++ b/EdkModulePkg/Core/Pei/Dispatcher/Stack.c @@ -0,0 +1,50 @@ +/** @file + PeiSwitchStacks() function for PEI dispatcher. + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. 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. + + Module Name: String.c + +**/ + +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's + Reserved on other architectures. + +**/ +VOID +EFIAPI +PeiSwitchStacks ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VOID *NewBsp + ) +{ + SwitchStack (EntryPoint, Context1, Context2, NewStack); +} diff --git a/EdkModulePkg/Core/Pei/Ipf/Stack.c b/EdkModulePkg/Core/Pei/Ipf/Stack.c new file mode 100644 index 0000000000..57d04a27e5 --- /dev/null +++ b/EdkModulePkg/Core/Pei/Ipf/Stack.c @@ -0,0 +1,58 @@ +/** @file + PeiSwitchStacks() function for PEI dispatcher. + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. 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. + + Module Name: String.c + +**/ + +#include + +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's + Reserved on other architectures. + +**/ +VOID +EFIAPI +PeiSwitchStacks ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VOID *NewBsp + ) +{ + AsmSwitchStackAndBackingStore ( + EntryPoint, + Context1, + Context2, + NewStack, + NewBsp + ); +} diff --git a/EdkModulePkg/Core/Pei/PeiMain.h b/EdkModulePkg/Core/Pei/PeiMain.h index 95555138e2..dc7185899b 100644 --- a/EdkModulePkg/Core/Pei/PeiMain.h +++ b/EdkModulePkg/Core/Pei/PeiMain.h @@ -1,13 +1,13 @@ /*++ -Copyright (c) 2006, Intel Corporation -All rights reserved. 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. +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. Module Name: @@ -138,7 +138,7 @@ PeiCore ( Routine Description: - Main entry point to Pei Core. After switching stack in the PEI core, + Main entry point to Pei Core. After switching stack in the PEI core, it will restart with the old core data. Arguments: @@ -180,10 +180,10 @@ Arguments: PeiServices - Calling context. - DependencyExpression - Pointer to a dependency expression. The Grammar adheres to + DependencyExpression - Pointer to a dependency expression. The Grammar adheres to the BNF described above and is stored in postfix notation. - Runnable - is True if the driver can be scheduled and False if the driver - cannot be scheduled. This is the value that the schedulers + Runnable - is True if the driver can be scheduled and False if the driver + cannot be scheduled. This is the value that the schedulers should use for deciding the state of the driver. Returns: @@ -222,7 +222,7 @@ Returns: EFI_SUCCESS - Successfully dispatched PEIM. EFI_NOT_FOUND - The dispatch failed. - + --*/ ; @@ -273,7 +273,7 @@ Arguments: FwVolHeader - Pointer to the FV header of the volume to search. This parameter must point to a valid FFS volume. - + PeimFileHeader - Pointer to the current file from which to begin searching. This pointer will be updated upon return to reflect the file found. @@ -375,9 +375,9 @@ Routine Description: Arguments: CoreData - The PEI core Private Data - + Returns: - + --*/ ; @@ -432,7 +432,7 @@ Arguments: NewHandOffHob - The new handoff HOB list. Returns: - + --*/ ; @@ -518,7 +518,7 @@ Arguments: Returns: - Status - EFI_SUCCESS if the PPI is in the database + Status - EFI_SUCCESS if the PPI is in the database EFI_NOT_FOUND if the PPI is not in the database --*/ ; @@ -610,12 +610,12 @@ PeiGetBootMode ( Routine Description: - This service enables PEIMs to ascertain the present value of the boot mode. + This service enables PEIMs to ascertain the present value of the boot mode. Arguments: PeiServices - The PEI core services table. - BootMode - A pointer to contain the value of the boot mode. + BootMode - A pointer to contain the value of the boot mode. Returns: @@ -635,7 +635,7 @@ PeiSetBootMode ( Routine Description: - This service enables PEIMs to update the boot mode variable. + This service enables PEIMs to update the boot mode variable. Arguments: @@ -744,7 +744,7 @@ Returns: EFI_SUCCESS - Get the pointer of HOB List EFI_NOT_AVAILABLE_YET - the HOB List is not yet published EFI_INVALID_PARAMETER - HobList is NULL (in debug mode) - + --*/ ; @@ -775,7 +775,7 @@ Returns: - EFI_INVALID_PARAMETER if Hob is NULL - EFI_NOT_AVAILABLE_YET if HobList is still not available. - EFI_OUT_OF_RESOURCES if there is no more memory to grow the Hoblist. - + --*/ ; @@ -825,16 +825,16 @@ Routine Description: Arguments: PeiServices - Pointer to the PEI Core Services Table. - + SearchType - Filter to find only files of this type. Type EFI_FV_FILETYPE_ALL causes no filtering to be done. - + FwVolHeader - Pointer to the FV header of the volume to search. This parameter must point to a valid FFS volume. - + FileHeader - Pointer to the current file from which to begin searching. This pointer will be updated upon return to reflect the file found. - + Returns: EFI_NOT_FOUND - No files matching the search criteria were found EFI_SUCCESS @@ -895,9 +895,9 @@ Arguments: Returns: Pointer to the Firmware Volume instance requested - + EFI_INVALID_PARAMETER - FwVolHeader is NULL - + EFI_SUCCESS - Firmware volume instance successfully found. --*/ @@ -955,7 +955,7 @@ Arguments: Returns: Status - EFI_SUCCESS - + --*/ ; @@ -971,7 +971,7 @@ PeiAllocatePages ( Routine Description: - Memory allocation service on permanent memory, + Memory allocation service on permanent memory, not usable prior to the memory installation. Arguments: @@ -1004,7 +1004,7 @@ PeiAllocatePool ( Routine Description: - Memory allocation service on the CAR. + Memory allocation service on the CAR. Arguments: @@ -1019,7 +1019,7 @@ Returns: Status - EFI_SUCCESS The allocation was successful EFI_OUT_OF_RESOURCES There is not enough heap to satisfy the requirement to allocate the requested size. - + --*/ ; @@ -1038,15 +1038,15 @@ Routine Description: Arguments: PeiServices - Calling context. - + PeimFileHeader - Peim file's header. - + EntryPoint - Entry point of that Peim file. Returns: Status code. - + --*/ ; @@ -1070,15 +1070,15 @@ Routine Description: Arguments: PeiServices - The PEI core services table. - + CodeType - Type of Status Code. - + Value - Value to output for Status Code. - + Instance - Instance Number of this status code. - + CallerId - ID of the caller of this status code. - + Data - Optional data associated with this status code. Returns: @@ -1109,10 +1109,42 @@ Returns: Status - EFI_NOT_AVAILABLE_YET. PPI not available yet. - EFI_DEVICE_ERROR. Did not reset system. - - Otherwise, resets the system. + + Otherwise, resets the system. --*/ ; +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's + Reserved on other architectures. + +**/ +VOID +EFIAPI +PeiSwitchStacks ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VOID *NewBsp + ); + #endif diff --git a/EdkModulePkg/Core/Pei/PeiMain.msa b/EdkModulePkg/Core/Pei/PeiMain.msa index 549820ef87..99d96ad714 100644 --- a/EdkModulePkg/Core/Pei/PeiMain.msa +++ b/EdkModulePkg/Core/Pei/PeiMain.msa @@ -71,9 +71,11 @@ Reset/Reset.c Security/Security.c StatusCode/StatusCode.c - ipf/SwitchToCacheMode.c - ipf/IpfCpuCore.i - ipf/IpfCpuCore.s + Ipf/SwitchToCacheMode.c + Ipf/IpfCpuCore.i + Ipf/IpfCpuCore.s + Ipf/Stack.c + Dispatcher/Stack.c diff --git a/MdePkg/Library/BaseLib/BaseLib.msa b/MdePkg/Library/BaseLib/BaseLib.msa index 403c6e3b8c..8924f4dbf5 100644 --- a/MdePkg/Library/BaseLib/BaseLib.msa +++ b/MdePkg/Library/BaseLib/BaseLib.msa @@ -410,6 +410,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. Ipf/CpuPause.s Ipf/CpuFlushTlb.s Ipf/GetInterruptState.s + Ipf/Non-existing.c Math64.c Unaligned.c Ebc/SwitchStack.c diff --git a/MdePkg/Library/BaseLib/Ipf/Non-existing.c b/MdePkg/Library/BaseLib/Ipf/Non-existing.c new file mode 100644 index 0000000000..bbb5bdf943 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/Non-existing.c @@ -0,0 +1,53 @@ +/** @file + Non-existing BaseLib functions on Ipf + + Copyright (c) 2006, Intel Corporation + All rights reserved. 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. + + Module Name: Non-existing.c + +**/ + +#include "../BaseLibInternals.h" +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + +**/ +VOID +EFIAPI +InternalSwitchStack ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack + ) +{ + // + // This version of this function does not actually change the stack pointer + // This is to support compilation of CPU types that do not support assemblers + // such as EBC + // + ASSERT (FALSE); +} -- 2.39.2