"SError"\r
};\r
\r
+STATIC BOOLEAN mRecursiveException;\r
+\r
CHAR8 *\r
GetImageName (\r
IN UINTN FaultAddress,\r
{\r
CHAR8 Buffer[100];\r
UINTN CharCount;\r
+ INT32 Offset;\r
+\r
+ if (mRecursiveException) {\r
+ CharCount = AsciiSPrint (Buffer, sizeof (Buffer),"\nRecursive exception occurred while dumping the CPU state\n");\r
+ SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
+ CpuDeadLoop ();\r
+ }\r
+ mRecursiveException = TRUE;\r
\r
CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"\n\n%a Exception at 0x%016lx\n", gExceptionTypeString[ExceptionType], SystemContext.SystemContextAArch64->ELR);\r
SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
DescribeExceptionSyndrome (SystemContext.SystemContextAArch64->ESR);\r
ASSERT (FALSE):\r
\r
+ DEBUG ((EFI_D_ERROR, "\nStack dump:\n"));\r
+ for (Offset = -256; Offset < 256; Offset += 32) {\r
+ DEBUG ((EFI_D_ERROR, "%c %013lx: %016lx %016lx %016lx %016lx\n",\r
+ Offset == 0 ? '>' : ' ',\r
+ SystemContext.SystemContextAArch64->SP + Offset,\r
+ *(UINT64 *)(SystemContext.SystemContextAArch64->SP + Offset),\r
+ *(UINT64 *)(SystemContext.SystemContextAArch64->SP + Offset + 8),\r
+ *(UINT64 *)(SystemContext.SystemContextAArch64->SP + Offset + 16),\r
+ *(UINT64 *)(SystemContext.SystemContextAArch64->SP + Offset + 24)));\r
+ }\r
+\r
CpuDeadLoop ();\r
}\r