diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF.cpp @@ -52,6 +52,22 @@ } } + if (Data[ELF::EI_DATA] == ELF::ELFDATA2MSB) { + if (Data[ELF::EI_CLASS] == ELF::ELFCLASS64) { + if (auto File = llvm::object::ELF64BEFile::create(Buffer)) { + return File->getHeader().e_machine; + } else { + return File.takeError(); + } + } else if (Data[ELF::EI_CLASS] == ELF::ELFCLASS32) { + if (auto File = llvm::object::ELF32BEFile::create(Buffer)) { + return File->getHeader().e_machine; + } else { + return File.takeError(); + } + } + } + return ELF::EM_NONE; } diff --git a/llvm/test/ExecutionEngine/JITLink/ppc64/ppc64-relocs.s b/llvm/test/ExecutionEngine/JITLink/ppc64/ppc64-relocs.s --- a/llvm/test/ExecutionEngine/JITLink/ppc64/ppc64-relocs.s +++ b/llvm/test/ExecutionEngine/JITLink/ppc64/ppc64-relocs.s @@ -2,7 +2,7 @@ # RUN: llvm-jitlink -abs external_var=0xffff0000 -abs puts=0xffff6400 -abs \ # RUN: foo=0xffff8800 -noexec %t # RUN: llvm-mc -triple=powerpc64-unknown-linux-gnu -filetype=obj -o %t %s -# RUN: not llvm-jitlink -abs external_var=0xffff0000 -abs puts=0xffff6400 -abs \ +# RUN: llvm-jitlink -abs external_var=0xffff0000 -abs puts=0xffff6400 -abs \ # RUN: foo=0xffff8800 -noexec %t # # Check typical relocations involving external function call, external variable