Strange floating point problems on SH4 with gcc 4.1.0

Andrew de Quincey adq_dvb@lidskialf.net
Thu Jul 27 01:21:00 GMT 2006


Hi, I have been porting mozilla firefox to the SH4 platform. However, I have 
run into some horrible floating point problems.

details:
gcc 4.1.0
glibc 2.3.6
(built using crosstool)
firefox 1.5.0.4
linux kernel 2.6.11

Running on an STB7100 with SH4-202 processor core (yes it does have an FPU).

I have been trying to make a small test case to illustrate the problem.. but I 
cannot seem to manage it. It seems to be a prerequisite that I must have the 
massive mozilla XPCOM shared libraries loaded or something.

Anyway, I manged to get my test code down to:
int main()
{
//   printf("HELLO\n");
   int x = 20;
   float k = (float) x;
   NS_InitXPCOM2(nsnull, nsnull, nsnull);
   printf("THERE\n");
}

I also have debug prints inside NS_InitXPCOM2.

Basically if I leave the HELLO printf commented out, I do not see the debug in 
NS_InitXPCOM2(). Instead I get a "floating point exception".

If I uncomment it I *do* see the debug (althought it later gets another FP 
exception; this is the problem I'm really trying to solve).

If I comment out the call to NS_InitXPCOM2() it runs fine.

As far as I can make out it is NOT the NS_InitXPCOM2() itself which is failing 
since it outputs my debug if I have the first printf uncommented.

If I add more trace elsewhere the problem sort of shifts about... it sounds 
like some form of alignment problem to me.

Oh, I also tried creating my own shared library with an NS_InitXPCOM5() method 
and calling that instead... that worked fine.

Can anyone advise a way I can try and work out what is going on to provide a 
small example that _doesn't_ involve calling into mozilla XPCOM?

I can always provide the binaries and source if people want it.. but mozilla 
is _huge_.

Oh, my test file was compiled with:
sh4-unknown-linux-gnu-gcc -o TestXPC.o -c -O0 \
           -DMOZILLA_INTERNAL_API -DOSTYPE=\"Linux\" -DOSARCH=\"Linux\" \
           -I../../../../dist/include/xpconnect \
           -I../../../../dist/include/xpcom \
           -I../../../../dist/include/js \
           -I../../../../dist/include/nspr \
           -fPIC \
           /etv/branches/aminet130/scratch/amino-stb710x-mozilla/mozilla/js/src/xpconnect/tests/TestXPC.cpp

and linked with:
sh4-unknown-linux-gnu-gcc \
           -o TestXPC \
           TestXPC.o \
           -L../../../../dist/bin -lxpcom -lxpcom_core \
           -L../../../../dist/lib -lplds4 -lplc4 -lnspr4 \
           -lpthread -ldl  -ldl -lm -lsupc++



More information about the Gcc mailing list