From cfb51f54ba8033a507a985763f0e7fc1b9b6d69f Mon Sep 17 00:00:00 2001 From: Alexei Starovoitov Date: Fri, 15 Jul 2016 22:27:55 +0000 Subject: [PATCH] BPF: Use official ELF e_machine value The same value for EM_BPF is being propagated to glibc, elfutils, and binutils. Signed-off-by: Richard Henderson Signed-off-by: Alexei Starovoitov llvm-svn: 275633 --- llvm/include/llvm/Object/ELFObjectFile.h | 5 +++++ llvm/include/llvm/Support/ELF.h | 6 ++++++ llvm/include/llvm/Support/ELFRelocs/BPF.def | 9 +++++++++ llvm/lib/Object/ELF.cpp | 6 ++++++ llvm/lib/ObjectYAML/ELFYAML.cpp | 4 ++++ llvm/lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp | 2 +- llvm/tools/llvm-objdump/llvm-objdump.cpp | 1 + llvm/tools/llvm-readobj/ELFDumper.cpp | 1 + 8 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 llvm/include/llvm/Support/ELFRelocs/BPF.def diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index 6dcd2d486813..07c6364a6894 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -886,6 +886,8 @@ StringRef ELFObjectFile::getFileFormatName() const { return (EF.getHeader()->e_ident[ELF::EI_OSABI] == ELF::ELFOSABI_AMDGPU_HSA && IsLittleEndian) ? "ELF64-amdgpu-hsacobj" : "ELF64-amdgpu"; + case ELF::EM_BPF: + return "ELF64-BPF"; default: return "ELF64-unknown"; } @@ -948,6 +950,9 @@ unsigned ELFObjectFile::getArch() const { && IsLittleEndian) ? Triple::amdgcn : Triple::UnknownArch; + case ELF::EM_BPF: + return IsLittleEndian ? Triple::bpfel : Triple::bpfeb; + default: return Triple::UnknownArch; } diff --git a/llvm/include/llvm/Support/ELF.h b/llvm/include/llvm/Support/ELF.h index 4da320be1697..70b9daab8360 100644 --- a/llvm/include/llvm/Support/ELF.h +++ b/llvm/include/llvm/Support/ELF.h @@ -311,6 +311,7 @@ enum { EM_CSR_KALIMBA = 219, // CSR Kalimba architecture family EM_AMDGPU = 224, // AMD GPU architecture EM_LANAI = 244, // Lanai 32-bit processor + EM_BPF = 247, // Linux kernel bpf virtual machine // A request has been made to the maintainer of the official registry for // such numbers for an official value for WebAssembly. As soon as one is @@ -616,6 +617,11 @@ enum { #include "ELFRelocs/AMDGPU.def" }; +// ELF Relocation types for BPF +enum { +#include "ELFRelocs/BPF.def" +}; + #undef ELF_RELOC // Section header. diff --git a/llvm/include/llvm/Support/ELFRelocs/BPF.def b/llvm/include/llvm/Support/ELFRelocs/BPF.def new file mode 100644 index 000000000000..868974d683c7 --- /dev/null +++ b/llvm/include/llvm/Support/ELFRelocs/BPF.def @@ -0,0 +1,9 @@ +#ifndef ELF_RELOC +#error "ELF_RELOC must be defined" +#endif + +// No relocation +ELF_RELOC(R_BPF_NONE, 0) +// Map index in "maps" section to file descriptor +// within ld_64 instruction. +ELF_RELOC(R_BPF_MAP_FD, 1) diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp index 4002eb7b4593..2dde18a24280 100644 --- a/llvm/lib/Object/ELF.cpp +++ b/llvm/lib/Object/ELF.cpp @@ -111,6 +111,12 @@ StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) { default: break; } + case ELF::EM_BPF: + switch (Type) { +#include "llvm/Support/ELFRelocs/BPF.def" + default: + break; + } break; default: break; diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp index 521e2375d087..2137eee4752f 100644 --- a/llvm/lib/ObjectYAML/ELFYAML.cpp +++ b/llvm/lib/ObjectYAML/ELFYAML.cpp @@ -195,6 +195,7 @@ ScalarEnumerationTraits::enumeration(IO &IO, ECase(EM_56800EX) ECase(EM_AMDGPU) ECase(EM_LANAI) + ECase(EM_BPF) #undef ECase } @@ -534,6 +535,9 @@ void ScalarEnumerationTraits::enumeration( case ELF::EM_AMDGPU: #include "llvm/Support/ELFRelocs/AMDGPU.def" break; + case ELF::EM_BPF: +#include "llvm/Support/ELFRelocs/BPF.def" + break; default: llvm_unreachable("Unsupported architecture"); } diff --git a/llvm/lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp b/llvm/lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp index 115f01006ca4..4b92e3eb019b 100644 --- a/llvm/lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp +++ b/llvm/lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp @@ -28,7 +28,7 @@ protected: } BPFELFObjectWriter::BPFELFObjectWriter(uint8_t OSABI) - : MCELFObjectTargetWriter(/*Is64Bit*/ true, OSABI, ELF::EM_NONE, + : MCELFObjectTargetWriter(/*Is64Bit*/ true, OSABI, ELF::EM_BPF, /*HasRelocationAddend*/ false) {} BPFELFObjectWriter::~BPFELFObjectWriter() {} diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 8414239cb506..ed55c918b58a 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -589,6 +589,7 @@ static std::error_code getRelocationValueString(const ELFObjectFile *Obj, case ELF::EM_ARM: case ELF::EM_HEXAGON: case ELF::EM_MIPS: + case ELF::EM_BPF: res = Target; break; case ELF::EM_WEBASSEMBLY: diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index 84e368e7aa36..06fbe8d3fccb 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -956,6 +956,7 @@ static const EnumEntry ElfMachineType[] = { ENUM_ENT(EM_AMDGPU, "EM_AMDGPU"), ENUM_ENT(EM_WEBASSEMBLY, "EM_WEBASSEMBLY"), ENUM_ENT(EM_LANAI, "EM_LANAI"), + ENUM_ENT(EM_BPF, "EM_BPF"), }; static const EnumEntry ElfSymbolBindings[] = {