Microejruntime.a uses VFP register arguments, gcc/RTOSDemo.axf does not

Hi,

I built a platform using the architecture flopi4G25 v7.12.0 (CM4hardfp_GCC48).
I am now trying to link my firmware but I have the following error.

arm-none-eabi-ld: error: microej/lib/microejruntime.a(sni_vm_startup_greenthread.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(sni_vm_startup_greenthread.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(MJVM_MONITOR_intern.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(MJVM_MONITOR_intern.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(VMCOREMicroJvm__91.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(VMCOREMicroJvm__91.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(com_is2t_allocator_BestFitAllocator.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(com_is2t_allocator_BestFitAllocator.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(com_is2t_microjvm_mowana_VMTask.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(com_is2t_microjvm_mowana_VMTask.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(com_ist_allocator_SimpleAllocator.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(com_ist_allocator_SimpleAllocator.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(iceTea_lang_SystemOut.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(iceTea_lang_SystemOut.o)
arm-none-eabi-ld: error: microej/lib/microejruntime.a(iceTea_lang_SystemOutMicroJvm.o) uses VFP register arguments, gcc/RTOSDemo.axf does not
arm-none-eabi-ld: failed to merge target specific data of file microej/lib/microejruntime.a(iceTea_lang_SystemOutMicroJvm.o)

I think I implemented the LL APIs that were needed. The target is a Cortex-M3 CPU core.

What could be the issue?

Hi @medhi.j,

Can you share the full linker command line ?

Here it is:

arm-none-eabi-ld -T standalone.ld --entry ResetISR -Map gcc/out.map -o gcc/RTOSDemo.axf --start-group gcc/startup.o gcc/main.o gcc/list.o gcc/queue.o gcc/tasks.o gcc/port.o gcc/heap_1.o gcc/BlockQ.o gcc/PollQ.o gcc/integer.o gcc/semtest.o gcc/osram96x16.o gcc/LLBSP.o gcc/LLMJVM_stub.o hw_include/libdriver.a microej/lib/microejruntime.a microej/lib/microejapp.o /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/thumb/libnosys.a /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/thumb/libm.a /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/thumb/libc.a /usr/lib/gcc/arm-none-eabi/6.3.1/thumb/libgcc.a --end-group

You are trying to link a Board Support Package compiled for ARM Cortex-M3 with an architecture file microejruntime.a compiled for ARM Cortex-M4.

The errors thrown by the linker clearly indicate a mismatch on the floating point convention. The reason is that ARM Cortex-M4 architecture is compiled using the hardfp floating point convention call, while the ARM Cortex-M3 BSP object files are compiled using softfp floating point convention.

Please have a look to https://docs.microej.com/en/latest/PlatformDeveloperGuide/appendix/toolchain.html for more details on MicroEJ Architecture compilation options.

So you have to use the MicroEJ Architecture for ARM Cortex-M3 (flopi3G24) instead.

(please note that this architecture is no longer available for evaluation, you can contact MicroEJ support to get it).

1 Like