- //\r
- // To avoid repeat initialization of default handlers, the caller should pass\r
- // an extended init data with InitDefaultHandlers set to FALSE. There's no\r
- // need to call this method to just initialize default handlers. Call non-ex\r
- // version instead; or this method must be implemented as a simple wrapper of\r
- // non-ex version of it, if this version has to be called.\r
- //\r
- if ((InitData == NULL) || InitData->X64.InitDefaultHandlers) {\r
- Status = InitializeCpuExceptionHandlers (VectorInfo);\r
- } else {\r
- Status = EFI_SUCCESS;\r
- }\r
-\r
- if (!EFI_ERROR (Status)) {\r
- //\r
- // Initializing stack switch is only necessary for Stack Guard functionality.\r
- //\r
- if (PcdGetBool (PcdCpuStackGuard)) {\r
- if (InitData == NULL) {\r
- SetMem (mNewGdt, sizeof (mNewGdt), 0);\r
-\r
- AsmReadIdtr (&Idtr);\r
- AsmReadGdtr (&Gdtr);\r
-\r
- EssData.X64.Revision = CPU_EXCEPTION_INIT_DATA_REV;\r
- EssData.X64.KnownGoodStackTop = (UINTN)mNewStack + sizeof (mNewStack);\r
- EssData.X64.KnownGoodStackSize = CPU_KNOWN_GOOD_STACK_SIZE;\r
- EssData.X64.StackSwitchExceptions = CPU_STACK_SWITCH_EXCEPTION_LIST;\r
- EssData.X64.StackSwitchExceptionNumber = CPU_STACK_SWITCH_EXCEPTION_NUMBER;\r
- EssData.X64.IdtTable = (VOID *)Idtr.Base;\r
- EssData.X64.IdtTableSize = Idtr.Limit + 1;\r
- EssData.X64.GdtTable = mNewGdt;\r
- EssData.X64.GdtTableSize = sizeof (mNewGdt);\r
- EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1;\r
- EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE;\r
- EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 + CPU_TSS_DESC_SIZE;\r
- EssData.X64.ExceptionTssSize = CPU_TSS_SIZE;\r
-\r
- InitData = &EssData;\r
- }\r
-\r
- Status = ArchSetupExceptionStack (InitData);\r
- }\r
+ if (InitData == NULL) {\r
+ SetMem (mNewGdt, sizeof (mNewGdt), 0);\r
+\r
+ AsmReadIdtr (&Idtr);\r
+ AsmReadGdtr (&Gdtr);\r
+\r
+ EssData.X64.Revision = CPU_EXCEPTION_INIT_DATA_REV;\r
+ EssData.X64.KnownGoodStackTop = (UINTN)mNewStack + sizeof (mNewStack);\r
+ EssData.X64.KnownGoodStackSize = CPU_KNOWN_GOOD_STACK_SIZE;\r
+ EssData.X64.StackSwitchExceptions = CPU_STACK_SWITCH_EXCEPTION_LIST;\r
+ EssData.X64.StackSwitchExceptionNumber = CPU_STACK_SWITCH_EXCEPTION_NUMBER;\r
+ EssData.X64.IdtTable = (VOID *)Idtr.Base;\r
+ EssData.X64.IdtTableSize = Idtr.Limit + 1;\r
+ EssData.X64.GdtTable = mNewGdt;\r
+ EssData.X64.GdtTableSize = sizeof (mNewGdt);\r
+ EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1;\r
+ EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE;\r
+ EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 + CPU_TSS_DESC_SIZE;\r
+ EssData.X64.ExceptionTssSize = CPU_TSS_SIZE;\r
+\r
+ InitData = &EssData;\r