14.2.3. Source object has EABI version 4, but target has EABI version 0
- 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 0What does that mean, and how can I fix that?
- "EABI version 0" means the
"apcs-gnu"ABI, while "EABI version 4" is the
All U-Boot ARM sources are built with "-mapcs-gnu" option set in
"cpu/arm, while libgcc.a modules are built in
"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 respective
config.mkfiles 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|