On Fri, May 28, 2004 at 07:19:35AM +0600, Alexander E. Patrakov wrote:
The CFLAGS in Makefile.target are bad for gcc 3.3.2. This is not a my
problem with my gcc, because it passes the "make check" testsuite except
some known errors in libstdc++, which cannot affect qemu.
The victim is the tcp_input function in slirp. When compiling with the
decault CFLAGS, for some reason all packets are dropped as having a
wrong TCP checksum. I tried debugging this by placing some debug printfs
in tcp_input.c file, but the problem disappeared after I inserted them.
I concluded that it is very strange and compiled this tcp_input.c file
without my debug statements, but with -O1 instead of -O2. The problem
went away.
gcc isn't supposed to change the semantics of
a program based on the optimization level.
nevertheless several cases are known where this
happened, and not seldom the bug was in gcc
testing the same opts with 3.3.3 or 3.4 will
show if gcc is to blame or not.