[llvm] r373966 - [llvm-lipo] Relax the check of the specified input file architecture

Alexander Shaposhnikov via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 7 14:14:23 PDT 2019


Author: alexshap
Date: Mon Oct  7 14:14:22 2019
New Revision: 373966

URL: http://llvm.org/viewvc/llvm-project?rev=373966&view=rev
Log:
[llvm-lipo] Relax the check of the specified input file architecture

cctools lipo only compares the cputypes when it verifies that
the specified (via -arch) input file and the architecture match.
This diff adjusts the behavior of llvm-lipo accordingly. 

Differential revision: https://reviews.llvm.org/D68319

Test plan: make check-all

Modified:
    llvm/trunk/tools/llvm-lipo/llvm-lipo.cpp

Modified: llvm/trunk/tools/llvm-lipo/llvm-lipo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lipo/llvm-lipo.cpp?rev=373966&r1=373965&r2=373966&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-lipo/llvm-lipo.cpp (original)
+++ llvm/trunk/tools/llvm-lipo/llvm-lipo.cpp Mon Oct  7 14:14:22 2019
@@ -23,6 +23,7 @@
 #include "llvm/Support/FileOutputBuffer.h"
 #include "llvm/Support/InitLLVM.h"
 #include "llvm/Support/WithColor.h"
+#include "llvm/TextAPI/MachO/Architecture.h"
 
 using namespace llvm;
 using namespace llvm::object;
@@ -438,14 +439,19 @@ readInputBinaries(ArrayRef<InputFile> In
     if (!B->isArchive() && !B->isMachO() && !B->isMachOUniversalBinary())
       reportError("File " + IF.FileName + " has unsupported binary format");
     if (IF.ArchType && (B->isMachO() || B->isArchive())) {
-      const auto ArchType =
-          B->isMachO() ? Slice(cast<MachOObjectFile>(B)).getArchString()
-                       : Slice(cast<Archive>(B)).getArchString();
-      if (Triple(*IF.ArchType).getArch() != Triple(ArchType).getArch())
+      const auto S = B->isMachO() ? Slice(cast<MachOObjectFile>(B))
+                                  : Slice(cast<Archive>(B));
+      const auto SpecifiedCPUType =
+          MachO::getCPUTypeFromArchitecture(
+              MachO::mapToArchitecture(Triple(*IF.ArchType)))
+              .first;
+      // For compatibility with cctools' lipo the comparison is relaxed just to
+      // checking cputypes.
+      if (S.getCPUType() != SpecifiedCPUType)
         reportError("specified architecture: " + *IF.ArchType +
                     " for file: " + B->getFileName() +
-                    " does not match the file's architecture (" + ArchType +
-                    ")");
+                    " does not match the file's architecture (" +
+                    S.getArchString() + ")");
     }
     InputBinaries.push_back(std::move(*BinaryOrErr));
   }




More information about the llvm-commits mailing list