summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Drivers/CpuDxe/Exception.c
diff options
context:
space:
mode:
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-03 09:18:00 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2011-06-03 09:18:00 +0000
commiteeec69c5dc62460d2b256f3dee8097fb7afb34d5 (patch)
treee87b4c9097fb66c7c8c87cd8f279190ba8b94090 /ArmPkg/Drivers/CpuDxe/Exception.c
parent55fad965091e831e3a4fbe84e30f35fd9d454afc (diff)
downloadedk2-eeec69c5dc62460d2b256f3dee8097fb7afb34d5.tar.gz
edk2-eeec69c5dc62460d2b256f3dee8097fb7afb34d5.tar.bz2
edk2-eeec69c5dc62460d2b256f3dee8097fb7afb34d5.zip
ArmPkg: Introduce the PCD PcdDebuggerExceptionSupport
The Exception Vector can be set before installing the CPU DXE driver to add debugger support at the early stage of the firmware initialization. If no one has touched the exception vector prior to the CPU DXE then the Vector might contain non zero data. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11733 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Drivers/CpuDxe/Exception.c')
-rw-r--r--ArmPkg/Drivers/CpuDxe/Exception.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ArmPkg/Drivers/CpuDxe/Exception.c b/ArmPkg/Drivers/CpuDxe/Exception.c
index 21a4c035a9..7c59af7fef 100644
--- a/ArmPkg/Drivers/CpuDxe/Exception.c
+++ b/ArmPkg/Drivers/CpuDxe/Exception.c
@@ -162,8 +162,10 @@ InitializeExceptions (
ASSERT_EFI_ERROR (Status);
}
+ if (FeaturePcdGet(PcdDebuggerExceptionSupport) == TRUE) {
// Save existing vector table, in case debugger is already hooked in
CopyMem ((VOID *)gDebuggerExceptionHandlers, (VOID *)VectorBase, sizeof (gDebuggerExceptionHandlers));
+ }
// Copy our assembly code into the page that contains the exception vectors.
CopyMem ((VOID *)VectorBase, (VOID *)ExceptionHandlersStart, Length);
@@ -178,7 +180,8 @@ InitializeExceptions (
// Initialize the C entry points for interrupts
//
for (Index = 0; Index <= MAX_ARM_EXCEPTION; Index++) {
- if ((gDebuggerExceptionHandlers[Index] == 0) || (gDebuggerExceptionHandlers[Index] == (VOID *)(UINTN)0xEAFFFFFE)) {
+ if (!FeaturePcdGet(PcdDebuggerExceptionSupport) ||
+ (gDebuggerExceptionHandlers[Index] == 0) || (gDebuggerExceptionHandlers[Index] == (VOID *)(UINTN)0xEAFFFFFE)) {
// Exception handler contains branch to vector location (jmp $) so no handler
// NOTE: This code assumes vectors are ARM and not Thumb code
Status = RegisterInterruptHandler (Index, NULL);