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.
This commit is contained in:
Kinsey Moore
2021-03-12 09:57:59 -06:00
committed by Joel Sherrill
parent de694b753c
commit 342fe19842

View File

@@ -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
/* 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
#define FRAME_SIZE (FRAME_OFFSET_V15 + 0x10)
/*
* 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