Running with gdb, it looks like the problem comes from the
ppc_closure.S file of the libffi/src/powerpc directory, at line 32 :

stfd %f1, 48(%r1)

I don't understand anything to powerpc assembly, but after a google
search, "stfd" means "store floating-point double". But the PPC405
doesn't have any FPU, so I guess that's why it throws an "illegal
instruction".

I've compiled again my cross toolchain with the "--with-float=soft"
option, hoping that it would emulate FPU instruction, but this
unfortunately doesn't help... I'm nevertheless not sure that this
option is the right one...

Any thoughts ? Is there a bug in libffi in that it doesn't support
powerpc CPU without FPU ?

Regards,
Patrick






On 5/8/07, Andrew Haley <[EMAIL PROTECTED]> wrote:
Patrick Olinet writes:
 > Hi there,
 >
 > I'm running an embedded platform based on a powerpc 405EP CPU and a
 > gcc 4.1.0 cross-toolchain. My initial problem was that gcj compiled
 > binaries crash at runtime when interpreting java bytecode ("Illegal
 > instruction" message).
 >
 > After many investigations, it looks like the problem comes from the
 > libffi library : I've run the libffi testsuite on my embedded paltform
 > and many of the tests show the same "Illegal instruction" message. For
 > instance, the "cls_uint" test crashes at the following line (from the
 > cls_uint.c file) :
 >
 > res = (*((cls_ret_uint)pcl))(2147483647);
 >
 > My knowledge about the powerpc architectures is very limited, but I've
 > seen mailing lists threads talking about "EABI" that I don't quite
 > understand but my intuition is that it could be related. For instance,
 > could it be that my cross toolchain is not compiled with the right
 > EABI (does this question make sense??) ?
 >
 > Any ideas or thoughts about this problem ?

Run it in gdb.  When gdb stops with SIGILL, do

x/i $pc

Andrew.

Reply via email to