[ELF] --reproduce: strip directories for --print-archive-stats= and --why-extract=
authorFangrui Song <i@maskray.me>
Tue, 2 Aug 2022 05:06:46 +0000 (22:06 -0700)
committerFangrui Song <i@maskray.me>
Tue, 2 Aug 2022 05:06:46 +0000 (22:06 -0700)
Similar to -o and -Map.

lld/ELF/DriverUtils.cpp
lld/test/ELF/reproduce.s

index 150755f..42ab5c0 100644 (file)
@@ -170,12 +170,16 @@ std::string elf::createResponseFile(const opt::InputArgList &args) {
       break;
     case OPT_o:
     case OPT_Map:
+    case OPT_print_archive_stats:
+    case OPT_why_extract:
       // If an output path contains directories, "lld @response.txt" will
       // likely fail because the archive we are creating doesn't contain empty
       // directories for the output path (-o doesn't create directories).
       // Strip directories to prevent the issue.
-      os << arg->getSpelling() << ' ' << quote(path::filename(arg->getValue()))
-         << "\n";
+      os << arg->getSpelling();
+      if (arg->getOption().getRenderStyle() == opt::Option::RenderSeparateStyle)
+        os << ' ';
+      os << quote(path::filename(arg->getValue())) << '\n';
       break;
     case OPT_lto_sample_profile:
       os << arg->getSpelling() << quote(rewritePath(arg->getValue())) << "\n";
index 4a0fe03..314c08b 100644 (file)
 ## Check that directory path is stripped from -o <file-path>
 # RUN: mkdir -p %t.dir/build4/a/b/c
 # RUN: cd %t.dir
-# RUN: ld.lld build1/foo.o -o build4/a/b/c/bar -Map build4/a/b/c/map -shared --as-needed --reproduce=repro4.tar
+# RUN: ld.lld build1/foo.o -o build4/a/b/c/bar -Map build4/map --print-archive-stats=build4/stats \
+# RUN:   --why-extract=build4/why -shared --as-needed --reproduce=repro4.tar
 # RUN: tar xOf repro4.tar repro4/response.txt | FileCheck %s --check-prefix=RSP4
 # RSP4: -o bar
-# RSP4: -Map map
+# RSP4-NEXT: -Map map
+# RSP4-NEXT: --print-archive-stats=stats
+# RSP4-NEXT: --why-extract=why
 
 .globl _start
 _start: