From: Keith Packard Date: Tue, 19 Mar 2019 00:15:16 +0000 (-0700) Subject: altos: ARM ABI requires 8-byte aligned stack X-Git-Tag: 1.9.1~1^2~106 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=a2df970fca0e719e4b32e1642803590ff7bbd1ee;ds=sidebyside altos: ARM ABI requires 8-byte aligned stack This makes doubles on the stack (as for var-args functions) work Signed-off-by: Keith Packard --- diff --git a/src/kernel/ao_task.h b/src/kernel/ao_task.h index d27ef060..03b62969 100644 --- a/src/kernel/ao_task.h +++ b/src/kernel/ao_task.h @@ -26,10 +26,10 @@ #define HAS_TASK_INFO 1 #endif -/* arm stacks must be 32-bit aligned */ +/* arm stacks must be 64-bit aligned */ #ifndef AO_STACK_ALIGNMENT #ifdef __arm__ -#define AO_STACK_ALIGNMENT __attribute__ ((aligned(4))) +#define AO_STACK_ALIGNMENT __attribute__ ((aligned(8))) #else #define AO_STACK_ALIGNMENT #endif @@ -50,11 +50,11 @@ struct ao_task { struct ao_list queue; struct ao_list alarm_queue; #endif - /* Provide both 32-bit and 8-bit stacks, always 32-bit aligned */ + /* Provide both 32-bit and 8-bit stacks */ union { uint32_t stack32[AO_STACK_SIZE>>2]; uint8_t stack8[AO_STACK_SIZE]; - }; + } AO_STACK_ALIGNMENT; #if HAS_SAMPLE_PROFILE uint32_t ticks; uint32_t yields;