[PATCH] D59530: [LLD][COFF] Fix /linkrepro with options that take a filename or path

Alexandre Ganea via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 19 09:58:18 PDT 2019


aganea updated this revision to Diff 191335.
aganea edited the summary of this revision.
aganea added a comment.

Only output filenames, as requested.


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59530/new/

https://reviews.llvm.org/D59530

Files:
  COFF/Driver.cpp
  Common/Reproduce.cpp
  include/lld/Common/Reproduce.h
  test/COFF/linkrepro-pdb.test


Index: test/COFF/linkrepro-pdb.test
===================================================================
--- test/COFF/linkrepro-pdb.test
+++ test/COFF/linkrepro-pdb.test
@@ -4,6 +4,19 @@
 RUN: yaml2obj %S/Inputs/pdb-type-server-simple-a.yaml -o a.obj
 RUN: yaml2obj %S/Inputs/pdb-type-server-simple-b.yaml -o b.obj
 RUN: llvm-pdbutil yaml2pdb %S/Inputs/pdb-type-server-simple-ts.yaml -pdb ts.pdb
-RUN: lld-link a.obj b.obj -entry:main -debug -out:t.exe -pdb:t.pdb -nodefaultlib -linkrepro:.
+RUN: lld-link a.obj b.obj -entry:main -debug -out:%t.exe -pdb:%t.pdb -nodefaultlib -linkrepro:.
 RUN: tar xOf repro.tar repro/%:t/ts.pdb > repro-ts.pdb
 RUN: diff ts.pdb repro-ts.pdb
+
+RUN: tar xf repro.tar
+RUN: cat repro/response.txt | FileCheck -check-prefix=PDB %s
+
+PDB: -out:linkrepro-pdb.test.tmp.exe
+PDB-NEXT: -pdb:linkrepro-pdb.test.tmp.pdb
+
+RUN: yaml2obj < %p/Inputs/export.yaml > %t1.obj
+RUN: lld-link /out:%t1.dll /dll %t1.obj /implib:%t1.lib /export:exportfn1 /export:exportfn2 /linkrepro:.
+RUN: tar xf repro.tar
+RUN: cat repro/response.txt | FileCheck -check-prefix=IMP %s
+
+IMP: /implib:linkrepro-pdb.test.tmp1.lib
Index: include/lld/Common/Reproduce.h
===================================================================
--- include/lld/Common/Reproduce.h
+++ include/lld/Common/Reproduce.h
@@ -29,6 +29,7 @@
 
 // Returns the string form of the given argument.
 std::string toString(const llvm::opt::Arg &Arg);
+std::string toString(const llvm::opt::Arg &Arg, StringRef ValueSubstitute);
 }
 
 #endif
Index: Common/Reproduce.cpp
===================================================================
--- Common/Reproduce.cpp
+++ Common/Reproduce.cpp
@@ -49,10 +49,15 @@
 }
 
 std::string lld::toString(const opt::Arg &Arg) {
+  return toString(Arg, "");
+}
+
+std::string lld::toString(const opt::Arg &Arg, StringRef ValueSubstitute) {
   std::string K = Arg.getSpelling();
   if (Arg.getNumValues() == 0)
     return K;
-  std::string V = quote(Arg.getValue());
+  std::string V =
+      quote(!ValueSubstitute.empty() ? ValueSubstitute : Arg.getValue());
   if (Arg.getOption().getRenderStyle() == opt::Option::RenderJoinedStyle)
     return K + V;
   return K + " " + V;
Index: COFF/Driver.cpp
===================================================================
--- COFF/Driver.cpp
+++ COFF/Driver.cpp
@@ -523,6 +523,7 @@
   raw_svector_ostream OS(Data);
 
   for (auto *Arg : Args) {
+    StringRef Val;
     switch (Arg->getOption().getID()) {
     case OPT_linkrepro:
     case OPT_INPUT:
@@ -535,8 +536,13 @@
     case OPT_manifestinput:
     case OPT_manifestuac:
       break;
+    case OPT_implib:
+    case OPT_pdb:
+    case OPT_out:
+      Val = sys::path::filename(Arg->getValue());
+      LLVM_FALLTHROUGH;
     default:
-      OS << toString(*Arg) << "\n";
+      OS << toString(*Arg, Val) << "\n";
     }
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59530.191335.patch
Type: text/x-patch
Size: 2843 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190319/a66490ff/attachment.bin>


More information about the llvm-commits mailing list