From 26eabc0db1e61d941bd60193c4c3705b8ff383c4 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 8 Aug 2011 10:01:14 +0000 Subject: Centralyzed ARM scatter files too, new stack checking implemented in ARM port. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3210 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7S256.ld | 7 ++++--- os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7X256.ld | 7 ++++--- os/ports/GCC/ARM/LPC214x/ld/LPC2148.ld | 7 ++++--- os/ports/GCC/ARM/chcore.h | 23 ++++++++--------------- os/ports/GCC/ARMCMx/chcore_v6m.h | 2 +- os/ports/GCC/ARMCMx/chcore_v7m.h | 2 +- 6 files changed, 22 insertions(+), 26 deletions(-) (limited to 'os/ports') diff --git a/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7S256.ld b/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7S256.ld index cad09b755..8ec869a02 100644 --- a/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7S256.ld +++ b/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7S256.ld @@ -98,7 +98,8 @@ SECTIONS } PROVIDE(end = .); -_end = .; +_end = .; -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; +__heap_base__ = _end; +__heap_end__ = __ram_end__ - __stacks_total_size__; +__main_thread_stack_base__ = __ram_end__ - __stacks_total_size__; diff --git a/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7X256.ld b/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7X256.ld index 9308935be..ea9527a34 100644 --- a/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7X256.ld +++ b/os/ports/GCC/ARM/AT91SAM7/ld/AT91SAM7X256.ld @@ -98,7 +98,8 @@ SECTIONS } PROVIDE(end = .); -_end = .; +_end = .; -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; +__heap_base__ = _end; +__heap_end__ = __ram_end__ - __stacks_total_size__; +__main_thread_stack_base__ = __ram_end__ - __stacks_total_size__; diff --git a/os/ports/GCC/ARM/LPC214x/ld/LPC2148.ld b/os/ports/GCC/ARM/LPC214x/ld/LPC2148.ld index 40683d14e..c94daa808 100644 --- a/os/ports/GCC/ARM/LPC214x/ld/LPC2148.ld +++ b/os/ports/GCC/ARM/LPC214x/ld/LPC2148.ld @@ -101,7 +101,8 @@ SECTIONS } PROVIDE(end = .); -_end = .; +_end = .; -__heap_base__ = _end; -__heap_end__ = __ram_end__ - __stacks_total_size__; +__heap_base__ = _end; +__heap_end__ = __ram_end__ - __stacks_total_size__; +__main_thread_stack_base__ = __ram_end__ - __stacks_total_size__; diff --git a/os/ports/GCC/ARM/chcore.h b/os/ports/GCC/ARM/chcore.h index 20727ce23..c2d2892cd 100644 --- a/os/ports/GCC/ARM/chcore.h +++ b/os/ports/GCC/ARM/chcore.h @@ -438,14 +438,10 @@ struct context { #ifdef THUMB #if CH_DBG_ENABLE_STACK_CHECK #define port_switch(ntp, otp) { \ - register Thread *_ntp asm ("r0") = (ntp); \ - register Thread *_otp asm ("r1") = (otp); \ - register char *sp asm ("sp"); \ - if (sp - sizeof(struct intctx) - sizeof(Thread) < (char *)_otp) \ - asm volatile ("mov r0, #0 \n\t" \ - "ldr r1, =chDbgPanic \n\t" \ - "bx r1"); \ - _port_switch_thumb(_ntp, _otp); \ + register struct intctx *r13 asm ("r13"); \ + if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ + chDbgPanic("stack overflow"); \ + _port_switch_thumb(ntp, otp); \ } #else /* !CH_DBG_ENABLE_STACK_CHECK */ #define port_switch(ntp, otp) _port_switch_thumb(ntp, otp) @@ -453,13 +449,10 @@ struct context { #else /* !THUMB */ #if CH_DBG_ENABLE_STACK_CHECK #define port_switch(ntp, otp) { \ - register Thread *_ntp asm ("r0") = (ntp); \ - register Thread *_otp asm ("r1") = (otp); \ - register char *sp asm ("sp"); \ - if (sp - sizeof(struct intctx) - sizeof(Thread) < (char *)_otp) \ - asm volatile ("mov r0, #0 \n\t" \ - "b chDbgPanic"); \ - _port_switch_arm(_ntp, _otp); \ + register struct intctx *r13 asm ("r13"); \ + if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ + chDbgPanic("stack overflow"); \ + _port_switch_arm(ntp, otp); \ } #else /* !CH_DBG_ENABLE_STACK_CHECK */ #define port_switch(ntp, otp) _port_switch_arm(ntp, otp) diff --git a/os/ports/GCC/ARMCMx/chcore_v6m.h b/os/ports/GCC/ARMCMx/chcore_v6m.h index c2142e46a..b98be1166 100644 --- a/os/ports/GCC/ARMCMx/chcore_v6m.h +++ b/os/ports/GCC/ARMCMx/chcore_v6m.h @@ -242,7 +242,7 @@ struct intctx { #define port_switch(ntp, otp) _port_switch(ntp, otp) #else #define port_switch(ntp, otp) { \ - register struct intctx *r13 asm ("r13"); \ + register struct intctx *r13 asm ("r13"); \ if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ chDbgPanic("stack overflow"); \ _port_switch(ntp, otp); \ diff --git a/os/ports/GCC/ARMCMx/chcore_v7m.h b/os/ports/GCC/ARMCMx/chcore_v7m.h index 5e2aea343..3710c2edf 100644 --- a/os/ports/GCC/ARMCMx/chcore_v7m.h +++ b/os/ports/GCC/ARMCMx/chcore_v7m.h @@ -328,7 +328,7 @@ struct intctx { #define port_switch(ntp, otp) _port_switch(ntp, otp) #else #define port_switch(ntp, otp) { \ - register struct intctx *r13 asm ("r13"); \ + register struct intctx *r13 asm ("r13"); \ if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ chDbgPanic("stack overflow"); \ _port_switch(ntp, otp); \ -- cgit v1.2.3