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

Reply via email to