ARM7TDMI: gcc stack corruption workaround.
authorarighi <arighi@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 18 May 2010 12:22:06 +0000 (12:22 +0000)
committerarighi <arighi@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 18 May 2010 12:22:06 +0000 (12:22 +0000)
commit8e10a209b0401d9393f4f6418bdf1fec4a875a24
tree2710c33936df6707ac2b31ded386dcbd1d1baec1
parent4908cc78244f414b58c35e8015ec19e1a72613c6
ARM7TDMI: gcc stack corruption workaround.

GCC corrupts the stack pointer and the frame pointer when calling
functions with at least one parameter inside ISR functions, declared
with __attribute__((interrupt)):

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41999

As a workaround, we redefine all the ISRs to call only a single
"void isr(void)" function. In this way, inside the actual isr() we can
use any function call as usual.

NOTE: this is inefficient, because it forces a totally unnecessary
additional function call, but it is a reliable way to avoid the
propagation of this bug to any project or architecture port that defines
interrupt routines.

When the bug will be fixed we will add an appropriate #ifdef to apply
the workaround only when old versions of gcc are used.

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3708 38d2e660-2303-0410-9eaa-f027e97ec537
bertos/cpu/irq.h