This simple test case:

#include <stdio.h>

int ten = 10;

int main()
{
  printf ("%lld\n", 92233720368547758LL % ten);
  return 0;
}

returns

0

because (afaics) __moddi3 is miscompiled.

Breakpoint 4, __moddi3 (u=92233720368547758, v=10)
    at /home/aph/gcc/trunk/libgcc/../gcc/libgcc2.c:923
(gdb) fin
Run till exit from #0  __moddi3 (u=<value optimized out>, v=92233718306963466)
    at /home/aph/gcc/trunk/libgcc/../gcc/libgcc2.c:919
0x00008474 in main () at ppp.c:7
Value returned is $3 = 0

Recompiling libgcc with -O0 fixes the problem:

(gdb) 
(gdb) fin
Run till exit from #0  __moddi3 (u=92233720368547758, v=10)
    at /home/aph/gcc/trunk/libgcc/../gcc/libgcc2.c:879
0x000084a4 in main () at ppp.c:7
Value returned is $4 = 8

And recompiling just _moddi3.o fixes it again.


Target: arm-linux-gnueabi
Configured with: /home/aph/gcc/trunk/configure --with-system-zlib 
--enable-threads=posix --enable-nls --enable-__cxa_atexit --enable-clocale=gnu 
--enable-libstdcxx-debug --enable-mpfr --enable-checking=release 
--disable-multilib --disable-static arm-linux-gnueabi --disable-bootstrap 
--disable-sjlj-exceptions --prefix=/home/aph/gcc/install 
build_alias=arm-linux-gnueabi host_alias=arm-linux-gnueabi 
target_alias=arm-linux-gnueabi --enable-languages=c,c++,java --no-create 
--no-recursion


Andrew.

Reply via email to