From 7baf1db3923cd959075ddf42b723d36240b30753 Mon Sep 17 00:00:00 2001 From: Alex Brachet Date: Fri, 29 Jul 2022 16:17:33 +0000 Subject: [PATCH] [ELF] Strip directories for -Map when emitting reproducer rsp Similarly to -o output directories will not be created so -Map being copied verbatim will likely cause ld.lld @response.txt to fail. Differential Revision: https://reviews.llvm.org/D130681 --- lld/ELF/DriverUtils.cpp | 8 +++++--- lld/test/ELF/reproduce.s | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp index 51f3dc3a..150755f 100644 --- a/lld/ELF/DriverUtils.cpp +++ b/lld/ELF/DriverUtils.cpp @@ -169,11 +169,13 @@ std::string elf::createResponseFile(const opt::InputArgList &args) { os << quote(rewritePath(arg->getValue())) << "\n"; break; case OPT_o: - // If -o path contains directories, "lld @response.txt" will likely - // fail because the archive we are creating doesn't contain empty + case OPT_Map: + // 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 << "-o " << quote(path::filename(arg->getValue())) << "\n"; + os << arg->getSpelling() << ' ' << quote(path::filename(arg->getValue())) + << "\n"; break; case OPT_lto_sample_profile: os << arg->getSpelling() << quote(rewritePath(arg->getValue())) << "\n"; diff --git a/lld/test/ELF/reproduce.s b/lld/test/ELF/reproduce.s index f143752..4a0fe03 100644 --- a/lld/test/ELF/reproduce.s +++ b/lld/test/ELF/reproduce.s @@ -74,9 +74,10 @@ ## Check that directory path is stripped from -o # 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 -shared --as-needed --reproduce=repro4.tar +# 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: tar xOf repro4.tar repro4/response.txt | FileCheck %s --check-prefix=RSP4 # RSP4: -o bar +# RSP4: -Map map .globl _start _start: -- 2.7.4