From 8bc3685883cf735746d2cc1f232922a643b93c9a Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Fri, 19 Mar 2021 19:13:50 -0700 Subject: [PATCH] [llvm-jitlink] Scan input files for first object to determine triple. The previous logic would crash if the first input file was an archive rather than an object. --- llvm/tools/llvm-jitlink/llvm-jitlink.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp index 473afc5..24e934e 100644 --- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp @@ -1008,11 +1008,22 @@ Session::findSymbolInfo(StringRef SymbolName, Twine ErrorMsgStem) { static Triple getFirstFileTriple() { static Triple FirstTT = []() { assert(!InputFiles.empty() && "InputFiles can not be empty"); - auto ObjBuffer = - ExitOnErr(errorOrToExpected(MemoryBuffer::getFile(InputFiles.front()))); - auto Obj = ExitOnErr( - object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef())); - return Obj->makeTriple(); + for (auto InputFile : InputFiles) { + auto ObjBuffer = + ExitOnErr(errorOrToExpected(MemoryBuffer::getFile(InputFile))); + switch (identify_magic(ObjBuffer->getBuffer())) { + case file_magic::elf_relocatable: + case file_magic::macho_object: + case file_magic::coff_object: { + auto Obj = ExitOnErr( + object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef())); + return Obj->makeTriple(); + } + default: + break; + } + } + return Triple(); }(); return FirstTT; -- 2.7.4