summaryrefslogtreecommitdiffstats
path: root/lld/ELF/LinkerScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/LinkerScript.cpp')
-rw-r--r--lld/ELF/LinkerScript.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index cabd82fe1bb..4156f08dfd8 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -63,9 +63,15 @@ private:
static int precedence(StringRef Op) {
return StringSwitch<int>(Op)
.Case("*", 4)
- .Case("/", 3)
- .Case("+", 2)
- .Case("-", 2)
+ .Case("/", 4)
+ .Case("+", 3)
+ .Case("-", 3)
+ .Case("<", 2)
+ .Case(">", 2)
+ .Case(">=", 2)
+ .Case("<=", 2)
+ .Case("==", 2)
+ .Case("!=", 2)
.Case("&", 1)
.Default(-1);
}
@@ -115,10 +121,6 @@ uint64_t ExprParser::parseTernary(uint64_t Cond) {
}
uint64_t ExprParser::apply(StringRef Op, uint64_t L, uint64_t R) {
- if (Op == "+")
- return L + R;
- if (Op == "-")
- return L - R;
if (Op == "*")
return L * R;
if (Op == "/") {
@@ -128,6 +130,22 @@ uint64_t ExprParser::apply(StringRef Op, uint64_t L, uint64_t R) {
}
return L / R;
}
+ if (Op == "+")
+ return L + R;
+ if (Op == "-")
+ return L - R;
+ if (Op == "<")
+ return L < R;
+ if (Op == ">")
+ return L > R;
+ if (Op == ">=")
+ return L >= R;
+ if (Op == "<=")
+ return L <= R;
+ if (Op == "==")
+ return L == R;
+ if (Op == "!=")
+ return L != R;
if (Op == "&")
return L & R;
llvm_unreachable("invalid operator");
OpenPOWER on IntegriCloud