mirror of https://github.com/acidanthera/audk.git
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
This commit is contained in:
parent
55fad96509
commit
eeec69c5dc
|
@ -52,6 +52,9 @@
|
|||
# point the Exception Vector Table to its location in CpuDxe.
|
||||
# By default we copy the Vector Table at PcdGet32(PcdCpuVectorBaseAddress)
|
||||
gArmTokenSpaceGuid.PcdRelocateVectorTable|TRUE|BOOLEAN|0x00000022
|
||||
# Set this PCD to TRUE if the Exception Vector is changed to add debugger support before
|
||||
# it has been configured by the CPU DXE
|
||||
gArmTokenSpaceGuid.PcdDebuggerExceptionSupport|FALSE|BOOLEAN|0x00000032
|
||||
|
||||
gArmTokenSpaceGuid.PcdEfiUncachedMemoryToStronglyOrdered|FALSE|BOOLEAN|0x00000025
|
||||
gArmTokenSpaceGuid.PcdSkipPeiCore|FALSE|BOOLEAN|0x00000026
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
[FeaturePcd.common]
|
||||
gArmTokenSpaceGuid.PcdCpuDxeProduceDebugSupport
|
||||
gArmTokenSpaceGuid.PcdRelocateVectorTable
|
||||
gArmTokenSpaceGuid.PcdDebuggerExceptionSupport
|
||||
gArmTokenSpaceGuid.PcdEfiUncachedMemoryToStronglyOrdered
|
||||
|
||||
[depex]
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue