[ELF2] Fix binaries so they actually run on FreeBSD.

Description

[ELF2] Fix binaries so they actually run on FreeBSD.

Since FreeBSD 4.1, the kernel expects binaries to be marked with
ELFOSABI_FREEBSD in the ELF header to exec() them. LLD unconditionally
sets OSABI to ELF_OSABINONE, and everything linked with it won't run
on FreeBSD (unless explicitly rebranded).

Example:
% ./aarch64-hello
ELF binary type "0" not known.
zsh: exec format error: ./aarch64-hello

FreeBSD could be modified to accept ELF_OSABINONE, but that would break all
existing binaries, so the kernel needs to support both ABINONE and ABIFREEBSD.
I plan to push this change in FreeBSD one day, which, unfortunately, is
not today. This code patches lld so it sets the header field correctly.

For completeness, the rationale of this change is explained in the FreeBSD
commit message, and it's apparently to pleasee binutils maintainers at the time.
https://svnweb.freebsd.org/base?view=revision&revision=59342

Differential Revision: http://reviews.llvm.org/D13140

Details

Committed
davideSep 24 2015, 6:59 PM
Differential Revision
D13140: [ELF2] Fix binaries so they actually run on FreeBSD.
Parents
rL248553: AMDGPU: Remove unused includes
Branches
Unknown
Tags
Unknown