[llvm] 8bc3685 - [llvm-jitlink] Scan input files for first object to determine triple.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 19 19:24:17 PDT 2021


Author: Lang Hames
Date: 2021-03-19T19:24:10-07:00
New Revision: 8bc3685883cf735746d2cc1f232922a643b93c9a

URL: https://github.com/llvm/llvm-project/commit/8bc3685883cf735746d2cc1f232922a643b93c9a
DIFF: https://github.com/llvm/llvm-project/commit/8bc3685883cf735746d2cc1f232922a643b93c9a.diff

LOG: [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.

Added: 
    

Modified: 
    llvm/tools/llvm-jitlink/llvm-jitlink.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index 473afc5f47e7..24e934e20306 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;


        


More information about the llvm-commits mailing list