ArmPlatformPkg/ArmPlatformStackLib: Introduced helper library to initialize stacks
The new functions are: - ArmPlatformStackSet(IN UINTN StackBase, IN UINTN MpId, IN UINTN PrimaryStackSize, IN UINTN SecondaryStackSize); - ArmPlatformStackSetPrimary(IN UINTN StackBase, IN UINTN MpId, IN UINTN PrimaryStackSize, IN UINTN SecondaryStackSize); - ArmPlatformStackSetSecondary(IN UINTN StackBase, IN UINTN MpId, IN UINTN PrimaryStackSize, IN UINTN SecondaryStackSize); The stack topology can be changed by implementing a new ArmPlatformStackLib Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13774 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -144,6 +144,21 @@ _SetPrimaryStackInitGlobals: ; \
|
||||
b _SetPrimaryStackInitGlobals ; \
|
||||
_SetPrimaryStackEnd:
|
||||
|
||||
// Initialize the Global Variable with '0'
|
||||
#define InitializePrimaryStack(GlobalSize, Tmp1) \
|
||||
and Tmp1, GlobalSize, #7 ; \
|
||||
rsbne Tmp1, Tmp1, #8 ; \
|
||||
add GlobalSize, GlobalSize, Tmp1 ; \
|
||||
; \
|
||||
mov Tmp1, sp ; \
|
||||
sub sp, GlobalSize ; \
|
||||
mov GlobalSize, #0x0 ; \
|
||||
_InitializePrimaryStackLoop: ; \
|
||||
cmp Tmp1, sp ; \
|
||||
bls _InitializePrimaryStackEnd ; \
|
||||
str GlobalSize, [Tmp1], #-4 ; \
|
||||
b _InitializePrimaryStackLoop ; \
|
||||
_InitializePrimaryStackEnd:
|
||||
|
||||
#elif defined (__GNUC__)
|
||||
|
||||
@ -213,6 +228,22 @@ _SetPrimaryStackInitGlobals: ; \
|
||||
b _SetPrimaryStackInitGlobals ; \
|
||||
_SetPrimaryStackEnd:
|
||||
|
||||
// Initialize the Global Variable with '0'
|
||||
#define InitializePrimaryStack(GlobalSize, Tmp1) \
|
||||
and Tmp1, GlobalSize, #7 ; \
|
||||
rsbne Tmp1, Tmp1, #8 ; \
|
||||
add GlobalSize, GlobalSize, Tmp1 ; \
|
||||
; \
|
||||
mov Tmp1, sp ; \
|
||||
sub sp, GlobalSize ; \
|
||||
mov GlobalSize, #0x0 ; \
|
||||
_InitializePrimaryStackLoop: ; \
|
||||
cmp Tmp1, sp ; \
|
||||
bls _InitializePrimaryStackEnd ; \
|
||||
str GlobalSize, [Tmp1], #-4 ; \
|
||||
b _InitializePrimaryStackLoop ; \
|
||||
_InitializePrimaryStackEnd:
|
||||
|
||||
#else
|
||||
|
||||
//
|
||||
@ -278,6 +309,9 @@ _SetPrimaryStackEnd:
|
||||
|
||||
#define SetPrimaryStack(StackTop,GlobalSize,Tmp) SetPrimaryStack StackTop, GlobalSize, Tmp
|
||||
|
||||
// Initialize the Global Variable with '0'
|
||||
#define InitializePrimaryStack(GlobalSize, Tmp1) InitializePrimaryStack GlobalSize, Tmp1
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user