summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2016-01-22 23:46:37 +0000
committerPete Cooper <peter_cooper@apple.com>2016-01-22 23:46:37 +0000
commit602593378936c969e2dc7e7924f744943d129ba6 (patch)
tree96464c1ee999ad5706fe320269311e09a08e5b5e
parent3a2d4947a69ff4731d2adb9862552fc8a003d295 (diff)
downloadbcm5719-llvm-602593378936c969e2dc7e7924f744943d129ba6.tar.gz
bcm5719-llvm-602593378936c969e2dc7e7924f744943d129ba6.zip
Fix bug in handling of quoted linker script tokens and update tests to use it.
There was an off by one error because the StringRef.substr functions second argument is a length, not the end index. Also updated a few ELF files which failed when run on Jenkins with paths including the @ character. This is often used in Jenkins for shared workspace plugin. Reviewed by Rui Ueyama llvm-svn: 258583
-rw-r--r--lld/ELF/LinkerScript.cpp2
-rw-r--r--lld/test/ELF/as-needed.s4
-rw-r--r--lld/test/ELF/linkerscript.s30
-rw-r--r--lld/test/ELF/linkerscript2.s2
4 files changed, 19 insertions, 19 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index a6df9ed48cd..1345bd4f973 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -104,7 +104,7 @@ std::vector<StringRef> LinkerScript::tokenize(StringRef S) {
size_t E = S.find("\"", 1);
if (E == StringRef::npos)
error("unclosed quote");
- Ret.push_back(S.substr(1, E));
+ Ret.push_back(S.substr(1, E - 1));
S = S.substr(E + 1);
continue;
}
diff --git a/lld/test/ELF/as-needed.s b/lld/test/ELF/as-needed.s
index 2c5174d5407..eb91dd625a1 100644
--- a/lld/test/ELF/as-needed.s
+++ b/lld/test/ELF/as-needed.s
@@ -20,11 +20,11 @@
/// GROUP directive is the same as --as-needed.
-// RUN: echo "GROUP(" %t2.so %t3.so %t4.so ")" > %t.script
+// RUN: echo 'GROUP("'%t2.so'" "'%t3.so'" "'%t4.so'")' > %t.script
// RUN: ld.lld %t.o %t.script -o %t2
// RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s
-// RUN: echo "GROUP(AS_NEEDED(" %t2.so %t3.so %t4.so "))" > %t.script
+// RUN: echo 'GROUP(AS_NEEDED("'%t2.so'" "'%t3.so'" "'%t4.so'"))' > %t.script
// RUN: ld.lld %t.o %t.script -o %t2
// RUN: llvm-readobj -dynamic-table %t2 | FileCheck -check-prefix=CHECK2 %s
diff --git a/lld/test/ELF/linkerscript.s b/lld/test/ELF/linkerscript.s
index bff285b9761..74dbc2553dc 100644
--- a/lld/test/ELF/linkerscript.s
+++ b/lld/test/ELF/linkerscript.s
@@ -10,43 +10,43 @@
# RUN: ld.lld %t -o %t2 %t.script
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t ")" > %t.script
+# RUN: echo 'GROUP("'%t'")' > %t.script
# RUN: ld.lld -o %t2 %t.script
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "INPUT(" %t ")" > %t.script
+# RUN: echo 'INPUT("'%t'")' > %t.script
# RUN: ld.lld -o %t2 %t.script
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t libxyz.a ")" > %t.script
+# RUN: echo 'GROUP("'%t'" libxyz.a )' > %t.script
# RUN: not ld.lld -o %t2 %t.script
# RUN: ld.lld -o %t2 %t.script -L%t.dir
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t =libxyz.a ")" > %t.script
+# RUN: echo 'GROUP("'%t'" =libxyz.a )' > %t.script
# RUN: not ld.lld -o %t2 %t.script
# RUN: ld.lld -o %t2 %t.script --sysroot=%t.dir
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t -lxyz ")" > %t.script
+# RUN: echo 'GROUP("'%t'" -lxyz )' > %t.script
# RUN: not ld.lld -o %t2 %t.script
# RUN: ld.lld -o %t2 %t.script -L%t.dir
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t libxyz.a ")" > %t.script
+# RUN: echo 'GROUP("'%t'" libxyz.a )' > %t.script
# RUN: not ld.lld -o %t2 %t.script
# RUN: ld.lld -o %t2 %t.script -L%t.dir
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t /libxyz.a ")" > %t.script
-# RUN: echo "GROUP(" %t /libxyz.a ")" > %t.dir/xyz.script
+# RUN: echo 'GROUP("'%t'" /libxyz.a )' > %t.script
+# RUN: echo 'GROUP("'%t'" /libxyz.a )' > %t.dir/xyz.script
# RUN: not ld.lld -o %t2 %t.script
# RUN: not ld.lld -o %t2 %t.script --sysroot=%t.dir
# RUN: ld.lld -o %t2 %t.dir/xyz.script --sysroot=%t.dir
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(" %t.script2 ")" > %t.script1
-# RUN: echo "GROUP(" %t ")" > %t.script2
+# RUN: echo 'GROUP("'%t.script2'")' > %t.script1
+# RUN: echo 'GROUP("'%t'")' > %t.script2
# RUN: ld.lld -o %t2 %t.script1
# RUN: llvm-readobj %t2 > /dev/null
@@ -70,16 +70,16 @@
# ENTRY-OVERLOAD: Name: _start
# ENTRY-OVERLOAD-NEXT: Value: [[ENTRY]]
-# RUN: echo "OUTPUT_FORMAT(\"elf64-x86-64\") /*/*/ GROUP(" %t ")" > %t.script
+# RUN: echo 'OUTPUT_FORMAT("elf64-x86-64") /*/*/ GROUP("'%t'" )' > %t.script
# RUN: ld.lld -o %t2 %t.script
# RUN: llvm-readobj %t2 > /dev/null
-# RUN: echo "GROUP(AS_NEEDED(" %t "))" > %t.script
+# RUN: echo 'GROUP(AS_NEEDED("'%t'"))' > %t.script
# RUN: ld.lld -o %t2 %t.script
# RUN: llvm-readobj %t2 > /dev/null
# RUN: rm -f %t.out
-# RUN: echo "OUTPUT(" %t.out ")" > %t.script
+# RUN: echo 'OUTPUT("'%t.out'")' > %t.script
# RUN: ld.lld %t.script %t
# RUN: llvm-readobj %t.out > /dev/null
@@ -95,8 +95,8 @@
# RUN: ld.lld %t.script %t
# RUN: llvm-readobj %t.out > /dev/null
-# RUN: echo "INCLUDE " %t.script2 "OUTPUT(" %t.out ")" > %t.script1
-# RUN: echo "GROUP(" %t ")" > %t.script2
+# RUN: echo 'INCLUDE "'%t.script2'" OUTPUT("'%t.out'")' > %t.script1
+# RUN: echo 'GROUP("'%t'")' > %t.script2
# RUN: ld.lld %t.script1
# RUN: llvm-readobj %t2 > /dev/null
diff --git a/lld/test/ELF/linkerscript2.s b/lld/test/ELF/linkerscript2.s
index f83198f759f..86fb638ee0f 100644
--- a/lld/test/ELF/linkerscript2.s
+++ b/lld/test/ELF/linkerscript2.s
@@ -4,7 +4,7 @@
# RUN: %p/Inputs/libsearch-dyn.s -o %tdyn.o
# RUN: mkdir -p %t.dir
# RUN: ld.lld -shared %tdyn.o -o %t.dir/libls.so
-# RUN: echo "SEARCH_DIR(" %t.dir ")" > %t.script
+# RUN: echo 'SEARCH_DIR("'%t.dir'")' > %t.script
# RUN: ld.lld -o %t2 --script %t.script -lls %t
.globl _start,_bar
OpenPOWER on IntegriCloud