ArmPkg: Replace single dead loop.

Several assembler macros use a loop at the label "dead" to trap an error.
This is difficult to debug as there is no indication of how one arrived at the loop.
This change replaces dead with distinct loops locally in the macro,
which means the cause of the hang is detectable to the debugger.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15273 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Olivier Martin 2014-03-01 10:57:55 +00:00 committed by oliviermartin
parent 0ff0e414d1
commit eaa84fd553
5 changed files with 17 additions and 29 deletions

View File

@ -106,24 +106,24 @@ _InitializePrimaryStackEnd:
// Provide the Macro with a safe temp xreg to use.
#define EL1_OR_EL2(SAFE_XREG) \
mrs SAFE_XREG, CurrentEL ;\
cmp SAFE_XREG, #0x4 ;\
b.eq 1f ;\
cmp SAFE_XREG, #0x8 ;\
b.eq 2f ;\
b dead ;// We should never get here.
cmp SAFE_XREG, #0x8 ;\
b.eq 2f ;\
cmp SAFE_XREG, #0x4 ;\
b.ne . ;// We should never get here
// EL1 code starts here
// CurrentEL : 0xC = EL3; 8 = EL2; 4 = EL1
// This only selects between EL1 and EL2 and EL3, else we die.
// Provide the Macro with a safe temp xreg to use.
#define EL1_OR_EL2_OR_EL3(SAFE_XREG) \
#define EL1_OR_EL2_OR_EL3(SAFE_XREG) \
mrs SAFE_XREG, CurrentEL ;\
cmp SAFE_XREG, #0xC ;\
b.eq 3f ;\
cmp SAFE_XREG, #0x8 ;\
b.eq 2f ;\
cmp SAFE_XREG, #0x4 ;\
b.eq 1f ;\
cmp SAFE_XREG, #0x8 ;\
b.eq 2f ;\
cmp SAFE_XREG, #0xC ;\
b.eq 3f ;\
b dead ;// We should never get here.
b.ne . ;// We should never get here
// EL1 code starts here
#else

View File

@ -503,7 +503,4 @@ ASM_PFX(ArmReadCurrentEL):
mrs x0, CurrentEL
ret
dead:
b dead
ASM_FUNCTION_REMOVE_IF_UNREFERENCED

View File

@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
#
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
# Copyright (c) 2011 - 2013, ARM Limited. All rights reserved.
# Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@ -196,7 +196,5 @@ ASM_PFX(ArmCallSEV):
sev
ret
dead:
b dead
ASM_FUNCTION_REMOVE_IF_UNREFERENCED

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
# Copyright (c) 2011-2014, ARM Limited. All rights reserved.
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@ -79,6 +79,3 @@ _DefaultFiq_h:
_DefaultSError_h:
mov x0, #EXCEPT_AARCH64_SERROR
TO_HANDLER
dead:
b dead

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2011-2013, ARM Limited. All rights reserved.
// Copyright (c) 2011-2014, ARM Limited. All rights reserved.
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
@ -43,13 +43,12 @@ ASM_PFX(_ModuleEntryPoint):
// changes.
// Which EL are we running at? Every EL needs some level of setup...
EL1_OR_EL2_OR_EL3(x0)
// We should not run this code in EL3
EL1_OR_EL2(x0)
1:bl ASM_PFX(SetupExceptionLevel1)
b ASM_PFX(MainEntryPoint)
2:bl ASM_PFX(SetupExceptionLevel2)
b ASM_PFX(MainEntryPoint)
3:// If we are at EL3 we die.
b dead
ASM_PFX(MainEntryPoint):
// Identify CPU ID
@ -109,6 +108,3 @@ _SetupPrimaryCoreStack:
// 128-bit variable on the stack
SetPrimaryStack (x1, x2, x3, x4)
b _PrepareArguments
dead:
b dead