This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos 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 toolchain with HW floating-point enabled


Hi Davide

Probably you have some files compiled with -mfloat-abi-soft and some
with -mfloat-abi=hard. They are not compatible. Try to compile all files
with same floating point flags.

Ilija

On 04.06.2013 12:41, Davide Pippa wrote:
> Hi!
>
> I tried to update ecos to latest cvs and rebuilding the whole rom, but
> I still have that problem.
> I was already using the GCC test release that you pointed me.
> What it seems to me is that I'm linking to the wrong version of libgcc
> anyway (a version not supporting hardware floating point), as the
> problems arise in libgcc (linking log points to bpapi, _divdi3,
> _udivdi3 functions):
>
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
> error: demo1.elf uses VFP register arguments,
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(bpabi.o)
> does not
> makefile:59: recipe for target `demo1.elf' failed
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
> failed to merge target specific data of file
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(bpabi.o)
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
> error: demo1.elf uses VFP register arguments,
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_divdi3.o)
> does not
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
> failed to merge target specific data of file
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_divdi3.o)
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
> error: demo1.elf uses VFP register arguments,
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_udivdi3.o)
> does not
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
> failed to merge target specific data of file
> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_udivdi3.o)
>
> demo1.elf only contains an object of mine (main.o), which is compiled
> with hardware floating point, as flags indicate:
>
> arm-eabi-g++ -I"H:/Works/Arm/PyIde/roms/04001_TWR-K70F120M/include"
> -O0 -Wall -Wa,-adhlns="main.o.lst" -fno-exceptions -fno-rtti -c
> -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-m4
> -mthumb -mfloat-abi=hard -mfpu=vfpv4-d16 -g3 -gdwarf-2 -o "main.o"
> "../main.cpp"
>
> I've seen there is many libgcc versions in the toolchain directory
> (gnuttols/arm-eabi/lib/gcc/), which should I pick?
> Is there some compiler flags to indicate which version to pick, or
> should I just copy files over the version that currently is being
> linked?
>
> Thanks!
>
> Davide
>
>
>
>
> 2013/4/6 Ilija Kocho <ilijak@siva.com.mk>:
>> Hi David.
>>
>> We have a GCC (test) release with FPU support for Cortex-M4F in eCos
>> gnutools. You shall find information for download and installation here.
>> http://ecos.sourceware.org/ml/ecos-discuss/2012-06/msg00047.html
>>
>> As this is still test release, your feedback will be appreciated.
>>
>> Ilija
>>
>> On 06.04.2013 12:23, Davide Pippa wrote:
>>> Hi!
>>>
>>> I've recently updated my ecos CVS, and made a new rom using the new hw
>>> floating point support (I'm compiling for TWR-K70F120M). The rom
>>> builds fine, but the application I used to work with complains during
>>> compilation:
>>>
>>> make all
>>> Building file: ../main.cpp
>>> Invoking: ARM devkitPro Windows GCC C++ Compiler
>>> arm-eabi-g++ -I"H:/Works/Arm/PyIde/roms/01009_TWR-K70F120M/include"
>>> -O0 -Wall -Wa,-adhlns="main.o.lst" -fno-exceptions -fno-rtti -c
>>> -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-m4
>>> -mthumb -mfloat-abi=hard -mfpu=vfpv4-d16 -g3 -gdwarf-2 -o "main.o"
>>> "../main.cpp"
>>> ../main.cpp: In function ‘void cyg_user_start()’:
>>> ../main.cpp:33:30: warning: deprecated conversion from string constant
>>> to ‘char*’ [-Wwrite-strings]
>>> ../main.cpp: In function ‘void main_thread_entry(cyg_addrword_t)’:
>>> ../main.cpp:80:87: warning: deprecated conversion from string constant
>>> to ‘char*’ [-Wwrite-strings]
>>> ../main.cpp: In function ‘void udpecho_thread_entry(void*)’:
>>> ../main.cpp:107:20: warning: unused variable ‘port’ [-Wunused-variable]
>>> ../main.cpp:110:9: warning: variable ‘j’ set but not used
>>> [-Wunused-but-set-variable]
>>> Finished building: ../main.cpp
>>>
>>> Building target: demo1.elf
>>> Invoking: ARM devkitPro Windows GCC C++ Linker
>>> arm-eabi-g++ -T"target.ld" -nostdlib
>>> -LH:/Works/Arm/PyIde/roms/01009_TWR-K70F120M/lib -Wl,-Map,demo1.map
>>> -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=vfpv4-d16 -g3 -gdwarf-2
>>> -o "demo1.elf"  ./main.o
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
>>> error: demo1.elf uses VFP register arguments,
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(bpabi.o)
>>> does not
>>> makefile:59: recipe for target `demo1.elf' failed
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
>>> failed to merge target specific data of file
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(bpabi.o)
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
>>> error: demo1.elf uses VFP register arguments,
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_divdi3.o)
>>> does not
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
>>> failed to merge target specific data of file
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_divdi3.o)
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
>>> error: demo1.elf uses VFP register arguments,
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_udivdi3.o)
>>> does not
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/../../../../arm-eabi/bin/ld:
>>> failed to merge target specific data of file
>>> /cygdrive/h/Works/Arm/PyIde/tools/gnutools/arm-eabi/bin/../lib/gcc/arm-eabi/4.6.3/libgcc.a(_udivdi3.o)
>>> collect2: ld returned 1 exit status
>>> make: *** [demo1.elf] Error 1
>>>
>>> The application is built with HW fpu enabled, but it seems that
>>> libgcc.a is not floating-point aware (sort-of?)... is there any new
>>> release of the 4.6.3 gcc toolchain built with floating point support?
>>> Or is there any guide to rebuild the 4.6.3 gcc toolchain myself?
>>>
>>> Thanks!
>>>
>>> Pyper.
>>>


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


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