using namespace llvm;
using namespace llvm::object;
using namespace llvm::COFF;
-using namespace llvm::sys;
+using llvm::sys::Process;
namespace lld {
namespace coff {
config->mingw = args.hasArg(OPT_lldmingw);
if (auto *arg = args.getLastArg(OPT_linkrepro)) {
- const char *path = arg->getValue();
+ SmallString<64> path = StringRef(arg->getValue());
+ sys::path::append(path, "repro.tar");
Expected<std::unique_ptr<TarWriter>> errOrWriter =
- TarWriter::create(path, path::stem(path));
+ TarWriter::create(path, "repro");
+
if (errOrWriter) {
tar = std::move(*errOrWriter);
- tar->append("version.txt", getLLDVersion() + "\n");
} else {
- error("/linkrepro: " + toString(errOrWriter.takeError()));
+ error("/linkrepro: failed to open " + path + ": " +
+ toString(errOrWriter.takeError()));
}
}
COFF Improvements
-----------------
-* /linkrepro: now takes the filename of the tar archive it writes, instead
- of the name of a directory that a file called "repro.tar" is created in,
- matching the behavior of ELF lld.
-* The new `/lldignoreenv` flag makes lld-link ignore environment variables
- like `%LIB%`.
* ...
MinGW Improvements
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:repro.tar
+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
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:repro.tar
+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
# RUN: mkdir -p %t.dir/build
# RUN: cd %t.dir/build
# RUN: lld-link %p/Inputs/resource.res /subsystem:console /machine:x64 \
-# RUN: /entry:__ImageBase /linkrepro:repro.tar /out:%t.exe
+# RUN: /entry:__ImageBase /linkrepro:. /out:%t.exe
# RUN: tar xf repro.tar
# RUN: diff %p/Inputs/resource.res repro/%:p/Inputs/resource.res
# RUN: FileCheck %s --check-prefix=RSP < repro/response.txt
# RUN: cd %t.dir/build1
# RUN: lld-link %t.obj %p/Inputs/std32.lib /subsystem:console \
-# RUN: /entry:main@0 /linkrepro:repro.tar /out:%t.exe
+# RUN: /entry:main@0 /linkrepro:. /out:%t.exe
# RUN: tar xf repro.tar
# RUN: diff %t.obj repro/%:t.obj
# RUN: diff %p/Inputs/std32.lib repro/%:p/Inputs/std32.lib
# RUN: cd %t.dir/build2
# RUN: lld-link %t.obj /libpath:%p/Inputs /defaultlib:std32 /subsystem:console \
-# RUN: /entry:main@0 /linkrepro:repro.tar /out:%t.exe
+# RUN: /entry:main@0 /linkrepro:. /out:%t.exe
# RUN: tar xf repro.tar
# RUN: diff %t.obj repro/%:t.obj
# RUN: diff %p/Inputs/std32.lib repro/%:p/Inputs/std32.lib
# RUN: cd %t.dir/build3
# RUN: env LIB=%p/Inputs lld-link %t.obj /defaultlib:std32 /subsystem:console \
-# RUN: /entry:main@0 /linkrepro:repro.tar /out:%t.exe
+# RUN: /entry:main@0 /linkrepro:. /out:%t.exe
# RUN: tar xf repro.tar
# RUN: diff %t.obj repro/%:t.obj
# RUN: diff %p/Inputs/std32.lib repro/%:p/Inputs/std32.lib