public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libffi/40242]  New: unsupported asm instructions in libffi/src/arm/sysv.S
@ 2009-05-25 13:51 mkl at pengutronix dot de
  2009-05-27  9:50 ` [Bug libffi/40242] " ramana at gcc dot gnu dot org
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: mkl at pengutronix dot de @ 2009-05-25 13:51 UTC (permalink / raw)
  To: gcc-bugs

Hello,

during cross compilation of gcc, the libffi build for the target breaks with
this error message:

libtool: compile:  /home/frogger/pengutronix/toolchain/libffi/build/./gcc/xgcc
-B/home/frogger/pengutronix/toolchain/libffi/build/./gcc/
-B/usr/local/arm-1136jfs-linux-gnueabi/bin/
-B/usr/local/arm-1136jfs-linux-gnueabi/lib/ -isystem
/usr/local/arm-1136jfs-linux-gnueabi/include -isystem
/usr/local/arm-1136jfs-linux-gnueabi/sys-include -I.
-I../../../gcc-4.4.0/libffi/include -Iinclude -I../../../gcc-4.4.0/libffi/src
-g -O2 -c ../../../gcc-4.4.0/libffi/src/arm/sysv.S  -fPIC -DPIC -o
src/arm/.libs/sysv.o
../../../gcc-4.4.0/libffi/src/arm/sysv.S: Assembler messages:
../../../gcc-4.4.0/libffi/src/arm/sysv.S:202: Error: selected processor does
not support `stfeqs f0,[r2]'
../../../gcc-4.4.0/libffi/src/arm/sysv.S:207: Error: selected processor does
not support `stfeqd f0,[r2]'
../../../gcc-4.4.0/libffi/src/arm/sysv.S:282: Error: selected processor does
not support `ldfs f0,[sp]'
../../../gcc-4.4.0/libffi/src/arm/sysv.S:285: Error: selected processor does
not support `ldfd f0,[sp]'
../../../gcc-4.4.0/libffi/src/arm/sysv.S:288: Error: selected processor does
not support `ldfd f0,[sp]'

the offending code is:

#ifndef __SOFTFP__
        beq     LSYM(Lepilogue)

@ return FLOAT
        cmp     r3, #FFI_TYPE_FLOAT
        stfeqs  f0, [r2]
        beq     LSYM(Lepilogue)

@ return DOUBLE or LONGDOUBLE
        cmp     r3, #FFI_TYPE_DOUBLE
        stfeqd  f0, [r2]
#endif


gcc is configured this way:

../gcc-4.4.0/configure --enable-languages=c,c++,java
--target=arm-1136jfs-linux-gnueabi
--with-mpfr=/home/frogger/pengutronix/toolchain/OSELAS.Toolchain-trunk/platform-arm-v4t-linux-gnueabi-gcc-4.4.0-glibc-2.9-binutils-2.19.1-kernel-2.6.29-sanitized/sysroot-host
--with-gmp=/home/frogger/pengutronix/toolchain/OSELAS.Toolchain-trunk/platform-arm-v4t-linux-gnueabi-gcc-4.4.0-glibc-2.9-binutils-2.19.1-kernel-2.6.29-sanitized/sysroot-host
--with-float=softfp --with-fpu=vfp  --with-cpu=arm1136jf-s
--with-sysroot=/opt/OSELAS.Toolchain-1.99.3/arm-1136jfs-linux-gnueabi/gcc-4.3.2-glibc-2.8-binutils-2.19-kernel-2.6.27-sanitized/sysroot-arm-1136jfs-linux-gnueabi

I.e. as an arm-eabi target, --with-fpu=vfp and --with-float=softfp. Which means
floats are passed in integer registers, but in function the compiler generates
floating point instructions, the preprocessor doesn't define a "__SOFTFP__"
symbol.

If configuring the compiler with "--with-float=soft" it will pass floats in
integer registers and it will generate softfloat emulation code. In this case
the preprocessor defines "__SOFTFP__".

In both variants the function calling convention is the same, but in one case
we have the __SOFTFP__ symbol in the other not.

libffi changes it's behaviour depending on this symbol, which is IMHO not
correct.

I've tested some combinations, this is the summary of
(echo | arm-v4t-linux-gnueabi-cpp -dM -mfloat-abi=XXX -mfpu=YYY| egrep -i
'vfp|fp|soft|hard|float'):

-mfloat-abi=soft   -mfpu=vfp    __SOFTFP__ __VFP_FP__
-mfloat-abi=softfp -mfpu=vfp               __VFP_FP__
-mfloat-abi=hard   -mfpu=vfp               __VFP_FP__ (sorry, unimplemented)

-mfloat-abi=soft   -mfpu=fpa    __SOFTFP__
-mfloat-abi=softfp -mfpu=fpa
-mfloat-abi=hard   -mfpu=fpa

I'm not sure which of these combinations makes sense, or are actually used, the
3rd one seems not to be implemented, though. We at pengutronix use usually 1.
and 2. In some weird projects 4. and 6. but not with the current gcc.

This table shows that it's not possible to distinguish between the "hard" and
"softfp" case, a diff off the preprocessor's output shows no difference in the
symbols tough. On the upside the vfp-hard case seems not to be implemented.

So the question is which is the correct symbol for libffi?

cheers, Marc


-- 
           Summary: unsupported asm instructions in libffi/src/arm/sysv.S
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libffi
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: mkl at pengutronix dot de
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: arm-1136jfs-linux-gnueabi


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40242


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2009-12-10 15:18 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-05-25 13:51 [Bug libffi/40242] New: unsupported asm instructions in libffi/src/arm/sysv.S mkl at pengutronix dot de
2009-05-27  9:50 ` [Bug libffi/40242] " ramana at gcc dot gnu dot org
2009-05-29  2:53 ` pinskia at gcc dot gnu dot org
2009-05-29  8:22 ` mkl at pengutronix dot de
2009-06-12 13:13 ` ramana at gcc dot gnu dot org
2009-06-22 10:09 ` ramana at gcc dot gnu dot org
2009-08-03  8:32 ` ramana at gcc dot gnu dot org
2009-08-03  8:33 ` ramana at gcc dot gnu dot org
2009-09-23 12:41 ` ramana at gcc dot gnu dot org
2009-09-23 14:51 ` doko at gcc dot gnu dot org
2009-09-23 15:08 ` doko at gcc dot gnu dot org
2009-09-23 15:12 ` doko at gcc dot gnu dot org
2009-11-24 21:12 ` dwitte at mozilla dot com
2009-12-10 15:18 ` ramana at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).