Re: GCC 4.4 cross compiler and issue with __floatdidf

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux