[ELF] - Eliminate the AssertCommand.
authorGeorge Rimar <grimar@accesssoftek.com>
Wed, 25 Apr 2018 11:16:31 +0000 (11:16 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Wed, 25 Apr 2018 11:16:31 +0000 (11:16 +0000)
commitd30a78b3fede801cf6b7054851d4daa041103948
tree6bd2ab8f06c2612a7973f2e69b41ad49cb7b82b1
parent6a82e96ed90eafb1c8520be92d0a67f953c1fa7d
[ELF] - Eliminate the AssertCommand.

Currently, LLD supports ASSERT as a separate command.

We support two forms now.

Assign expression-form: . = ASSERT(0x100)
(old GNU ld required it and some scripts in the wild are still using
something like . = ASSERT((_end - _text <= (512 * 1024 * 1024)), "kernel image bigger than KERNEL_IMAGE_SIZE");

Nowadays above is not a mandatory form and command-like form is commonly used:
ASSERT(<expr>, "text);

The return value of the ASSERT is Dot. That was implemented in D30171.
It looks like (2) is just a short version of (1) then.

GNU ld does *not* list ASSERT as a SECTIONS command:
https://sourceware.org/binutils/docs/ld/SECTIONS.html#SECTIONS

Given above we probably can change ASSERT to be an assignment to Dot.
That makes the rest of the code much simpler. Patch do that.

Differential revision: https://reviews.llvm.org/D45434

llvm-svn: 330814
lld/ELF/LinkerScript.cpp
lld/ELF/LinkerScript.h
lld/ELF/ScriptParser.cpp
lld/test/ELF/linkerscript/assert.s