diff options
Diffstat (limited to 'bl31')
-rw-r--r-- | bl31/aarch64/ea_delegate.S | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/bl31/aarch64/ea_delegate.S b/bl31/aarch64/ea_delegate.S index dce1f5ab7..d18f9e575 100644 --- a/bl31/aarch64/ea_delegate.S +++ b/bl31/aarch64/ea_delegate.S @@ -6,6 +6,7 @@ #include <asm_macros.S> +#include <assert_macros.S> #include <context.h> #include <ea_handle.h> @@ -143,9 +144,24 @@ func ea_proceed mov sp, x5 mov x29, x30 +#if ENABLE_ASSERTIONS + /* Stash the stack pointer */ + mov x28, sp +#endif bl plat_ea_handler mov x30, x29 +#if ENABLE_ASSERTIONS + /* + * Error handling flows might involve long jumps; so upon returning from + * the platform error handler, validate that the we've completely + * unwound the stack. + */ + mov x27, sp + cmp x28, x27 + ASM_ASSERT(eq) +#endif + /* Make SP point to context */ msr spsel, #1 |