From: Lang Hames Date: Sat, 20 Mar 2021 02:13:50 +0000 (-0700) Subject: [llvm-jitlink] Scan input files for first object to determine triple. X-Git-Tag: llvmorg-14-init~11830 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8bc3685883cf735746d2cc1f232922a643b93c9a;p=platform%2Fupstream%2Fllvm.git [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. --- 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;