[llvm-objcopy]Add support for *-freebsd output formats
GNU objcopy can support output formats like elf32-i386-freebsd and
elf64-x86-64-freebsd. The only difference from their regular non-freebsd
counterparts that I have observed is that the freebsd versions set the
OS/ABI field to ELFOSABI_FREEBSD. This patch sets the OS/ABI field
according based on the format whenever --output-format is specified.
Reviewed by: rupprecht, grimar
Differential Revision: https://reviews.llvm.org/D59645
llvm-svn: 356737
diff --git a/llvm/tools/llvm-objcopy/CopyConfig.cpp b/llvm/tools/llvm-objcopy/CopyConfig.cpp
index dd3fa3e..bc2b384 100644
--- a/llvm/tools/llvm-objcopy/CopyConfig.cpp
+++ b/llvm/tools/llvm-objcopy/CopyConfig.cpp
@@ -282,14 +282,14 @@
}
static const StringMap<MachineInfo> ArchMap{
- // Name, {EMachine, 64bit, LittleEndian}
- {"aarch64", {ELF::EM_AARCH64, true, true}},
- {"arm", {ELF::EM_ARM, false, true}},
- {"i386", {ELF::EM_386, false, true}},
- {"i386:x86-64", {ELF::EM_X86_64, true, true}},
- {"powerpc:common64", {ELF::EM_PPC64, true, true}},
- {"sparc", {ELF::EM_SPARC, false, true}},
- {"x86-64", {ELF::EM_X86_64, true, true}},
+ // Name, {EMachine, OS/ABI, 64bit, LittleEndian}
+ {"aarch64", {ELF::EM_AARCH64, ELF::ELFOSABI_NONE, true, true}},
+ {"arm", {ELF::EM_ARM, ELF::ELFOSABI_NONE, false, true}},
+ {"i386", {ELF::EM_386, ELF::ELFOSABI_NONE, false, true}},
+ {"i386:x86-64", {ELF::EM_X86_64, ELF::ELFOSABI_NONE, true, true}},
+ {"powerpc:common64", {ELF::EM_PPC64, ELF::ELFOSABI_NONE, true, true}},
+ {"sparc", {ELF::EM_SPARC, ELF::ELFOSABI_NONE, false, true}},
+ {"x86-64", {ELF::EM_X86_64, ELF::ELFOSABI_NONE, true, true}},
};
static Expected<const MachineInfo &> getMachineInfo(StringRef Arch) {
@@ -301,12 +301,15 @@
}
static const StringMap<MachineInfo> OutputFormatMap{
- // Name, {EMachine, 64bit, LittleEndian}
- {"elf32-i386", {ELF::EM_386, false, true}},
- {"elf32-powerpcle", {ELF::EM_PPC, false, true}},
- {"elf32-x86-64", {ELF::EM_X86_64, false, true}},
- {"elf64-powerpcle", {ELF::EM_PPC64, true, true}},
- {"elf64-x86-64", {ELF::EM_X86_64, true, true}},
+ // Name, {EMachine, OSABI, 64bit, LittleEndian}
+ {"elf32-i386", {ELF::EM_386, ELF::ELFOSABI_NONE, false, true}},
+ {"elf32-i386-freebsd", {ELF::EM_386, ELF::ELFOSABI_FREEBSD, false, true}},
+ {"elf32-powerpcle", {ELF::EM_PPC, ELF::ELFOSABI_NONE, false, true}},
+ {"elf32-x86-64", {ELF::EM_X86_64, ELF::ELFOSABI_NONE, false, true}},
+ {"elf64-powerpcle", {ELF::EM_PPC64, ELF::ELFOSABI_NONE, true, true}},
+ {"elf64-x86-64", {ELF::EM_X86_64, ELF::ELFOSABI_NONE, true, true}},
+ {"elf64-x86-64-freebsd",
+ {ELF::EM_X86_64, ELF::ELFOSABI_FREEBSD, true, true}},
};
static Expected<const MachineInfo &>