or1k: Use EXCEPTION_STACK_SIZE of 256bytes.
authorTim 'mithro' Ansell <mithro@mithis.com>
Mon, 25 Sep 2017 19:28:27 +0000 (05:28 +1000)
committerTim 'mithro' Ansell <mithro@mithis.com>
Fri, 6 Oct 2017 09:38:44 +0000 (20:38 +1100)
or1k defines a 128 byte "red zone" after the stack that can not be
touched by the exception handler.

We also need 128 bytes to store the 32 registers.

litex/soc/software/libbase/crt0-or1k.S

index 5db4142af20dd385ab303846ff1c335827d88cd9..ff77910dc2671f08f57cd18a7c67dcfa29acc1e0 100644 (file)
 
 #include <spr-defs.h>
 
-#define EXCEPTION_STACK_SIZE (4*32)
+/*
+ * OR1K Architecture has a 128 byte "red zone" after the stack that can not be
+ * touched by exception handlers. GCC uses this red zone for locals and
+ * temps without needing to change the stack pointer.
+ */
+#define OR1K_RED_ZONE_SIZE     128
+
+/*
+ * We need 4 bytes (32 bits) * 32 registers space on the stack to save all the
+ * registers.
+ */
+#define EXCEPTION_STACK_SIZE   ((4*32) + OR1K_RED_ZONE_SIZE)
 
 #define HANDLE_EXCEPTION                    ; \
     l.addi  r1, r1, -EXCEPTION_STACK_SIZE   ; \