http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54067
Bug #: 54067
Summary: arm-none-eabi with -mapcs and attribute((interrupt))
generates wrong stack alignment
Classification: Unclassified
Product: gcc
Version: 4.7.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: translation
AssignedTo: [email protected]
ReportedBy: [email protected]
Created attachment 27853
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27853
simple code to reproduce error
If a function has __attribute__((interrupt("IRQ"))) set and is compiled with
arm-none-eabi and the option -mapcs, the generated prologue looks something
like
push {ip}
...
push {...}
...
sub sp, sp, ...
the first push {ip} is special when compiling with -mapcs and the function
attribute, but it seems this extra word is ignored when the stack is to be
aligned.
Thus when strd/ldrd instructions are generated accessing the stack you'll end
up in an alignment fault.