Hello, I've built two arm-elf compilers with gcc-4.2.2, both configurations are the same except build != host differs for mingw since we build both on Ubunutu linux. Mingw hosted canadian-cross: Configured with: ../gcc-4.2.2/configure --target=arm-elf --prefix=/proj/crossgcc/arm-elf-mingw --disable-nls --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-newlib --with-headers=../newlib-1.17.0/newlib/libc/include --disable-shared --disable-threads --disable-libssp --disable-__cxa_atexit --disable-libstdcxx-pch --build=x86_64-unknown-linux-gnu --host=i686-pc-mingw32 --enable-interwork --enable-multilib Thread model: single gcc version 4.2.2 (rt-labs rev.1728M) Linux hosted: Configured with: ../gcc-4.2.2/configure --target=arm-elf --prefix=/proj/crossgcc/arm-elf --disable-nls --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-newlib --with-headers=../newlib-1.17.0/newlib/libc/include --disable-shared --disable-threads --disable-libssp --disable-__cxa_atexit --disable-libstdcxx-pch --enable-interwork --enable-multilib Thread model: single gcc version 4.2.2 (rt-labs rev.1728M) In our unit-tests (that passes for both variants) we have the following isr that cause a difference in output, other functions differ as well. I've noticed that static variables and functions seem to be used when it appears. static void isr1 (void * arg) { /* Clear high priority IRQ */ pSIC->soft_clear = BIT(0); if (isr0run == 1) isrOutOfOrder = 1; isr1run = 1; } I've used "arm-elf-objdump -d isr.o > dump" -> to produce the following. Mingw output : Disassembly of section .text.isr1: 00000000 <isr1>: 0: 23ca movs r3, #202 2: 061b lsls r3, r3, #24 4: 2201 movs r2, #1 6: 615a str r2, [r3, #20] 8: 4b04 ldr r3, [pc, #16] (1c <isr1+0x1c>) a: 681b ldr r3, [r3, #0] c: 2b01 cmp r3, #1 e: d101 bne.n 14 <isr1+0x14> 10: 4b03 ldr r3, [pc, #12] (20 <isr1+0x20>) 12: 601a str r2, [r3, #0] 14: 4b03 ldr r3, [pc, #12] (24 <isr1+0x24>) 16: 601a str r2, [r3, #0] 18: 4770 bx lr 1a: 46c0 nop (mov r8, r8) ... Linux output : Disassembly of section .text.isr1: 00000000 <isr1>: 0: 4b05 ldr r3, [pc, #20] (18 <isr1+0x18>) 2: 2201 movs r2, #1 4: 615a str r2, [r3, #20] 6: 4b05 ldr r3, [pc, #20] (1c <isr1+0x1c>) 8: 681b ldr r3, [r3, #0] a: 2b01 cmp r3, #1 c: d101 bne.n 12 <isr1+0x12> e: 4b04 ldr r3, [pc, #16] (20 <isr1+0x20>) 10: 601a str r2, [r3, #0] 12: 4b04 ldr r3, [pc, #16] (24 <isr1+0x24>) 14: 601a str r2, [r3, #0] 16: 4770 bx lr 18: ca000000 .word 0xca000000 ... Is there a sane explanation why they differ? When compiling without Os the output is the same. I would prefer that they didn't differ even though optimizing is used. Regards Andreas __________ Information from ESET NOD32 Antivirus, version of virus signature database 3983 (20090402) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3984 (20090402) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com