On Tue, 10 Mar 2009 23:29:46 +0100, "Vincent R." <forumer@xxxxxxxxxxxxxxx> wrote: > 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. > I found why it's because of the following test : #ifdef L_arm_addsubdf3 ... #endif Now I need to find why L_arm_addsubdf3 is defined.