[dsymutil] Support multiple input files on the command line
authorFrederic Riss <friss@apple.com>
Fri, 31 Jul 2015 20:22:20 +0000 (20:22 +0000)
committerFrederic Riss <friss@apple.com>
Fri, 31 Jul 2015 20:22:20 +0000 (20:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243777 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/dsymutil/X86/multiple-inputs.test [new file with mode: 0644]
test/tools/dsymutil/basic-linking.test
tools/dsymutil/dsymutil.cpp

diff --git a/test/tools/dsymutil/X86/multiple-inputs.test b/test/tools/dsymutil/X86/multiple-inputs.test
new file mode 100644 (file)
index 0000000..a3b0aa9
--- /dev/null
@@ -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
index 362df19a0241c9640901c325f002ccd94368109d..bff5b5df9e66716ee2b29d63551a1b55b7c30d13 100644 (file)
@@ -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.
 
index 1d5fb0ff8cfbd935700dd79e8dbc379d099edb60..a473c405ea8e9830e03d61eca5da6b447f38953e 100644 (file)
@@ -31,8 +31,8 @@ OptionCategory DsymCategory("Specific Options");
 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;
-
-  std::string OutputFile;
-  if (OutputFileOpt.empty()) {
-    if (InputFile == "-")
-      OutputFile = "a.out.dwarf";
-    else
-      OutputFile = InputFile + ".dwarf";
-  } else {
-    OutputFile = OutputFileOpt;
+  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;
+    }
+
+    if (!linkDwarf(OutputFile, **DebugMapPtrOrErr, Options))
+      return 1;
   }
 
-  return !linkDwarf(OutputFile, **DebugMapPtrOrErr, Options);
+  return 0;
 }