summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-08-22 21:33:35 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-08-22 21:33:35 +0000
commitcc3dd629eedb3b5a4f74bf2e0c3729c211d79df7 (patch)
tree723d476d12752b650da88d0723fdcce56174fa07
parent833214537323345721033b4d88f026d23152b895 (diff)
downloadbcm5719-llvm-cc3dd629eedb3b5a4f74bf2e0c3729c211d79df7.tar.gz
bcm5719-llvm-cc3dd629eedb3b5a4f74bf2e0c3729c211d79df7.zip
Add support for '|' in expressions.
llvm-svn: 279480
-rw-r--r--lld/ELF/LinkerScript.cpp3
-rw-r--r--lld/test/ELF/linkerscript/linkerscript-phdrs-flags.s2
2 files changed, 4 insertions, 1 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index ed6b39e9ee7..c00791dc5eb 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -826,6 +826,7 @@ static int precedence(StringRef Op) {
.Case("==", 2)
.Case("!=", 2)
.Case("&", 1)
+ .Case("|", 1)
.Default(-1);
}
@@ -1102,6 +1103,8 @@ static Expr combine(StringRef Op, Expr L, Expr R) {
return [=](uint64_t Dot) { return L(Dot) != R(Dot); };
if (Op == "&")
return [=](uint64_t Dot) { return L(Dot) & R(Dot); };
+ if (Op == "|")
+ return [=](uint64_t Dot) { return L(Dot) | R(Dot); };
llvm_unreachable("invalid operator");
}
diff --git a/lld/test/ELF/linkerscript/linkerscript-phdrs-flags.s b/lld/test/ELF/linkerscript/linkerscript-phdrs-flags.s
index 1ae500d5a21..d90c0423921 100644
--- a/lld/test/ELF/linkerscript/linkerscript-phdrs-flags.s
+++ b/lld/test/ELF/linkerscript/linkerscript-phdrs-flags.s
@@ -1,6 +1,6 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
-# RUN: echo "PHDRS {all PT_LOAD FILEHDR PHDRS FLAGS (1 + 0x2);} \
+# RUN: echo "PHDRS {all PT_LOAD FILEHDR PHDRS FLAGS (1 | 1 + 0x1);} \
# RUN: SECTIONS { \
# RUN: . = 0x10000200; \
# RUN: .text : {*(.text*)} :all \
OpenPOWER on IntegriCloud