]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandler.c
ArmPkg/DefaultExceptionHandlerLib: Added support to the BASE-type library
[mirror_edk2.git] / ArmPkg / Library / DefaultExceptionHandlerLib / DefaultExceptionHandler.c
index 94aacf83a4728b13cf656cc9263ecc689785c850..bb29b95da2d1a076486f1821de657b5631611717 100644 (file)
@@ -2,6 +2,7 @@
   Default exception handler\r
 \r
   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
@@ -14,7 +15,6 @@
 **/\r
 \r
 #include <Uefi.h>\r
-#include <Library/UefiLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/PeCoffGetEntryPointLib.h>\r
 #include <Library/SerialPortLib.h>\r
 \r
 #include <Guid/DebugImageInfoTable.h>\r
-#include <Protocol/DebugSupport.h>\r
-#include <Protocol/LoadedImage.h>\r
 \r
+#include <Protocol/DebugSupport.h>\r
+#include <Library/DefaultExceptionHandlerLib.h>\r
 \r
 EFI_DEBUG_IMAGE_INFO_TABLE_HEADER *gDebugImageTableHeader = NULL;\r
 \r
-\r
 typedef struct {\r
   UINT32  BIT;\r
   CHAR8   Char;\r
 } CPSR_CHAR;\r
 \r
\r
-/**\r
-  Use the EFI Debug Image Table to lookup the FaultAddress and find which PE/COFF image \r
-  it came from. As long as the PE/COFF image contains a debug directory entry a \r
-  string can be returned. For ELF and Mach-O images the string points to the Mach-O or ELF\r
-  image. Microsoft tools contain a pointer to the PDB file that contains the debug information.\r
-\r
-  @param  FaultAddress         Address to find PE/COFF image for. \r
-  @param  ImageBase            Return load address of found image\r
-  @param  PeCoffSizeOfHeaders  Return the size of the PE/COFF header for the image that was found\r
-\r
-  @retval NULL                 FaultAddress not in a loaded PE/COFF image.\r
-  @retval                      Path and file name of PE/COFF image.\r
-  \r
-**/\r
 CHAR8 *\r
 GetImageName (\r
   IN  UINT32  FaultAddress,\r
   OUT UINT32  *ImageBase,\r
   OUT UINT32  *PeCoffSizeOfHeaders\r
-  )\r
-{\r
-  EFI_DEBUG_IMAGE_INFO  *DebugTable;\r
-  UINTN                 Entry;\r
-  CHAR8                 *Address;\r
-\r
-  DebugTable = gDebugImageTableHeader->EfiDebugImageInfoTable;\r
-  if (DebugTable == NULL) {\r
-    return NULL;\r
-  }\r
-\r
-  Address = (CHAR8 *)(UINTN)FaultAddress;\r
-  for (Entry = 0; Entry < gDebugImageTableHeader->TableSize; Entry++, DebugTable++) {\r
-    if (DebugTable->NormalImage != NULL) {\r
-      if ((DebugTable->NormalImage->ImageInfoType == EFI_DEBUG_IMAGE_INFO_TYPE_NORMAL) && \r
-          (DebugTable->NormalImage->LoadedImageProtocolInstance != NULL)) {\r
-        if ((Address >= (CHAR8 *)DebugTable->NormalImage->LoadedImageProtocolInstance->ImageBase) &&\r
-            (Address <= ((CHAR8 *)DebugTable->NormalImage->LoadedImageProtocolInstance->ImageBase + DebugTable->NormalImage->LoadedImageProtocolInstance->ImageSize))) {\r
-          *ImageBase = (UINT32)DebugTable->NormalImage->LoadedImageProtocolInstance->ImageBase;\r
-          *PeCoffSizeOfHeaders = PeCoffGetSizeOfHeaders ((VOID *)(UINTN)*ImageBase);\r
-          return PeCoffLoaderGetPdbPointer (DebugTable->NormalImage->LoadedImageProtocolInstance->ImageBase);\r
-        }           \r
-      }\r
-    }  \r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
+  );\r
 \r
 /**\r
   Convert the Current Program Status Register (CPSR) to a string. The string is \r
@@ -198,7 +154,7 @@ FaultStatusToString (
 STATIC CHAR8 *gExceptionTypeString[] = {\r
   "Reset",\r
   "Undefined OpCode",\r
-  "SWI",\r
+  "SVC",\r
   "Prefetch Abort",\r
   "Data Abort",\r
   "Undefined",\r
@@ -310,33 +266,3 @@ DefaultExceptionHandler (
   // If some one is stepping past the exception handler adjust the PC to point to the next instruction \r
   SystemContext.SystemContextArm->PC += PcAdjust;\r
 }\r
-\r
-\r
-\r
-\r
-/**\r
-  The constructor function caches EFI Debug table information for use in the exception handler.\r
-  \r
-\r
-  @param  ImageHandle   The firmware allocated handle for the EFI image.\r
-  @param  SystemTable   A pointer to the EFI System Table.\r
-  \r
-  @retval EFI_SUCCESS   The constructor always returns EFI_SUCCESS.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-DefaultExceptionHandlerConstructor (\r
-  IN EFI_HANDLE                ImageHandle,\r
-  IN EFI_SYSTEM_TABLE          *SystemTable\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-  \r
-  \r
-  Status = EfiGetSystemConfigurationTable (&gEfiDebugImageInfoTableGuid, (VOID **)&gDebugImageTableHeader);\r
-  if (EFI_ERROR (Status)) {\r
-    gDebugImageTableHeader = NULL;\r
-  }\r
-  return Status;\r
-}\r