Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>\r
Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include <Library/PrintLib.h>\r
#include <Library/ArmDisassemblerLib.h>\r
#include <Library/SerialPortLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiLib.h>\r
\r
#include <Guid/DebugImageInfoTable.h>\r
\r
#include <Protocol/DebugSupport.h>\r
#include <Library/DefaultExceptionHandlerLib.h>\r
\r
-EFI_DEBUG_IMAGE_INFO_TABLE_HEADER *gDebugImageTableHeader = NULL;\r
+//\r
+// The number of elements in a CHAR8 array, including the terminating NUL, that\r
+// is meant to hold the string rendering of the CPSR.\r
+//\r
+#define CPSR_STRING_SIZE 32\r
\r
typedef struct {\r
UINT32 BIT;\r
It is possible to add extra bits by adding them to CpsrChar array.\r
\r
@param Cpsr ARM CPSR register value\r
- @param ReturnStr 32 byte string that contains string version of CPSR\r
+ @param ReturnStr CPSR_STRING_SIZE byte string that contains string\r
+ version of CPSR\r
\r
**/\r
VOID\r
break;\r
}\r
\r
- AsciiStrCat (Str, ModeStr);\r
- return;\r
+ //\r
+ // See the interface contract in the leading comment block.\r
+ //\r
+ AsciiStrCatS (Str, CPSR_STRING_SIZE - (Str - ReturnStr), ModeStr);\r
}\r
\r
CHAR8 *\r
\r
CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"\n%a Exception PC at 0x%08x CPSR 0x%08x ",\r
gExceptionTypeString[ExceptionType], SystemContext.SystemContextArm->PC, SystemContext.SystemContextArm->CPSR);\r
- SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
+ SerialPortWrite ((UINT8 *)Buffer, CharCount);\r
+ if (gST->ConOut != NULL) {\r
+ AsciiPrint (Buffer);\r
+ }\r
\r
DEBUG_CODE_BEGIN ();\r
CHAR8 *Pdb;\r
UINT32 ImageBase;\r
UINT32 PeCoffSizeOfHeader;\r
UINT32 Offset;\r
- CHAR8 CpsrStr[32]; // char per bit. Lower 5-bits are mode that is a 3 char string\r
+ CHAR8 CpsrStr[CPSR_STRING_SIZE]; // char per bit. Lower 5-bits are mode\r
+ // that is a 3 char string\r
CHAR8 Buffer[80];\r
UINT8 *DisAsm;\r
UINT32 ItBlock;\r
DEBUG ((EFI_D_ERROR, "\n"));\r
ASSERT (FALSE);\r
\r
+ CpuDeadLoop (); // may return if executing under a debugger\r
+\r
// Clear the error registers that we have already displayed incase some one wants to keep going\r
SystemContext.SystemContextArm->DFSR = 0;\r
SystemContext.SystemContextArm->IFSR = 0;\r