[PATCH v3] score/aarch64: Align context validation frame

Gedare Bloom gedare at rtems.org
Tue May 18 21:05:48 UTC 2021


On Tue, May 18, 2021 at 2:18 PM Kinsey Moore <kinsey.moore at oarcorp.com> wrote:
>
> Looks like this fell through the cracks last month and I totally forgot about it.
>
> -----Original Message-----
> From: Kinsey Moore <kinsey.moore at oarcorp.com>
> Sent: Tuesday, April 13, 2021 10:15
> To: devel at rtems.org
> Cc: Kinsey Moore <kinsey.moore at oarcorp.com>
> Subject: [PATCH v3] score/aarch64: Align context validation frame
>
> Ensure the stack remains aligned by keeping the context frame at a
> multiple of 16 bytes. This avoids stack alignment exceptions which occur
> when the stack pointer is not 16 byte aligned.
> ---
>  .../cpu/aarch64/aarch64-context-validate.S    | 29 ++++++++++++-------
>  1 file changed, 18 insertions(+), 11 deletions(-)
>
> diff --git a/cpukit/score/cpu/aarch64/aarch64-context-validate.S b/cpukit/score/cpu/aarch64/aarch64-context-validate.S
> index 57f634934b..1e71bc5b3a 100644
> --- a/cpukit/score/cpu/aarch64/aarch64-context-validate.S
> +++ b/cpukit/score/cpu/aarch64/aarch64-context-validate.S
> @@ -42,7 +42,9 @@
>
>  #include <rtems/asm.h>
>  #include <rtems/score/cpu.h>
> +#include <rtems/score/basedefs.h>
>
> +/* These must be 8 byte aligned to avoid misaligned accesses */
>  #define FRAME_OFFSET_X4  0x00
>  #define FRAME_OFFSET_X5  0x08
>  #define FRAME_OFFSET_X6  0x10
> @@ -54,18 +56,23 @@
>  #define FRAME_OFFSET_LR  0x40
>
>  #ifdef AARCH64_MULTILIB_VFP
> -  #define FRAME_OFFSET_V8  0x48
> -  #define FRAME_OFFSET_V9  0x58
> -  #define FRAME_OFFSET_V10 0x68
> -  #define FRAME_OFFSET_V11 0x78
> -  #define FRAME_OFFSET_V12 0x88
> -  #define FRAME_OFFSET_V13 0x98
> -  #define FRAME_OFFSET_V14 0xA8
> -  #define FRAME_OFFSET_V15 0xB8
> -
> -  #define FRAME_SIZE (FRAME_OFFSET_V15 + 0x10)
> +  /* These must be 16 byte aligned to avoid misaligned accesses */
> +  #define FRAME_OFFSET_V8  0x50
> +  #define FRAME_OFFSET_V9  0x60
> +  #define FRAME_OFFSET_V10 0x70
> +  #define FRAME_OFFSET_V11 0x80
> +  #define FRAME_OFFSET_V12 0x90
> +  #define FRAME_OFFSET_V13 0xA0
> +  #define FRAME_OFFSET_V14 0xB0
> +  #define FRAME_OFFSET_V15 0xC0
> +

These definitions should be consistent with how the Context_Control
structure gets defined (include/rtems/score/cpu.h). I don't think they
are consistent in this port?

> +  /*
> +   * Force 16 byte alignment of the frame size to avoid stack pointer alignment
> +   * exceptions.
> +   */
> +  #define FRAME_SIZE RTEMS_ALIGN_UP( FRAME_OFFSET_V15, 16 )
>  #else
> -  #define FRAME_SIZE (FRAME_OFFSET_LR + 0x08)
> +  #define FRAME_SIZE RTEMS_ALIGN_UP( FRAME_OFFSET_LR, 16 )
>  #endif
>
>         .section        .text
> --
> 2.20.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list