I'm making XEN hypervisor being able to be built with ARM Compile 6 (6.6.3 in particular).
During the work, it was discovered a weird armclang compiler beahviour. When compiling a C file with only a data definition (no executable code, e.g. [1]), resulting object file causes the final link crash with the error:
Error: L6242E: Cannot link object built_in.o as its attributes are incompatible with the image attributes. ... A64 clashes with SoftVFP.
After some investigation, it was discovered that the faulty object file has both $IEEE1 and $IEEEX among its build attributes. While object files with text sections all have $IEEE1 attribute.
The effective command line in my case is as following:
armclang --target=aarch64-arm-none-eabi -march=armv8.1-a+nofp+nosimd -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes -Wdeclaration-after-statement -Wno-unused-local-typedefs -O1 -fno-omit-frame-pointer -nostdinc -fno-builtin -fno-common -Werror -Wredundant-decls -Wno-pointer-arith -Wvla -pipe -D__XEN__ -include /home/xtfs/DEV/xen-arm-ds6/xen/include/xen/config.h -nostdlibinc -nostdlib -Wno-unused-command-line-argument -include /home/xtfs/DEV/xen-arm-ds6/xen/include/asm/armds.h '-D__OBJECT_FILE__="thunderx.o"' -g -MMD -MF ./.thunderx.o.d -mcpu=generic -mgeneral-regs-only -DCONFIG_EARLY_PRINTK -DEARLY_PRINTK_INC=\"debug-scif.inc\" -DEARLY_PRINTK_BAUD= -DEARLY_UART_BASE_ADDRESS=0xe6e88000 -DEARLY_UART_REG_SHIFT= -I/home/xtfs/DEV/xen-arm-ds6/xen/include -fno-stack-protector -fno-exceptions -Wnested-externs -DGCC_HAS_VISIBILITY_ATTRIBUTE -c thunderx.c -o thunderx.o
The issue disappears if an empty function is added to the faulty file.
Any ideas on how to solve the issue with the command line options (without patching the code)?
View all questions in Arm Compilers forum