**/\r
VOID\r
ArchUpdateIdtEntry (\r
- OUT IA32_IDT_GATE_DESCRIPTOR *IdtEntry,\r
- IN UINTN InterruptHandler\r
+ OUT IA32_IDT_GATE_DESCRIPTOR *IdtEntry,\r
+ IN UINTN InterruptHandler\r
)\r
{\r
IdtEntry->Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
**/\r
UINTN\r
ArchGetIdtHandler (\r
- IN IA32_IDT_GATE_DESCRIPTOR *IdtEntry\r
+ IN IA32_IDT_GATE_DESCRIPTOR *IdtEntry\r
)\r
{\r
- return IdtEntry->Bits.OffsetLow + (((UINTN) IdtEntry->Bits.OffsetHigh) << 16) +\r
- (((UINTN) IdtEntry->Bits.OffsetUpper) << 32);\r
+ return IdtEntry->Bits.OffsetLow + (((UINTN)IdtEntry->Bits.OffsetHigh) << 16) +\r
+ (((UINTN)IdtEntry->Bits.OffsetUpper) << 32);\r
}\r
\r
/**\r
**/\r
VOID\r
ArchSaveExceptionContext (\r
- IN UINTN ExceptionType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext,\r
- IN EXCEPTION_HANDLER_DATA *ExceptionHandlerData\r
+ IN UINTN ExceptionType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext,\r
+ IN EXCEPTION_HANDLER_DATA *ExceptionHandlerData\r
)\r
{\r
- IA32_EFLAGS32 Eflags;\r
- RESERVED_VECTORS_DATA *ReservedVectors;\r
+ IA32_EFLAGS32 Eflags;\r
+ RESERVED_VECTORS_DATA *ReservedVectors;\r
\r
ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
//\r
//\r
// Clear IF flag to avoid old IDT handler enable interrupt by IRET\r
//\r
- Eflags.UintN = SystemContext.SystemContextX64->Rflags;\r
- Eflags.Bits.IF = 0;\r
+ Eflags.UintN = SystemContext.SystemContextX64->Rflags;\r
+ Eflags.Bits.IF = 0;\r
SystemContext.SystemContextX64->Rflags = Eflags.UintN;\r
//\r
// Modify the EIP in stack, then old IDT handler will return to HookAfterStubBegin.\r
//\r
- SystemContext.SystemContextX64->Rip = (UINTN) ReservedVectors[ExceptionType].HookAfterStubHeaderCode;\r
+ SystemContext.SystemContextX64->Rip = (UINTN)ReservedVectors[ExceptionType].HookAfterStubHeaderCode;\r
}\r
\r
/**\r
**/\r
VOID\r
ArchRestoreExceptionContext (\r
- IN UINTN ExceptionType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext,\r
- IN EXCEPTION_HANDLER_DATA *ExceptionHandlerData\r
+ IN UINTN ExceptionType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext,\r
+ IN EXCEPTION_HANDLER_DATA *ExceptionHandlerData\r
)\r
{\r
- RESERVED_VECTORS_DATA *ReservedVectors;\r
+ RESERVED_VECTORS_DATA *ReservedVectors;\r
\r
- ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
+ ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
SystemContext.SystemContextX64->Ss = ReservedVectors[ExceptionType].OldSs;\r
SystemContext.SystemContextX64->Rsp = ReservedVectors[ExceptionType].OldSp;\r
SystemContext.SystemContextX64->Rflags = ReservedVectors[ExceptionType].OldFlags;\r
**/\r
EFI_STATUS\r
ArchSetupExceptionStack (\r
- IN CPU_EXCEPTION_INIT_DATA *StackSwitchData\r
+ IN CPU_EXCEPTION_INIT_DATA *StackSwitchData\r
)\r
{\r
- IA32_DESCRIPTOR Gdtr;\r
- IA32_DESCRIPTOR Idtr;\r
- IA32_IDT_GATE_DESCRIPTOR *IdtTable;\r
- IA32_TSS_DESCRIPTOR *TssDesc;\r
- IA32_TASK_STATE_SEGMENT *Tss;\r
- UINTN StackTop;\r
- UINTN Index;\r
- UINTN Vector;\r
- UINTN TssBase;\r
- UINTN GdtSize;\r
-\r
- if (StackSwitchData == NULL ||\r
- StackSwitchData->Ia32.Revision != CPU_EXCEPTION_INIT_DATA_REV ||\r
- StackSwitchData->X64.KnownGoodStackTop == 0 ||\r
- StackSwitchData->X64.KnownGoodStackSize == 0 ||\r
- StackSwitchData->X64.StackSwitchExceptions == NULL ||\r
- StackSwitchData->X64.StackSwitchExceptionNumber == 0 ||\r
- StackSwitchData->X64.StackSwitchExceptionNumber > CPU_EXCEPTION_NUM ||\r
- StackSwitchData->X64.GdtTable == NULL ||\r
- StackSwitchData->X64.IdtTable == NULL ||\r
- StackSwitchData->X64.ExceptionTssDesc == NULL ||\r
- StackSwitchData->X64.ExceptionTss == NULL) {\r
+ IA32_DESCRIPTOR Gdtr;\r
+ IA32_DESCRIPTOR Idtr;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtTable;\r
+ IA32_TSS_DESCRIPTOR *TssDesc;\r
+ IA32_TASK_STATE_SEGMENT *Tss;\r
+ UINTN StackTop;\r
+ UINTN Index;\r
+ UINTN Vector;\r
+ UINTN TssBase;\r
+ UINTN GdtSize;\r
+\r
+ if ((StackSwitchData == NULL) ||\r
+ (StackSwitchData->Ia32.Revision != CPU_EXCEPTION_INIT_DATA_REV) ||\r
+ (StackSwitchData->X64.KnownGoodStackTop == 0) ||\r
+ (StackSwitchData->X64.KnownGoodStackSize == 0) ||\r
+ (StackSwitchData->X64.StackSwitchExceptions == NULL) ||\r
+ (StackSwitchData->X64.StackSwitchExceptionNumber == 0) ||\r
+ (StackSwitchData->X64.StackSwitchExceptionNumber > CPU_EXCEPTION_NUM) ||\r
+ (StackSwitchData->X64.GdtTable == NULL) ||\r
+ (StackSwitchData->X64.IdtTable == NULL) ||\r
+ (StackSwitchData->X64.ExceptionTssDesc == NULL) ||\r
+ (StackSwitchData->X64.ExceptionTss == NULL))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
}\r
\r
if (((UINTN)StackSwitchData->X64.ExceptionTssDesc + StackSwitchData->X64.ExceptionTssDescSize) >\r
- ((UINTN)(StackSwitchData->X64.GdtTable) + StackSwitchData->X64.GdtTableSize)) {\r
+ ((UINTN)(StackSwitchData->X64.GdtTable) + StackSwitchData->X64.GdtTableSize))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if (StackSwitchData->X64.ExceptionTssDescSize < sizeof (IA32_TSS_DESCRIPTOR)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if (StackSwitchData->X64.ExceptionTssSize < sizeof (IA32_TASK_STATE_SEGMENT)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
(UINTN)(StackSwitchData->X64.GdtTable);\r
if ((UINTN)StackSwitchData->X64.GdtTable != Gdtr.Base) {\r
CopyMem (StackSwitchData->X64.GdtTable, (VOID *)Gdtr.Base, Gdtr.Limit + 1);\r
- Gdtr.Base = (UINTN)StackSwitchData->X64.GdtTable;\r
+ Gdtr.Base = (UINTN)StackSwitchData->X64.GdtTable;\r
Gdtr.Limit = (UINT16)GdtSize - 1;\r
}\r
\r
if ((UINTN)StackSwitchData->X64.IdtTable != Idtr.Base) {\r
Idtr.Base = (UINTN)StackSwitchData->X64.IdtTable;\r
}\r
+\r
if (StackSwitchData->X64.IdtTableSize > 0) {\r
Idtr.Limit = (UINT16)(StackSwitchData->X64.IdtTableSize - 1);\r
}\r
//\r
TssBase = (UINTN)Tss;\r
\r
- TssDesc->Uint128.Uint64 = 0;\r
- TssDesc->Uint128.Uint64_1= 0;\r
- TssDesc->Bits.LimitLow = sizeof(IA32_TASK_STATE_SEGMENT) - 1;\r
- TssDesc->Bits.BaseLow = (UINT16)TssBase;\r
- TssDesc->Bits.BaseMidl = (UINT8)(TssBase >> 16);\r
- TssDesc->Bits.Type = IA32_GDT_TYPE_TSS;\r
- TssDesc->Bits.P = 1;\r
- TssDesc->Bits.LimitHigh = 0;\r
- TssDesc->Bits.BaseMidh = (UINT8)(TssBase >> 24);\r
- TssDesc->Bits.BaseHigh = (UINT32)(TssBase >> 32);\r
+ TssDesc->Uint128.Uint64 = 0;\r
+ TssDesc->Uint128.Uint64_1 = 0;\r
+ TssDesc->Bits.LimitLow = sizeof (IA32_TASK_STATE_SEGMENT) - 1;\r
+ TssDesc->Bits.BaseLow = (UINT16)TssBase;\r
+ TssDesc->Bits.BaseMidl = (UINT8)(TssBase >> 16);\r
+ TssDesc->Bits.Type = IA32_GDT_TYPE_TSS;\r
+ TssDesc->Bits.P = 1;\r
+ TssDesc->Bits.LimitHigh = 0;\r
+ TssDesc->Bits.BaseMidh = (UINT8)(TssBase >> 24);\r
+ TssDesc->Bits.BaseHigh = (UINT32)(TssBase >> 32);\r
\r
//\r
// Fixup exception task descriptor and task-state segment\r
// Fixup IST\r
//\r
Tss->IST[Index] = StackTop;\r
- StackTop -= StackSwitchData->X64.KnownGoodStackSize;\r
+ StackTop -= StackSwitchData->X64.KnownGoodStackSize;\r
\r
//\r
// Set the IST field to enable corresponding IST\r
//\r
Vector = StackSwitchData->X64.StackSwitchExceptions[Index];\r
- if (Vector >= CPU_EXCEPTION_NUM ||\r
- Vector >= (Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR)) {\r
+ if ((Vector >= CPU_EXCEPTION_NUM) ||\r
+ (Vector >= (Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR)))\r
+ {\r
continue;\r
}\r
+\r
IdtTable[Vector].Bits.Reserved_0 = (UINT8)(Index + 1);\r
}\r
\r
VOID\r
EFIAPI\r
DumpCpuContext (\r
- IN EFI_EXCEPTION_TYPE ExceptionType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext\r
+ IN EFI_EXCEPTION_TYPE ExceptionType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext\r
)\r
{\r
InternalPrintMessage (\r
(SystemContext.SystemContextX64->ExceptionData & IA32_PF_EC_SGX) != 0\r
);\r
}\r
+\r
InternalPrintMessage ("\n");\r
}\r
+\r
InternalPrintMessage (\r
"RIP - %016lx, CS - %016lx, RFLAGS - %016lx\n",\r
SystemContext.SystemContextX64->Rip,\r
**/\r
VOID\r
DumpImageAndCpuContent (\r
- IN EFI_EXCEPTION_TYPE ExceptionType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext\r
+ IN EFI_EXCEPTION_TYPE ExceptionType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext\r
)\r
{\r
DumpCpuContext (ExceptionType, SystemContext);\r
// Dump module image base and module entry point by RIP\r
//\r
if ((ExceptionType == EXCEPT_IA32_PAGE_FAULT) &&\r
- ((SystemContext.SystemContextX64->ExceptionData & IA32_PF_EC_ID) != 0)) {\r
+ ((SystemContext.SystemContextX64->ExceptionData & IA32_PF_EC_ID) != 0))\r
+ {\r
//\r
// The RIP in SystemContext could not be used\r
// if it is page fault with I/D set.\r