summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTill Straumann <strauman@slac.stanford.edu>2009-10-29 16:29:46 +0000
committerTill Straumann <strauman@slac.stanford.edu>2009-10-29 16:29:46 +0000
commitb01d7c7eebb94896e56335a8775f2ce3f7923df4 (patch)
treec55997142f8ee3877bf9ba9080009bcc4282ad4e
parent2009-10-29 Till Straumann <strauman@slac.stanford.edu> (diff)
downloadrtems-b01d7c7eebb94896e56335a8775f2ce3f7923df4.tar.bz2
2009-10-29 Till Straumann <strauman@slac.stanford.edu>
* rtems/score/cpu.h: Define _CPU_Interrupt_stack_setup() macro which reserves space for the 'vector' arg to _C_dispatch_isr() routine and aligns the irq stack to CPU_STACK_ALIGNMENT.
-rw-r--r--cpukit/score/cpu/i386/ChangeLog6
-rw-r--r--cpukit/score/cpu/i386/rtems/score/cpu.h10
2 files changed, 16 insertions, 0 deletions
diff --git a/cpukit/score/cpu/i386/ChangeLog b/cpukit/score/cpu/i386/ChangeLog
index 82b0f810ad..012c4038f5 100644
--- a/cpukit/score/cpu/i386/ChangeLog
+++ b/cpukit/score/cpu/i386/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-29 Till Straumann <strauman@slac.stanford.edu>
+
+ * rtems/score/cpu.h: Define _CPU_Interrupt_stack_setup() macro
+ which reserves space for the 'vector' arg to _C_dispatch_isr()
+ routine and aligns the irq stack to CPU_STACK_ALIGNMENT.
+
2009-10-28 Till Straumann <strauman@slac.stanford.edu>
* rtems/score/cpu.h: Replaced misleading typedef of
diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h
index 354166b336..c8218d1a04 100644
--- a/cpukit/score/cpu/i386/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/rtems/score/cpu.h
@@ -287,6 +287,16 @@ SCORE_EXTERN void *_CPU_Interrupt_stack_high;
uint32_t _CPU_ISR_Get_level( void );
+/* Make sure interrupt stack has space for ISR
+ * 'vector' arg at the top and that it is aligned
+ * properly.
+ */
+
+#define _CPU_Interrupt_stack_setup( _lo, _hi ) \
+ do { \
+ _hi = (void*)(((uintptr_t)(_hi) - 4) & ~ (CPU_STACK_ALIGNMENT - 1)); \
+ } while (0)
+
#endif /* ASM */
/* end of ISR handler macros */