On Tue, 10 Mar 2009 23:55:02 +0200, Kai Ruottu <kai.ruottu@xxxxxxxxxxx> wrote: > Kai Ruottu wrote: > >> Vincent R. wrote: >>> Hi, >>> >>> When compiling the following code with a gcc 4.4 cross-compiler >>> targetting >>> arm wince platform I get a problem with undefined reference __floatdidf >>> : >> >> This should mean a conversion routine from long int to double float >> and this routine is normally in libgcc... So a search with 'nm' >> would tell if it is there or not. > > A quick look in 'gcc/config/arm' told that the 'lib1funcs.asm' should > #include the 'ieee754-*.S' which has this routine. But there are two > conditions for the inclusion : > > #ifndef __symbian__ > #ifndef __ARM_ARCH_6M__ > #include "ieee754-df.S" > #include "ieee754-sf.S" > #include "bpabi.S" > #else /* __ARM_ARCH_6M__ */ > #include "bpabi-v6m.S" > #endif /* __ARM_ARCH_6M__ */ > #endif /* !__symbian__ */ > > Whether the WinCE target defines something like these will be left you > as a homework... When using nm with gcc-4.4: $ arm-mingw32ce-nm libgcc.a | grep float _floatdidf.o: _floatdisf.o: U __floatunsidf U __floatunsidf _floatdixf.o: _floatditf.o: _floatundisf.o: 00000000 T __floatundisf U __floatunsidf _floatundidf.o: 00000000 T __floatundidf U __floatunsidf _floatundixf.o: _floatunditf.o: 0000000c T __floatsisf 0000000c T __floatunsisf 0000000c T __floatsidf 0000000c T __floatunsidf with an old working version (4.1.2): 0000038c T __floatdidf 00000310 T __floatsidf 00000378 T __floatundidf 000002ec T __floatunsidf 00000200 T __floatdisf 000001d0 T __floatsisf 000001f0 T __floatundisf 000001c8 T __floatunsisf _floatdidf.o: _floatdisf.o: U __floatsidf U __floatsidf _floatdixf.o: _floatditf.o: 00000000 T __floatsisf 00000000 T __floatunsisf 00000000 T __floatsidf 00000000 T __floatunsidf and since __symbian__ nor __ARM_ARCH_6M__ are defined I suppose ieee754-*.S are included. >From what I see with old version __floatxxx were defined bur not with new compiler. Still investigating...