This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC 4.4 cross compiler and issue with __floatdidf


On Wed, 11 Mar 2009 00:57:53 +0100, "Vincent R." <forumer@smartmobili.com>
wrote:
> On Tue, 10 Mar 2009 23:29:46 +0100, "Vincent R."
<forumer@smartmobili.com>
> wrote:
>> On Tue, 10 Mar 2009 23:55:02 +0200, Kai Ruottu <kai.ruottu@wippies.com>
>> 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.

So I am still stuck with this mising symbol.
What I don't understand is the fact that __floatundidf is defined but not
__floatdidf.
If I look in gcc/config/arm/t-wince-pe here is what is declared for my
target:

LIB1ASMSRC = arm/lib1funcs.asm

LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX
_interwork_call_via_rX _clzsi2 _clzdi2 \
	_bb_init_func _lshrdi3 _ashrdi3 _ashldi3 \
	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
	_fixsfsi _fixunssfsi _floatdidf _floatdisf \
	_arm_fixunsdfsi

and I can see that 









Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]