//\r
typedef struct _EBC_THUNK_LIST EBC_THUNK_LIST;\r
struct _EBC_THUNK_LIST {\r
- VOID *ThunkBuffer;\r
- EBC_THUNK_LIST *Next;\r
+ VOID *ThunkBuffer;\r
+ EBC_THUNK_LIST *Next;\r
};\r
\r
typedef struct _EBC_IMAGE_LIST EBC_IMAGE_LIST;\r
struct _EBC_IMAGE_LIST {\r
- EBC_IMAGE_LIST *Next;\r
- EFI_HANDLE ImageHandle;\r
- EBC_THUNK_LIST *ThunkList;\r
+ EBC_IMAGE_LIST *Next;\r
+ EFI_HANDLE ImageHandle;\r
+ EBC_THUNK_LIST *ThunkList;\r
};\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcUnloadImage (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN EFI_HANDLE ImageHandle\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN EFI_HANDLE ImageHandle\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcCreateThunk (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN EFI_HANDLE ImageHandle,\r
- IN VOID *EbcEntryPoint,\r
- OUT VOID **Thunk\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN VOID *EbcEntryPoint,\r
+ OUT VOID **Thunk\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcGetVersion (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN OUT UINT64 *Version\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN OUT UINT64 *Version\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
CommonEbcExceptionHandler (\r
- IN EFI_EXCEPTION_TYPE InterruptType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext\r
+ IN EFI_EXCEPTION_TYPE InterruptType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
EbcPeriodicNotifyFunction (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcDebugPeriodic (\r
- IN VM_CONTEXT *VmPtr\r
+ IN VM_CONTEXT *VmPtr\r
);\r
\r
//\r
// These two functions and the GUID are used to produce an EBC test protocol.\r
// This functionality is definitely not required for execution.\r
//\r
+\r
/**\r
Produces an EBC VM test protocol that can be used for regression tests.\r
\r
**/\r
EFI_STATUS\r
InitEbcVmTestProtocol (\r
- IN EFI_HANDLE *IHandle\r
+ IN EFI_HANDLE *IHandle\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcRegisterICacheFlush (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN EBC_ICACHE_FLUSH Flush\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN EBC_ICACHE_FLUSH Flush\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcDebugGetMaximumProcessorIndex (\r
- IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
- OUT UINTN *MaxProcessorIndex\r
+ IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
+ OUT UINTN *MaxProcessorIndex\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcDebugInvalidateInstructionCache (\r
- IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
- IN UINTN ProcessorIndex,\r
- IN VOID *Start,\r
- IN UINT64 Length\r
+ IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
+ IN UINTN ProcessorIndex,\r
+ IN VOID *Start,\r
+ IN UINT64 Length\r
);\r
\r
//\r
// also be global since the execution of an EBC image does not provide\r
// a This pointer.\r
//\r
-EBC_IMAGE_LIST *mEbcImageList = NULL;\r
+EBC_IMAGE_LIST *mEbcImageList = NULL;\r
\r
//\r
// Callback function to flush the icache after thunk creation\r
//\r
-EBC_ICACHE_FLUSH mEbcICacheFlush;\r
+EBC_ICACHE_FLUSH mEbcICacheFlush;\r
\r
//\r
// These get set via calls by the debug agent\r
//\r
-EFI_PERIODIC_CALLBACK mDebugPeriodicCallback = NULL;\r
-EFI_EXCEPTION_CALLBACK mDebugExceptionCallback[MAX_EBC_EXCEPTION + 1] = {NULL};\r
+EFI_PERIODIC_CALLBACK mDebugPeriodicCallback = NULL;\r
+EFI_EXCEPTION_CALLBACK mDebugExceptionCallback[MAX_EBC_EXCEPTION + 1] = { NULL };\r
\r
-VOID *mStackBuffer[MAX_STACK_NUM];\r
-EFI_HANDLE mStackBufferIndex[MAX_STACK_NUM];\r
-UINTN mStackNum = 0;\r
+VOID *mStackBuffer[MAX_STACK_NUM];\r
+EFI_HANDLE mStackBufferIndex[MAX_STACK_NUM];\r
+UINTN mStackNum = 0;\r
\r
//\r
// Event for Periodic callback\r
//\r
-EFI_EVENT mEbcPeriodicEvent;\r
-VM_CONTEXT *mVmPtr = NULL;\r
+EFI_EVENT mEbcPeriodicEvent;\r
+VM_CONTEXT *mVmPtr = NULL;\r
\r
/**\r
Check whether the emulator supports executing a certain PE/COFF image\r
BOOLEAN\r
EFIAPI\r
EbcIsImageSupported (\r
- IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This,\r
- IN UINT16 ImageType,\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL\r
+ IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This,\r
+ IN UINT16 ImageType,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL\r
)\r
{\r
- if (ImageType != EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION &&\r
- ImageType != EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER) {\r
+ if ((ImageType != EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) &&\r
+ (ImageType != EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER))\r
+ {\r
return FALSE;\r
}\r
+\r
return TRUE;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
EbcRegisterImage (\r
- IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This,\r
- IN EFI_PHYSICAL_ADDRESS ImageBase,\r
- IN UINT64 ImageSize,\r
- IN OUT EFI_IMAGE_ENTRY_POINT *EntryPoint\r
+ IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This,\r
+ IN EFI_PHYSICAL_ADDRESS ImageBase,\r
+ IN UINT64 ImageSize,\r
+ IN OUT EFI_IMAGE_ENTRY_POINT *EntryPoint\r
)\r
{\r
DEBUG_CODE_BEGIN ();\r
- PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
- EFI_STATUS Status;\r
+ PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
+ EFI_STATUS Status;\r
\r
- ZeroMem (&ImageContext, sizeof (ImageContext));\r
+ ZeroMem (&ImageContext, sizeof (ImageContext));\r
\r
- ImageContext.Handle = (VOID *)(UINTN)ImageBase;\r
- ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;\r
+ ImageContext.Handle = (VOID *)(UINTN)ImageBase;\r
+ ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;\r
\r
- Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
+ Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
\r
- ASSERT (ImageContext.Machine == EFI_IMAGE_MACHINE_EBC);\r
- ASSERT (ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION ||\r
- ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER);\r
+ ASSERT (ImageContext.Machine == EFI_IMAGE_MACHINE_EBC);\r
+ ASSERT (\r
+ ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION ||\r
+ ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER\r
+ );\r
DEBUG_CODE_END ();\r
\r
- EbcRegisterICacheFlush (NULL,\r
- (EBC_ICACHE_FLUSH)InvalidateInstructionCacheRange);\r
-\r
- return EbcCreateThunk (NULL, (VOID *)(UINTN)ImageBase,\r
- (VOID *)(UINTN)*EntryPoint, (VOID **)EntryPoint);\r
+ EbcRegisterICacheFlush (\r
+ NULL,\r
+ (EBC_ICACHE_FLUSH)InvalidateInstructionCacheRange\r
+ );\r
+\r
+ return EbcCreateThunk (\r
+ NULL,\r
+ (VOID *)(UINTN)ImageBase,\r
+ (VOID *)(UINTN)*EntryPoint,\r
+ (VOID **)EntryPoint\r
+ );\r
}\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EbcUnregisterImage (\r
- IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This,\r
- IN EFI_PHYSICAL_ADDRESS ImageBase\r
+ IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This,\r
+ IN EFI_PHYSICAL_ADDRESS ImageBase\r
)\r
{\r
return EbcUnloadImage (NULL, (VOID *)(UINTN)ImageBase);\r
}\r
\r
-STATIC EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL mPeCoffEmuProtocol = {\r
+STATIC EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL mPeCoffEmuProtocol = {\r
EbcIsImageSupported,\r
EbcRegisterImage,\r
EbcUnregisterImage,\r
EFI_STATUS\r
EFIAPI\r
InitializeEbcDriver (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
EFI_EBC_PROTOCOL *EbcProtocol;\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- EbcProtocol->CreateThunk = EbcCreateThunk;\r
- EbcProtocol->UnloadImage = EbcUnloadImage;\r
- EbcProtocol->RegisterICacheFlush = EbcRegisterICacheFlush;\r
- EbcProtocol->GetVersion = EbcGetVersion;\r
- mEbcICacheFlush = NULL;\r
+ EbcProtocol->CreateThunk = EbcCreateThunk;\r
+ EbcProtocol->UnloadImage = EbcUnloadImage;\r
+ EbcProtocol->RegisterICacheFlush = EbcRegisterICacheFlush;\r
+ EbcProtocol->GetVersion = EbcGetVersion;\r
+ mEbcICacheFlush = NULL;\r
\r
//\r
// Find any already-installed EBC protocols and uninstall them\r
//\r
- Installed = FALSE;\r
- HandleBuffer = NULL;\r
- Status = gBS->LocateHandleBuffer (\r
- ByProtocol,\r
- &gEfiEbcProtocolGuid,\r
- NULL,\r
- &NumHandles,\r
- &HandleBuffer\r
- );\r
+ Installed = FALSE;\r
+ HandleBuffer = NULL;\r
+ Status = gBS->LocateHandleBuffer (\r
+ ByProtocol,\r
+ &gEfiEbcProtocolGuid,\r
+ NULL,\r
+ &NumHandles,\r
+ &HandleBuffer\r
+ );\r
if (Status == EFI_SUCCESS) {\r
//\r
// Loop through the handles\r
Status = gBS->HandleProtocol (\r
HandleBuffer[Index],\r
&gEfiEbcProtocolGuid,\r
- (VOID **) &OldEbcProtocol\r
+ (VOID **)&OldEbcProtocol\r
);\r
if (Status == EFI_SUCCESS) {\r
if (gBS->ReinstallProtocolInterface (\r
- HandleBuffer[Index],\r
- &gEfiEbcProtocolGuid,\r
- OldEbcProtocol,\r
- EbcProtocol\r
- ) == EFI_SUCCESS) {\r
+ HandleBuffer[Index],\r
+ &gEfiEbcProtocolGuid,\r
+ OldEbcProtocol,\r
+ EbcProtocol\r
+ ) == EFI_SUCCESS)\r
+ {\r
Installed = TRUE;\r
}\r
}\r
FreePool (HandleBuffer);\r
HandleBuffer = NULL;\r
}\r
+\r
//\r
// Add the protocol so someone can locate us if we haven't already.\r
//\r
if (!Installed) {\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&ImageHandle,\r
- &gEfiEbcProtocolGuid, EbcProtocol,\r
- &gEdkiiPeCoffImageEmulatorProtocolGuid, &mPeCoffEmuProtocol,\r
+ &gEfiEbcProtocolGuid,\r
+ EbcProtocol,\r
+ &gEdkiiPeCoffImageEmulatorProtocolGuid,\r
+ &mPeCoffEmuProtocol,\r
NULL\r
);\r
if (EFI_ERROR (Status)) {\r
}\r
}\r
\r
- Status = InitEBCStack();\r
- if (EFI_ERROR(Status)) {\r
+ Status = InitEBCStack ();\r
+ if (EFI_ERROR (Status)) {\r
goto ErrorExit;\r
}\r
\r
goto ErrorExit;\r
}\r
\r
- EbcDebugProtocol->Isa = IsaEbc;\r
- EbcDebugProtocol->GetMaximumProcessorIndex = EbcDebugGetMaximumProcessorIndex;\r
- EbcDebugProtocol->RegisterPeriodicCallback = EbcDebugRegisterPeriodicCallback;\r
- EbcDebugProtocol->RegisterExceptionCallback = EbcDebugRegisterExceptionCallback;\r
- EbcDebugProtocol->InvalidateInstructionCache = EbcDebugInvalidateInstructionCache;\r
+ EbcDebugProtocol->Isa = IsaEbc;\r
+ EbcDebugProtocol->GetMaximumProcessorIndex = EbcDebugGetMaximumProcessorIndex;\r
+ EbcDebugProtocol->RegisterPeriodicCallback = EbcDebugRegisterPeriodicCallback;\r
+ EbcDebugProtocol->RegisterExceptionCallback = EbcDebugRegisterExceptionCallback;\r
+ EbcDebugProtocol->InvalidateInstructionCache = EbcDebugInvalidateInstructionCache;\r
\r
//\r
// Add the protocol so the debug agent can find us\r
FreePool (EbcDebugProtocol);\r
goto ErrorExit;\r
}\r
+\r
//\r
// Install EbcDebugSupport Protocol Successfully\r
// Now we need to initialize the Ebc default Callback\r
// Produce a VM test interface protocol. Not required for execution.\r
//\r
DEBUG_CODE_BEGIN ();\r
- InitEbcVmTestProtocol (&ImageHandle);\r
+ InitEbcVmTestProtocol (&ImageHandle);\r
DEBUG_CODE_END ();\r
\r
EbcDebuggerHookInit (ImageHandle, EbcDebugProtocol);\r
return EFI_SUCCESS;\r
\r
ErrorExit:\r
- FreeEBCStack();\r
- HandleBuffer = NULL;\r
- Status = gBS->LocateHandleBuffer (\r
- ByProtocol,\r
- &gEfiEbcProtocolGuid,\r
- NULL,\r
- &NumHandles,\r
- &HandleBuffer\r
- );\r
+ FreeEBCStack ();\r
+ HandleBuffer = NULL;\r
+ Status = gBS->LocateHandleBuffer (\r
+ ByProtocol,\r
+ &gEfiEbcProtocolGuid,\r
+ NULL,\r
+ &NumHandles,\r
+ &HandleBuffer\r
+ );\r
if (Status == EFI_SUCCESS) {\r
//\r
// Loop through the handles\r
Status = gBS->HandleProtocol (\r
HandleBuffer[Index],\r
&gEfiEbcProtocolGuid,\r
- (VOID **) &OldEbcProtocol\r
+ (VOID **)&OldEbcProtocol\r
);\r
if (Status == EFI_SUCCESS) {\r
gBS->UninstallProtocolInterface (\r
return Status;\r
}\r
\r
-\r
/**\r
This is the top-level routine plugged into the EBC protocol. Since thunks\r
are very processor-specific, from here we dispatch directly to the very\r
EFI_STATUS\r
EFIAPI\r
EbcCreateThunk (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN EFI_HANDLE ImageHandle,\r
- IN VOID *EbcEntryPoint,\r
- OUT VOID **Thunk\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN VOID *EbcEntryPoint,\r
+ OUT VOID **Thunk\r
)\r
{\r
EFI_STATUS Status;\r
\r
Status = EbcCreateThunks (\r
- ImageHandle,\r
- EbcEntryPoint,\r
- Thunk,\r
- FLAG_THUNK_ENTRY_POINT\r
- );\r
+ ImageHandle,\r
+ EbcEntryPoint,\r
+ Thunk,\r
+ FLAG_THUNK_ENTRY_POINT\r
+ );\r
return Status;\r
}\r
\r
-\r
/**\r
This EBC debugger protocol service is called by the debug agent\r
\r
EFI_STATUS\r
EFIAPI\r
EbcDebugGetMaximumProcessorIndex (\r
- IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
- OUT UINTN *MaxProcessorIndex\r
+ IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
+ OUT UINTN *MaxProcessorIndex\r
)\r
{\r
*MaxProcessorIndex = 0;\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
This protocol service is called by the debug agent to register a function\r
for us to call on a periodic basis.\r
if ((mDebugPeriodicCallback == NULL) && (PeriodicCallback == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if ((mDebugPeriodicCallback != NULL) && (PeriodicCallback != NULL)) {\r
return EFI_ALREADY_STARTED;\r
}\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
This protocol service is called by the debug agent to register a function\r
for us to call when we detect an exception.\r
if ((ExceptionType < 0) || (ExceptionType > MAX_EBC_EXCEPTION)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if ((mDebugExceptionCallback[ExceptionType] == NULL) && (ExceptionCallback == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if ((mDebugExceptionCallback[ExceptionType] != NULL) && (ExceptionCallback != NULL)) {\r
return EFI_ALREADY_STARTED;\r
}\r
+\r
mDebugExceptionCallback[ExceptionType] = ExceptionCallback;\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
This EBC debugger protocol service is called by the debug agent. Required\r
for DebugSupport compliance but is only stubbed out for EBC.\r
EFI_STATUS\r
EFIAPI\r
EbcDebugInvalidateInstructionCache (\r
- IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
- IN UINTN ProcessorIndex,\r
- IN VOID *Start,\r
- IN UINT64 Length\r
+ IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
+ IN UINTN ProcessorIndex,\r
+ IN VOID *Start,\r
+ IN UINT64 Length\r
)\r
{\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
The VM interpreter calls this function when an exception is detected.\r
\r
**/\r
EFI_STATUS\r
EbcDebugSignalException (\r
- IN EFI_EXCEPTION_TYPE ExceptionType,\r
- IN EXCEPTION_FLAGS ExceptionFlags,\r
- IN VM_CONTEXT *VmPtr\r
+ IN EFI_EXCEPTION_TYPE ExceptionType,\r
+ IN EXCEPTION_FLAGS ExceptionFlags,\r
+ IN VM_CONTEXT *VmPtr\r
)\r
{\r
EFI_SYSTEM_CONTEXT_EBC EbcContext;\r
// Save the exception in the context passed in\r
//\r
VmPtr->ExceptionFlags |= ExceptionFlags;\r
- VmPtr->LastException = (UINTN) ExceptionType;\r
+ VmPtr->LastException = (UINTN)ExceptionType;\r
//\r
// If it's a fatal exception, then flag it in the VM context in case an\r
// attached debugger tries to return from it.\r
// status code via the status code API\r
//\r
if (mDebugExceptionCallback[ExceptionType] != NULL) {\r
-\r
//\r
// Initialize the context structure\r
//\r
- EbcContext.R0 = (UINT64) VmPtr->Gpr[0];\r
- EbcContext.R1 = (UINT64) VmPtr->Gpr[1];\r
- EbcContext.R2 = (UINT64) VmPtr->Gpr[2];\r
- EbcContext.R3 = (UINT64) VmPtr->Gpr[3];\r
- EbcContext.R4 = (UINT64) VmPtr->Gpr[4];\r
- EbcContext.R5 = (UINT64) VmPtr->Gpr[5];\r
- EbcContext.R6 = (UINT64) VmPtr->Gpr[6];\r
- EbcContext.R7 = (UINT64) VmPtr->Gpr[7];\r
- EbcContext.Ip = (UINT64)(UINTN)VmPtr->Ip;\r
- EbcContext.Flags = VmPtr->Flags;\r
- EbcContext.ControlFlags = 0;\r
- SystemContext.SystemContextEbc = &EbcContext;\r
-\r
- mDebugExceptionCallback[ExceptionType] (ExceptionType, SystemContext);\r
+ EbcContext.R0 = (UINT64)VmPtr->Gpr[0];\r
+ EbcContext.R1 = (UINT64)VmPtr->Gpr[1];\r
+ EbcContext.R2 = (UINT64)VmPtr->Gpr[2];\r
+ EbcContext.R3 = (UINT64)VmPtr->Gpr[3];\r
+ EbcContext.R4 = (UINT64)VmPtr->Gpr[4];\r
+ EbcContext.R5 = (UINT64)VmPtr->Gpr[5];\r
+ EbcContext.R6 = (UINT64)VmPtr->Gpr[6];\r
+ EbcContext.R7 = (UINT64)VmPtr->Gpr[7];\r
+ EbcContext.Ip = (UINT64)(UINTN)VmPtr->Ip;\r
+ EbcContext.Flags = VmPtr->Flags;\r
+ EbcContext.ControlFlags = 0;\r
+ SystemContext.SystemContextEbc = &EbcContext;\r
+\r
+ mDebugExceptionCallback[ExceptionType](ExceptionType, SystemContext);\r
//\r
// Restore the context structure and continue to execute\r
//\r
- VmPtr->Gpr[0] = EbcContext.R0;\r
- VmPtr->Gpr[1] = EbcContext.R1;\r
- VmPtr->Gpr[2] = EbcContext.R2;\r
- VmPtr->Gpr[3] = EbcContext.R3;\r
- VmPtr->Gpr[4] = EbcContext.R4;\r
- VmPtr->Gpr[5] = EbcContext.R5;\r
- VmPtr->Gpr[6] = EbcContext.R6;\r
- VmPtr->Gpr[7] = EbcContext.R7;\r
- VmPtr->Ip = (VMIP)(UINTN)EbcContext.Ip;\r
- VmPtr->Flags = EbcContext.Flags;\r
+ VmPtr->Gpr[0] = EbcContext.R0;\r
+ VmPtr->Gpr[1] = EbcContext.R1;\r
+ VmPtr->Gpr[2] = EbcContext.R2;\r
+ VmPtr->Gpr[3] = EbcContext.R3;\r
+ VmPtr->Gpr[4] = EbcContext.R4;\r
+ VmPtr->Gpr[5] = EbcContext.R5;\r
+ VmPtr->Gpr[6] = EbcContext.R6;\r
+ VmPtr->Gpr[7] = EbcContext.R7;\r
+ VmPtr->Ip = (VMIP)(UINTN)EbcContext.Ip;\r
+ VmPtr->Flags = EbcContext.Flags;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
To install default Callback function for the VM interpreter.\r
\r
IN EFI_DEBUG_SUPPORT_PROTOCOL *This\r
)\r
{\r
- INTN Index;\r
- EFI_STATUS Status;\r
+ INTN Index;\r
+ EFI_STATUS Status;\r
\r
//\r
// For ExceptionCallback\r
&mVmPtr,\r
&mEbcPeriodicEvent\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
TimerPeriodic,\r
EBC_VM_PERIODIC_CALLBACK_RATE\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
The default Exception Callback for the VM interpreter.\r
In this function, we report status code, and print debug information\r
VOID\r
EFIAPI\r
CommonEbcExceptionHandler (\r
- IN EFI_EXCEPTION_TYPE InterruptType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext\r
+ IN EFI_EXCEPTION_TYPE InterruptType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext\r
)\r
{\r
//\r
DEBUG ((\r
DEBUG_ERROR,\r
"EBC Interrupter Version - 0x%016lx\n",\r
- (UINT64) (((VM_MAJOR_VERSION & 0xFFFF) << 16) | ((VM_MINOR_VERSION & 0xFFFF)))\r
+ (UINT64)(((VM_MAJOR_VERSION & 0xFFFF) << 16) | ((VM_MINOR_VERSION & 0xFFFF)))\r
));\r
DEBUG ((\r
DEBUG_ERROR,\r
//\r
CpuDeadLoop ();\r
\r
- return ;\r
+ return;\r
}\r
\r
-\r
/**\r
The periodic callback function for EBC VM interpreter, which is used\r
to support the EFI debug support protocol.\r
VOID\r
EFIAPI\r
EbcPeriodicNotifyFunction (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- VM_CONTEXT *VmPtr;\r
+ VM_CONTEXT *VmPtr;\r
\r
VmPtr = *(VM_CONTEXT **)Context;\r
\r
EbcDebugPeriodic (VmPtr);\r
}\r
\r
- return ;\r
+ return;\r
}\r
\r
-\r
/**\r
The VM interpreter calls this function on a periodic basis to support\r
the EFI debug support protocol.\r
EFI_STATUS\r
EFIAPI\r
EbcDebugPeriodic (\r
- IN VM_CONTEXT *VmPtr\r
+ IN VM_CONTEXT *VmPtr\r
)\r
{\r
- EFI_SYSTEM_CONTEXT_EBC EbcContext;\r
- EFI_SYSTEM_CONTEXT SystemContext;\r
+ EFI_SYSTEM_CONTEXT_EBC EbcContext;\r
+ EFI_SYSTEM_CONTEXT SystemContext;\r
\r
//\r
// If someone's registered for periodic callbacks, then call them.\r
//\r
if (mDebugPeriodicCallback != NULL) {\r
-\r
//\r
// Initialize the context structure\r
//\r
- EbcContext.R0 = (UINT64) VmPtr->Gpr[0];\r
- EbcContext.R1 = (UINT64) VmPtr->Gpr[1];\r
- EbcContext.R2 = (UINT64) VmPtr->Gpr[2];\r
- EbcContext.R3 = (UINT64) VmPtr->Gpr[3];\r
- EbcContext.R4 = (UINT64) VmPtr->Gpr[4];\r
- EbcContext.R5 = (UINT64) VmPtr->Gpr[5];\r
- EbcContext.R6 = (UINT64) VmPtr->Gpr[6];\r
- EbcContext.R7 = (UINT64) VmPtr->Gpr[7];\r
- EbcContext.Ip = (UINT64)(UINTN)VmPtr->Ip;\r
- EbcContext.Flags = VmPtr->Flags;\r
- EbcContext.ControlFlags = 0;\r
- SystemContext.SystemContextEbc = &EbcContext;\r
+ EbcContext.R0 = (UINT64)VmPtr->Gpr[0];\r
+ EbcContext.R1 = (UINT64)VmPtr->Gpr[1];\r
+ EbcContext.R2 = (UINT64)VmPtr->Gpr[2];\r
+ EbcContext.R3 = (UINT64)VmPtr->Gpr[3];\r
+ EbcContext.R4 = (UINT64)VmPtr->Gpr[4];\r
+ EbcContext.R5 = (UINT64)VmPtr->Gpr[5];\r
+ EbcContext.R6 = (UINT64)VmPtr->Gpr[6];\r
+ EbcContext.R7 = (UINT64)VmPtr->Gpr[7];\r
+ EbcContext.Ip = (UINT64)(UINTN)VmPtr->Ip;\r
+ EbcContext.Flags = VmPtr->Flags;\r
+ EbcContext.ControlFlags = 0;\r
+ SystemContext.SystemContextEbc = &EbcContext;\r
\r
mDebugPeriodicCallback (SystemContext);\r
\r
//\r
// Restore the context structure and continue to execute\r
//\r
- VmPtr->Gpr[0] = EbcContext.R0;\r
- VmPtr->Gpr[1] = EbcContext.R1;\r
- VmPtr->Gpr[2] = EbcContext.R2;\r
- VmPtr->Gpr[3] = EbcContext.R3;\r
- VmPtr->Gpr[4] = EbcContext.R4;\r
- VmPtr->Gpr[5] = EbcContext.R5;\r
- VmPtr->Gpr[6] = EbcContext.R6;\r
- VmPtr->Gpr[7] = EbcContext.R7;\r
- VmPtr->Ip = (VMIP)(UINTN)EbcContext.Ip;\r
- VmPtr->Flags = EbcContext.Flags;\r
+ VmPtr->Gpr[0] = EbcContext.R0;\r
+ VmPtr->Gpr[1] = EbcContext.R1;\r
+ VmPtr->Gpr[2] = EbcContext.R2;\r
+ VmPtr->Gpr[3] = EbcContext.R3;\r
+ VmPtr->Gpr[4] = EbcContext.R4;\r
+ VmPtr->Gpr[5] = EbcContext.R5;\r
+ VmPtr->Gpr[6] = EbcContext.R6;\r
+ VmPtr->Gpr[7] = EbcContext.R7;\r
+ VmPtr->Ip = (VMIP)(UINTN)EbcContext.Ip;\r
+ VmPtr->Flags = EbcContext.Flags;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
This routine is called by the core when an image is being unloaded from\r
memory. Basically we now have the opportunity to do any necessary cleanup.\r
EFI_STATUS\r
EFIAPI\r
EbcUnloadImage (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN EFI_HANDLE ImageHandle\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN EFI_HANDLE ImageHandle\r
)\r
{\r
EBC_THUNK_LIST *ThunkList;\r
EBC_THUNK_LIST *NextThunkList;\r
EBC_IMAGE_LIST *ImageList;\r
EBC_IMAGE_LIST *PrevImageList;\r
+\r
//\r
// First go through our list of known image handles and see if we've already\r
// created an image list element for this image handle.\r
//\r
- ReturnEBCStackByHandle(ImageHandle);\r
+ ReturnEBCStackByHandle (ImageHandle);\r
PrevImageList = NULL;\r
for (ImageList = mEbcImageList; ImageList != NULL; ImageList = ImageList->Next) {\r
if (ImageList->ImageHandle == ImageHandle) {\r
break;\r
}\r
+\r
//\r
// Save the previous so we can connect the lists when we remove this one\r
//\r
if (ImageList == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
//\r
// Free up all the thunk buffers and thunks list elements for this image\r
// handle.\r
FreePool (ThunkList);\r
ThunkList = NextThunkList;\r
}\r
+\r
//\r
// Now remove this image list element from the chain\r
//\r
} else {\r
PrevImageList->Next = ImageList->Next;\r
}\r
+\r
//\r
// Now free up the image list element\r
//\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Add a thunk to our list of thunks for a given image handle.\r
Also flush the instruction cache since we've written thunk code\r
**/\r
EFI_STATUS\r
EbcAddImageThunk (\r
- IN EFI_HANDLE ImageHandle,\r
- IN VOID *ThunkBuffer,\r
- IN UINT32 ThunkSize\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN VOID *ThunkBuffer,\r
+ IN UINT32 ThunkSize\r
)\r
{\r
EBC_THUNK_LIST *ThunkList;\r
// It so far so good, then flush the instruction cache\r
//\r
if (mEbcICacheFlush != NULL) {\r
- Status = mEbcICacheFlush ((EFI_PHYSICAL_ADDRESS) (UINTN) ThunkBuffer, ThunkSize);\r
+ Status = mEbcICacheFlush ((EFI_PHYSICAL_ADDRESS)(UINTN)ThunkBuffer, ThunkSize);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
}\r
+\r
//\r
// Go through our list of known image handles and see if we've already\r
// created a image list element for this image handle.\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- ImageList->ThunkList = NULL;\r
- ImageList->ImageHandle = ImageHandle;\r
- ImageList->Next = mEbcImageList;\r
- mEbcImageList = ImageList;\r
+ ImageList->ThunkList = NULL;\r
+ ImageList->ImageHandle = ImageHandle;\r
+ ImageList->Next = mEbcImageList;\r
+ mEbcImageList = ImageList;\r
}\r
+\r
//\r
// Ok, now create a new thunk element to add to the list\r
//\r
if (ThunkList == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
//\r
// Add it to the head of the list\r
//\r
- ThunkList->Next = ImageList->ThunkList;\r
- ThunkList->ThunkBuffer = ThunkBuffer;\r
- ImageList->ThunkList = ThunkList;\r
+ ThunkList->Next = ImageList->ThunkList;\r
+ ThunkList->ThunkBuffer = ThunkBuffer;\r
+ ImageList->ThunkList = ThunkList;\r
return EFI_SUCCESS;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
EbcRegisterICacheFlush (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN EBC_ICACHE_FLUSH Flush\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN EBC_ICACHE_FLUSH Flush\r
)\r
{\r
mEbcICacheFlush = Flush;\r
EFI_STATUS\r
EFIAPI\r
EbcGetVersion (\r
- IN EFI_EBC_PROTOCOL *This,\r
- IN OUT UINT64 *Version\r
+ IN EFI_EBC_PROTOCOL *This,\r
+ IN OUT UINT64 *Version\r
)\r
{\r
if (Version == NULL) {\r
\r
**/\r
EFI_STATUS\r
-GetEBCStack(\r
- IN EFI_HANDLE Handle,\r
- OUT VOID **StackBuffer,\r
- OUT UINTN *BufferIndex\r
+GetEBCStack (\r
+ IN EFI_HANDLE Handle,\r
+ OUT VOID **StackBuffer,\r
+ OUT UINTN *BufferIndex\r
)\r
{\r
- UINTN Index;\r
- EFI_TPL OldTpl;\r
- OldTpl = gBS->RaiseTPL(TPL_HIGH_LEVEL);\r
- for (Index = 0; Index < mStackNum; Index ++) {\r
+ UINTN Index;\r
+ EFI_TPL OldTpl;\r
+\r
+ OldTpl = gBS->RaiseTPL (TPL_HIGH_LEVEL);\r
+ for (Index = 0; Index < mStackNum; Index++) {\r
if (mStackBufferIndex[Index] == NULL) {\r
mStackBufferIndex[Index] = Handle;\r
break;\r
}\r
}\r
- gBS->RestoreTPL(OldTpl);\r
+\r
+ gBS->RestoreTPL (OldTpl);\r
if (Index == mStackNum) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
*BufferIndex = Index;\r
*StackBuffer = mStackBuffer[Index];\r
return EFI_SUCCESS;\r
\r
**/\r
EFI_STATUS\r
-ReturnEBCStack(\r
- IN UINTN Index\r
+ReturnEBCStack (\r
+ IN UINTN Index\r
)\r
{\r
mStackBufferIndex[Index] = NULL;\r
\r
**/\r
EFI_STATUS\r
-ReturnEBCStackByHandle(\r
- IN EFI_HANDLE Handle\r
+ReturnEBCStackByHandle (\r
+ IN EFI_HANDLE Handle\r
)\r
{\r
- UINTN Index;\r
- for (Index = 0; Index < mStackNum; Index ++) {\r
+ UINTN Index;\r
+\r
+ for (Index = 0; Index < mStackNum; Index++) {\r
if (mStackBufferIndex[Index] == Handle) {\r
break;\r
}\r
}\r
+\r
if (Index == mStackNum) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
mStackBufferIndex[Index] = NULL;\r
return EFI_SUCCESS;\r
}\r
VOID\r
)\r
{\r
- for (mStackNum = 0; mStackNum < MAX_STACK_NUM; mStackNum ++) {\r
- mStackBuffer[mStackNum] = AllocatePool(STACK_POOL_SIZE);\r
+ for (mStackNum = 0; mStackNum < MAX_STACK_NUM; mStackNum++) {\r
+ mStackBuffer[mStackNum] = AllocatePool (STACK_POOL_SIZE);\r
mStackBufferIndex[mStackNum] = NULL;\r
if (mStackBuffer[mStackNum] == NULL) {\r
break;\r
}\r
}\r
+\r
if (mStackNum == 0) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Free all EBC stacks allocated before.\r
\r
\r
**/\r
EFI_STATUS\r
-FreeEBCStack(\r
+FreeEBCStack (\r
VOID\r
)\r
{\r
- UINTN Index;\r
- for (Index = 0; Index < mStackNum; Index ++) {\r
- FreePool(mStackBuffer[Index]);\r
+ UINTN Index;\r
+\r
+ for (Index = 0; Index < mStackNum; Index++) {\r
+ FreePool (mStackBuffer[Index]);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
**/\r
EFI_STATUS\r
InitEbcVmTestProtocol (\r
- IN EFI_HANDLE *IHandle\r
+ IN EFI_HANDLE *IHandle\r
)\r
{\r
- EFI_HANDLE Handle;\r
- EFI_STATUS Status;\r
- EFI_EBC_VM_TEST_PROTOCOL *EbcVmTestProtocol;\r
+ EFI_HANDLE Handle;\r
+ EFI_STATUS Status;\r
+ EFI_EBC_VM_TEST_PROTOCOL *EbcVmTestProtocol;\r
\r
//\r
// Allocate memory for the protocol, then fill in the fields\r
if (EbcVmTestProtocol == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- EbcVmTestProtocol->Execute = (EBC_VM_TEST_EXECUTE) EbcExecuteInstructions;\r
+\r
+ EbcVmTestProtocol->Execute = (EBC_VM_TEST_EXECUTE)EbcExecuteInstructions;\r
\r
DEBUG_CODE_BEGIN ();\r
- EbcVmTestProtocol->Assemble = (EBC_VM_TEST_ASM) EbcVmTestUnsupported;\r
- EbcVmTestProtocol->Disassemble = (EBC_VM_TEST_DASM) EbcVmTestUnsupported;\r
+ EbcVmTestProtocol->Assemble = (EBC_VM_TEST_ASM)EbcVmTestUnsupported;\r
+ EbcVmTestProtocol->Disassemble = (EBC_VM_TEST_DASM)EbcVmTestUnsupported;\r
DEBUG_CODE_END ();\r
\r
//\r
// Publish the protocol\r
//\r
- Handle = NULL;\r
- Status = gBS->InstallProtocolInterface (&Handle, &gEfiEbcVmTestProtocolGuid, EFI_NATIVE_INTERFACE, EbcVmTestProtocol);\r
+ Handle = NULL;\r
+ Status = gBS->InstallProtocolInterface (&Handle, &gEfiEbcVmTestProtocolGuid, EFI_NATIVE_INTERFACE, EbcVmTestProtocol);\r
if (EFI_ERROR (Status)) {\r
FreePool (EbcVmTestProtocol);\r
}\r
+\r
return Status;\r
}\r
\r
-\r
/**\r
Returns the EFI_UNSUPPORTED Status.\r
\r
if (EFI_ERROR (Status)) {\r
return NULL;\r
}\r
+\r
return Buffer;\r
}\r