[Bug c/41999] New: Bug in generation of interrupt function code for ARM processor
hans dot buchmann at fhnw dot ch
gcc-bugzilla@gcc.gnu.org
Tue Nov 10 21:06:00 GMT 2009
Compiling the code:
/* similar bug 27859 */
static unsigned cnt=0;
extern void external(unsigned);
__attribute__((interrupt ("IRQ"))) void irq_() ;
void irq_()
{
external(cnt);
cnt=2*cnt;
external(cnt);
}
with
arm-none-eabi-gcc -c ../src/trap-bug.c -Wall -O2 -S -o trap-bug.s
results in:
irq_:
@ Interrupt Service Routine.
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
sub lr, lr, #4
stmfd sp!, {r0, r1, r2, r3, r4, ip, lr}
ldr r4, .L3
sub sp, sp, #4 <----------- why this sub ?
ldr r0, [r4, #0]
bl external
ldr r0, [r4, #0]
mov r3, r0, asl #1
mov r0, r3
str r3, [r4, #0]
bl external
ldmfd sp!, {r0, r1, r2, r3, r4, ip, pc}^
arm-none-eabi-gcc -v
Using built-in specs.
Target: arm-none-eabi
Configured with: /scratch/julian/2009q3-respin-eabi-lite/src/gcc-4.4/configure
--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-eabi
--enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch
--enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld
--with-specs='%{O2:%{!fno-remove-local-statics: -fremove-local-statics}}
%{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}'
--enable-languages=c,c++ --disable-shared --disable-lto --with-newlib
--with-pkgversion='Sourcery G++ Lite 2009q3-68'
--with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls
--prefix=/opt/codesourcery --with-headers=yes
--with-sysroot=/opt/codesourcery/arm-none-eabi
--with-build-sysroot=/scratch/julian/2009q3-respin-eabi-lite/install/arm-none-eabi
--with-gmp=/scratch/julian/2009q3-respin-eabi-lite/obj/host-libs-2009q3-68-arm-none-eabi-i686-pc-linux-gnu/usr
--with-mpfr=/scratch/julian/2009q3-respin-eabi-lite/obj/host-libs-2009q3-68-arm-none-eabi-i686-pc-linux-gnu/usr
--with-ppl=/scratch/julian/2009q3-respin-eabi-lite/obj/host-libs-2009q3-68-arm-none-eabi-i686-pc-linux-gnu/usr
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--with-cloog=/scratch/julian/2009q3-respin-eabi-lite/obj/host-libs-2009q3-68-arm-none-eabi-i686-pc-linux-gnu/usr
--disable-libgomp --enable-poison-system-directories
--with-build-time-tools=/scratch/julian/2009q3-respin-eabi-lite/install/arm-none-eabi/bin
--with-build-time-tools=/scratch/julian/2009q3-respin-eabi-lite/install/arm-none-eabi/bin
Thread model: single
gcc version 4.4.1 (Sourcery G++ Lite 2009q3-68)
Some remarks:
- The bug seems to be similar to bug 27859
- compiling with -O0 results in a similar behavior
Kind regards
Hans Buchmann
--
Summary: Bug in generation of interrupt function code for ARM
processor
Product: gcc
Version: 4.4.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hans dot buchmann at fhnw dot ch
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: arm-none-eabi
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41999
More information about the Gcc-bugs
mailing list