[PATCH] D26443: [ELF] - Use backward slashes inside response files
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 11 05:32:56 PST 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL286589: [ELF] - Use backward slashes inside response files (authored by grimar).
Changed prior to commit:
https://reviews.llvm.org/D26443?vs=77461&id=77607#toc
Repository:
rL LLVM
https://reviews.llvm.org/D26443
Files:
lld/trunk/lib/Core/Reproduce.cpp
lld/trunk/test/ELF/reproduce-windows2.s
lld/trunk/test/lit.cfg
Index: lld/trunk/test/lit.cfg
===================================================================
--- lld/trunk/test/lit.cfg
+++ lld/trunk/test/lit.cfg
@@ -207,6 +207,10 @@
if platform.system() in ['FreeBSD', 'Linux']:
config.available_features.add('system-linker-elf')
+# Running on Windows
+if platform.system() in ['Windows']:
+ config.available_features.add('system-windows')
+
# Set if host-cxxabi's demangler can handle target's symbols.
if platform.system() not in ['Windows']:
config.available_features.add('demangler')
Index: lld/trunk/test/ELF/reproduce-windows2.s
===================================================================
--- lld/trunk/test/ELF/reproduce-windows2.s
+++ lld/trunk/test/ELF/reproduce-windows2.s
@@ -0,0 +1,11 @@
+# REQUIRES: system-windows, x86, cpio
+
+# Test that a response.txt file always uses / instead of \.
+# RUN: rm -rf %t.dir
+# RUN: mkdir -p %t.dir/build
+# RUN: llvm-mc %s -o %t.dir/build/foo.o -filetype=obj -triple=x86_64-pc-linux
+# RUN: cd %t.dir
+# RUN: ld.lld build/foo.o --reproduce repro
+# RUN: echo "*response.txt" > list.txt
+# RUN: cpio -i --to-stdout --pattern-file=list.txt < repro.cpio | FileCheck %s
+# CHECK: {{.*}}/build/foo.o
Index: lld/trunk/lib/Core/Reproduce.cpp
===================================================================
--- lld/trunk/lib/Core/Reproduce.cpp
+++ lld/trunk/lib/Core/Reproduce.cpp
@@ -50,6 +50,12 @@
OS << Data; // c_filedata
}
+// Converts path to use unix path separators so the cpio can be extracted on
+// both unix and windows.
+static void convertToUnixPathSeparator(SmallString<128> &Path) {
+ std::replace(Path.begin(), Path.end(), '\\', '/');
+}
+
void CpioFile::append(StringRef Path, StringRef Data) {
if (!Seen.insert(Path).second)
return;
@@ -59,10 +65,7 @@
// (i.e. in that case we are creating baz.cpio.)
SmallString<128> Fullpath;
path::append(Fullpath, Basename, Path);
-
- // Use unix path separators so the cpio can be extracted on both unix and
- // windows.
- std::replace(Fullpath.begin(), Fullpath.end(), '\\', '/');
+ convertToUnixPathSeparator(Fullpath);
writeMember(*OS, Fullpath, Data);
@@ -76,6 +79,8 @@
// Makes a given pathname an absolute path first, and then remove
// beginning /. For example, "../foo.o" is converted to "home/john/foo.o",
// assuming that the current directory is "/home/john/bar".
+// Returned string is a backslash-separated path even on Windows to avoid
+// a mess with backslash-as-escape and backslash-as-path-separator.
std::string lld::relativeToRoot(StringRef Path) {
SmallString<128> Abs = Path;
if (sys::fs::make_absolute(Abs))
@@ -93,6 +98,7 @@
Res = Root.substr(2);
path::append(Res, path::relative_path(Abs));
+ convertToUnixPathSeparator(Res);
return Res.str();
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26443.77607.patch
Type: text/x-patch
Size: 2831 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161111/c3d99999/attachment.bin>
More information about the llvm-commits
mailing list