Run with stack alignment faults enabled under RTEMS_DEBUG to catch any
stack misalignments early. This makes it easier to track them down
should they ever occur.
---
 bsps/aarch64/shared/start/start.S                    |  8 ++++++++
 cpukit/score/cpu/aarch64/aarch64-exception-default.S | 10 ++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/bsps/aarch64/shared/start/start.S 
b/bsps/aarch64/shared/start/start.S
index f4c62b2b6c..e4dd3c2cee 100644
--- a/bsps/aarch64/shared/start/start.S
+++ b/bsps/aarch64/shared/start/start.S
@@ -90,6 +90,14 @@ _start:
 #endif
 #endif
 
+       /* Initialize SCTLR_EL1 */
+       mov x0, XZR
+#if defined(RTEMS_DEBUG)
+       /* Enable Stack alignment checking */
+       orr x0, x0, #(1<<3)
+#endif
+       msr SCTLR_EL1, x0
+
 #ifdef RTEMS_SMP
        /* Read MPIDR and get current processor index */
         mrs    x7, mpidr_el1
diff --git a/cpukit/score/cpu/aarch64/aarch64-exception-default.S 
b/cpukit/score/cpu/aarch64/aarch64-exception-default.S
index 970ccf735f..d139fdc6a4 100644
--- a/cpukit/score/cpu/aarch64/aarch64-exception-default.S
+++ b/cpukit/score/cpu/aarch64/aarch64-exception-default.S
@@ -76,7 +76,7 @@
  * TODO(kmoore) The current implementation here assumes that SP is not
  * misaligned.
  */
-       .macro  JUMP_HANDLER
+       .macro  JUMP_HANDLER_SHORT
 /* Mask to use in BIC, lower 7 bits */
        mov x0, #0x7f
 /* LR contains PC, mask off to the base of the current vector */
@@ -113,6 +113,10 @@
        nop
        nop
        nop
+       .endm
+
+       .macro  JUMP_HANDLER
+       JUMP_HANDLER_SHORT
        nop
        .endm
 
@@ -182,10 +186,12 @@ curr_el_sp0_serror_get_pc:                /* The current 
PC is now in LR */
  * the current SP.
  */
 curr_el_spx_sync:
+       msr SCTLR_EL1, XZR
        stp x0, lr,     [sp, #-0x10]!   /* Push x0,lr on to the stack */
        bl curr_el_spx_sync_get_pc      /* Get current execution address */
 curr_el_spx_sync_get_pc:               /* The current PC is now in LR */
-       JUMP_HANDLER
+/* Use short jump handler since this has an extra instruction to clear SCTLR */
+       JUMP_HANDLER_SHORT
        JUMP_TARGET_SPx
 .balign 0x80
 /*
-- 
2.20.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to