[PATCH] D23598: [ELF] Linkerscript: support assignment outside SECTIONS
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 17 19:15:07 PDT 2016
phosek updated this revision to Diff 68473.
https://reviews.llvm.org/D23598
Files:
ELF/LinkerScript.cpp
test/ELF/invalid-linkerscript.test
test/ELF/linkerscript/linkerscript-symbols.s
Index: test/ELF/linkerscript/linkerscript-symbols.s
===================================================================
--- test/ELF/linkerscript/linkerscript-symbols.s
+++ test/ELF/linkerscript/linkerscript-symbols.s
@@ -41,6 +41,32 @@
# RUN: llvm-objdump -t %t1 | FileCheck --check-prefix=HIDDEN3 %s
# HIDDEN3: 0000000000000001 *ABS* 00000000 .hidden newsym
+# The symbol is not referenced. Don't provide it.
+# RUN: echo "PROVIDE(newsym = 1);" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -t %t1 | FileCheck --check-prefix=PROVIDE4 %s
+# PROVIDE4-NOT: 0000000000000001 *ABS* 00000000 newsym
+
+# The symbol is not referenced. Don't provide it.
+# RUN: echo "PROVIDE_HIDDEN(newsym = 1);" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -t %t1 | FileCheck --check-prefix=HIDDEN4 %s
+# HIDDEN4-NOT: 0000000000000001 *ABS* 00000000 .hidden newsym
+
+# Provide existing symbol. The value should be 0, even though we
+# have value of 1 in PROVIDE()
+# RUN: echo "PROVIDE(somesym = 1);" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -t %t1 | FileCheck --check-prefix=PROVIDE5 %s
+# PROVIDE5: 0000000000000000 *ABS* 00000000 somesym
+
+# Provide existing symbol. The value should be 0, even though we
+# have value of 1 in PROVIDE_HIDDEN(). Visibility should not change
+# RUN: echo "PROVIDE_HIDDEN(somesym = 1);" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -t %t1 | FileCheck --check-prefix=HIDDEN5 %s
+# HIDDEN5: 0000000000000000 *ABS* 00000000 somesym
+
.global _start
_start:
nop
Index: test/ELF/invalid-linkerscript.test
===================================================================
--- test/ELF/invalid-linkerscript.test
+++ test/ELF/invalid-linkerscript.test
@@ -15,7 +15,7 @@
# RUN: echo foobar > %t1
# RUN: not ld.lld %t1 no-such-file 2>&1 | FileCheck -check-prefix=ERR1 %s
-# ERR1: unknown directive: foobar
+# ERR1: unexpected EOF
# ERR1: cannot open no-such-file:
# RUN: echo "foo \"bar" > %t2
Index: ELF/LinkerScript.cpp
===================================================================
--- ELF/LinkerScript.cpp
+++ ELF/LinkerScript.cpp
@@ -655,6 +655,8 @@
StringRef Tok = next();
if (Handler Fn = Cmd.lookup(Tok))
(this->*Fn)();
+ else if (SymbolAssignment *Cmd = readProvideOrAssignment(Tok))
+ Opt.Commands.emplace_back(Cmd);
else
setError("unknown directive: " + Tok);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23598.68473.patch
Type: text/x-patch
Size: 2527 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160818/78b0e826/attachment.bin>
More information about the llvm-commits
mailing list