14.2.3. Source object has EABI version 4, but target has EABI version 0
- Question:
- When trying to build U-Boot with an EABI compliant
tool chain, I get such error messages:
arm-ld: ERROR: Source object ... has EABI version 4, but target ... has EABI version 0
What does that mean, and how can I fix that?
- Answer:
- "EABI version 0" means the
"apcs-gnu"
ABI, while "EABI version 4" is the"aapcs-linux"
ABI, aka"gnueabi"
.
All U-Boot ARM sources are built with "-mapcs-gnu" option set in"cpu/arm
, while libgcc.a modules are built in/config.mk" "gnueabi"
format, which is for example the ARM GCC default in ELDK Release 4.2.
So the real problem is compatibility between toolchain ABI and U-Boot ARM ABI. In the Linux kernel there is a special kernel config option for EABI-enabled tool chains (CONFIG_AEABI), which enables special pieces of code in ARM assembler modules. We could follow this approach, reworking existing assembler sources and respectiveconfig.mk
files in U-Boot.
Alternatively, the tool chain could provide a separate version of libgcc.a built with old ABI. This could be done using the multilib approach. The advantage here is that no U-boot changes will be required.
14.2.2. Relocation cannot be done when using -mrelocatable | 1. Abstract | 14.2.4. U-Boot crashes after relocation to RAM | |||
Prev | Home | Next | |||