From e84e83c1a2106f45abc6466c08fec9d75c6956b4 Mon Sep 17 00:00:00 2001 From: aineoae86-sys Date: Wed, 1 Jul 2026 09:50:39 +0800 Subject: [PATCH] fix MicroBlaze stack protection context layout --- portable/GCC/MicroBlazeV9/portasm.S | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/portable/GCC/MicroBlazeV9/portasm.S b/portable/GCC/MicroBlazeV9/portasm.S index 7480e76edfe..e27403d8ddc 100644 --- a/portable/GCC/MicroBlazeV9/portasm.S +++ b/portable/GCC/MicroBlazeV9/portasm.S @@ -37,6 +37,15 @@ /* The context is oversized to allow functions called from the ISR to write back into the caller stack. */ #if defined (__arch64__) +#if( XPAR_MICROBLAZE_USE_STACK_PROTECTION ) +#if( XPAR_MICROBLAZE_USE_FPU != 0 ) + #define portCONTEXT_SIZE 288 + #define portMINUS_CONTEXT_SIZE -288 +#else + #define portCONTEXT_SIZE 280 + #define portMINUS_CONTEXT_SIZE -280 +#endif +#else #if( XPAR_MICROBLAZE_USE_FPU != 0 ) #define portCONTEXT_SIZE 272 #define portMINUS_CONTEXT_SIZE -272 @@ -44,6 +53,16 @@ back into the caller stack. */ #define portCONTEXT_SIZE 264 #define portMINUS_CONTEXT_SIZE -264 #endif +#endif +#else +#if( XPAR_MICROBLAZE_USE_STACK_PROTECTION ) +#if( XPAR_MICROBLAZE_USE_FPU != 0 ) + #define portCONTEXT_SIZE 144 + #define portMINUS_CONTEXT_SIZE -144 +#else + #define portCONTEXT_SIZE 140 + #define portMINUS_CONTEXT_SIZE -140 +#endif #else #if( XPAR_MICROBLAZE_USE_FPU != 0 ) #define portCONTEXT_SIZE 136 @@ -53,6 +72,7 @@ back into the caller stack. */ #define portMINUS_CONTEXT_SIZE -132 #endif #endif +#endif /* Offsets from the stack pointer at which saved registers are placed. */ #if defined (__arch64__) @@ -88,7 +108,16 @@ back into the caller stack. */ #define portR2_OFFSET 240 #define portCRITICAL_NESTING_OFFSET 248 #define portMSR_OFFSET 256 +#if( XPAR_MICROBLAZE_USE_FPU != 0 ) #define portFSR_OFFSET 264 +#if( XPAR_MICROBLAZE_USE_STACK_PROTECTION ) +#define portSLR_OFFSET 272 +#define portSHR_OFFSET 280 +#endif +#elif( XPAR_MICROBLAZE_USE_STACK_PROTECTION ) +#define portSLR_OFFSET 264 +#define portSHR_OFFSET 272 +#endif #else #define portR31_OFFSET 4 #define portR30_OFFSET 8 @@ -122,7 +151,16 @@ back into the caller stack. */ #define portR2_OFFSET 120 #define portCRITICAL_NESTING_OFFSET 124 #define portMSR_OFFSET 128 +#if( XPAR_MICROBLAZE_USE_FPU != 0 ) #define portFSR_OFFSET 132 +#if( XPAR_MICROBLAZE_USE_STACK_PROTECTION ) +#define portSLR_OFFSET 136 +#define portSHR_OFFSET 140 +#endif +#elif( XPAR_MICROBLAZE_USE_STACK_PROTECTION ) +#define portSLR_OFFSET 132 +#define portSHR_OFFSET 136 +#endif #endif