[Clang][Driver] Pass through the --be8 endian flag to linker in BareMetal driver For Arm.
When linking a big-endian image for Arm, clang has to select between BE8 and BE32 formats. The default is dependent on the selected target architecture. For ARMv6 and later architectures the default is BE8, for older architectures the default is BE32. For BE8 and BE32, compiler outputs a big endian ELF relocatable object file with the instructions and data both big endian. The difference is that at link time, for BE8 a linker must endian reverse the instructions to little endian. For BE8, the clang has to pass --be8 to the linker for Arm. At the moment clang is not passing the --be8 flag to linker for the baremetal target architectures above ArmV6 for Arm. This patch passes through --be8 and -BE or EL to the linker, taking into account the target and the -mbig-endian and -mlittle-endian flag. Also there are few more changes in the baremetal driver so that the code can cope with AArch64 being big-endian as well. Reviewed By: michaelplatings, MaskRay Differential Revision: https://reviews.llvm.org/D154786
Loading
Please sign in to comment