[PATCH] D44734: [ELF] - Linkerscript: support MIN and MAX.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 21 06:54:41 PDT 2018
grimar created this revision.
grimar added reviewers: ruiu, espindola.
Herald added subscribers: arichardson, emaste.
Sample from the spec (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/sections.html)
uses MAX command that we do not support currently:
. = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
This patch implements support for MIN and MAX.
https://reviews.llvm.org/D44734
Files:
ELF/ScriptParser.cpp
test/ELF/linkerscript/operators.test
Index: test/ELF/linkerscript/operators.test
===================================================================
--- test/ELF/linkerscript/operators.test
+++ test/ELF/linkerscript/operators.test
@@ -36,6 +36,8 @@
_end = .;
minus_rel = _end - 0x10;
minus_abs = _end - _start;
+ max = MAX(11, 22);
+ min = MIN(11, 22);
}
# CHECK: 00000000000006 *ABS* 00000000 plus
@@ -66,6 +68,8 @@
# CHECK: 0000000000fff0 *ABS* 00000000 datasegmentalign2
# CHECK: 0000000000ffe0 .text 00000000 minus_rel
# CHECK: 0000000000fff0 *ABS* 00000000 minus_abs
+# CHECK: 00000000000016 *ABS* 00000000 max
+# CHECK: 0000000000000b *ABS* 00000000 min
## Mailformed number error.
# RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script
Index: ELF/ScriptParser.cpp
===================================================================
--- ELF/ScriptParser.cpp
+++ ELF/ScriptParser.cpp
@@ -1097,6 +1097,16 @@
return Cmd->getLMA();
};
}
+ if (Tok == "MAX" || Tok == "MIN") {
+ expect("(");
+ Expr A = readExpr();
+ expect(",");
+ Expr B = readExpr();
+ expect(")");
+ if (Tok == "MIN")
+ return [=] { return std::min(A().getValue(), B().getValue()); };
+ return [=] { return std::max(A().getValue(), B().getValue()); };
+ }
if (Tok == "ORIGIN") {
StringRef Name = readParenLiteral();
if (Script->MemoryRegions.count(Name) == 0) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44734.139284.patch
Type: text/x-patch
Size: 1370 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180321/57718dd5/attachment.bin>
More information about the llvm-commits
mailing list