[llvm] r243777 - [dsymutil] Support multiple input files on the command line

Frederic Riss friss at apple.com
Fri Jul 31 13:22:20 PDT 2015


Author: friss
Date: Fri Jul 31 15:22:20 2015
New Revision: 243777

URL: http://llvm.org/viewvc/llvm-project?rev=243777&view=rev
Log:
[dsymutil] Support multiple input files on the command line

Added:
    llvm/trunk/test/tools/dsymutil/X86/multiple-inputs.test
Modified:
    llvm/trunk/test/tools/dsymutil/basic-linking.test
    llvm/trunk/tools/dsymutil/dsymutil.cpp

Added: llvm/trunk/test/tools/dsymutil/X86/multiple-inputs.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/multiple-inputs.test?rev=243777&view=auto
==============================================================================
--- llvm/trunk/test/tools/dsymutil/X86/multiple-inputs.test (added)
+++ llvm/trunk/test/tools/dsymutil/X86/multiple-inputs.test Fri Jul 31 15:22:20 2015
@@ -0,0 +1,12 @@
+REQUIRES: shell
+RUN: cat %p/../Inputs/basic.macho.x86_64 > %t1
+RUN: cat %p/../Inputs/basic-archive.macho.x86_64 > %t2
+RUN: cat %p/../Inputs/basic-lto.macho.x86_64 > %t3
+RUN: cat %p/../Inputs/basic-lto-dw4.macho.x86_64 > %t4
+RUN: llvm-dsymutil -oso-prepend-path=%p/.. %t1 %t2 %t3 %t4
+RUN: llvm-dwarfdump %t1.dwarf \
+ | FileCheck %S/basic-linking-x86.test --check-prefix=CHECK --check-prefix=BASIC
+RUN: llvm-dwarfdump %t2.dwarf \
+ | FileCheck %S/basic-linking-x86.test --check-prefix=CHECK --check-prefix=ARCHIVE
+RUN: llvm-dwarfdump %t3.dwarf | FileCheck %S/basic-lto-linking-x86.test
+RUN: llvm-dwarfdump %t4.dwarf | FileCheck %S/basic-lto-dw4-linking-x86.test

Modified: llvm/trunk/test/tools/dsymutil/basic-linking.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/basic-linking.test?rev=243777&r1=243776&r2=243777&view=diff
==============================================================================
--- llvm/trunk/test/tools/dsymutil/basic-linking.test (original)
+++ llvm/trunk/test/tools/dsymutil/basic-linking.test Fri Jul 31 15:22:20 2015
@@ -1,6 +1,7 @@
 RUN: llvm-dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s
 RUN: llvm-dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO
 RUN: llvm-dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE
+RUN: llvm-dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 %p/Inputs/basic-lto.macho.x86_64 %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-LTO --check-prefix=CHECK-ARCHIVE 
 
 This test check the basic Dwarf linking process through the debug dumps.
 

Modified: llvm/trunk/tools/dsymutil/dsymutil.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/dsymutil.cpp?rev=243777&r1=243776&r2=243777&view=diff
==============================================================================
--- llvm/trunk/tools/dsymutil/dsymutil.cpp (original)
+++ llvm/trunk/tools/dsymutil/dsymutil.cpp Fri Jul 31 15:22:20 2015
@@ -31,8 +31,8 @@ OptionCategory DsymCategory("Specific Op
 static opt<bool> Help("h", desc("Alias for -help"), Hidden);
 static opt<bool> Version("v", desc("Alias for -version"), Hidden);
 
-static opt<std::string> InputFile(Positional, desc("<input file>"),
-                                  init("a.out"), cat(DsymCategory));
+static list<std::string> InputFiles(Positional, OneOrMore,
+                                    desc("<input files>"), cat(DsymCategory));
 
 static opt<std::string>
     OutputFileOpt("o",
@@ -90,9 +90,6 @@ int main(int argc, char **argv) {
     return 0;
   }
 
-  auto DebugMapPtrOrErr =
-      parseDebugMap(InputFile, OsoPrependPath, Verbose, InputIsYAMLDebugMap);
-
   Options.Verbose = Verbose;
   Options.NoOutput = NoOutput;
   Options.NoODR = NoODR;
@@ -102,27 +99,40 @@ int main(int argc, char **argv) {
   llvm::InitializeAllTargets();
   llvm::InitializeAllAsmPrinters();
 
-  if (auto EC = DebugMapPtrOrErr.getError()) {
-    llvm::errs() << "error: cannot parse the debug map for \"" << InputFile
-                 << "\": " << EC.message() << '\n';
+  if (InputFiles.size() > 1 && !OutputFileOpt.empty()) {
+    llvm::errs() << "error: cannot use -o with multiple inputs\n";
     return 1;
   }
 
-  if (Verbose || DumpDebugMap)
-    (*DebugMapPtrOrErr)->print(llvm::outs());
-
-  if (DumpDebugMap)
-    return 0;
+  for (auto &InputFile : InputFiles) {
+    auto DebugMapPtrOrErr =
+        parseDebugMap(InputFile, OsoPrependPath, Verbose, InputIsYAMLDebugMap);
+
+    if (auto EC = DebugMapPtrOrErr.getError()) {
+      llvm::errs() << "error: cannot parse the debug map for \"" << InputFile
+                   << "\": " << EC.message() << '\n';
+      return 1;
+    }
+
+    if (Verbose || DumpDebugMap)
+      (*DebugMapPtrOrErr)->print(llvm::outs());
+
+    if (DumpDebugMap)
+      continue;
+
+    std::string OutputFile;
+    if (OutputFileOpt.empty()) {
+      if (InputFile == "-")
+        OutputFile = "a.out.dwarf";
+      else
+        OutputFile = InputFile + ".dwarf";
+    } else {
+      OutputFile = OutputFileOpt;
+    }
 
-  std::string OutputFile;
-  if (OutputFileOpt.empty()) {
-    if (InputFile == "-")
-      OutputFile = "a.out.dwarf";
-    else
-      OutputFile = InputFile + ".dwarf";
-  } else {
-    OutputFile = OutputFileOpt;
+    if (!linkDwarf(OutputFile, **DebugMapPtrOrErr, Options))
+      return 1;
   }
 
-  return !linkDwarf(OutputFile, **DebugMapPtrOrErr, Options);
+  return 0;
 }





More information about the llvm-commits mailing list