This is a copy&paste block from the squeak-dev mailinglist: <CUT> Hi, there has been a open problem with all GCC 3.x on Linux x86 for quite a long time. If you run configure the double order is not determined correctly. So you still have to set #define DOUBLE_WORD_ORDER 1 manually in the automatically created config.h. Otherwise Squeak will produce later a lot of float errors and break down quickly. Responsible for the detection of the double order is the AC_C_DOUBLE_ORDER macro used in the configure script. This macro is defined in acinclude.m4. It tries to detect the double order using the following test program: main() { double d = 1.0; return *(int*)&d == 0; } If you compile it with "gcc -g -O2" as it is normal within configure scripts on Linux, the program does not yield the desired results when using GCC 3.x. This is because of the "-O2" optimizing option, which seems to have a different behavior since GCC 3.0. The reason seems to be a mix of options that -O2 stands for. If you, for example, provide "-fno-strict-aliasing" or "-fno-schedule-insns2" in addition to "-O2", then the result is the originally intended. But only providing the two complementary options without "-O2" is not enough to reproduce the strange behavior that "-O2" alone leads to. However, the problem follows from the double*-to-int*-cast, because a pointer to an 8-byte-value is cast to a 4-byte-value. Such a cast has actually no defined behavior. So the result can change at different optimization levels. </CUT> Reproducible: Always Steps to Reproduce: 1. emerge squeak 2. run squeak Actual Results: You will see that some title bars in squeak remain black after starting up. A few secondes later squeak will crash. Expected Results: stay alive :)
I checked to source build again and the DOUBLE_WORD_ORDER is set correctly. My squeak still does not working but this has nothing do with this bug anymore.