We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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)?