[ELF] Use late evaluation for ALIGN in expression
authorPetr Hosek <phosek@chromium.org>
Tue, 30 May 2017 03:18:28 +0000 (03:18 +0000)
committerPetr Hosek <phosek@chromium.org>
Tue, 30 May 2017 03:18:28 +0000 (03:18 +0000)
commit3c6de1a66caff299f52d393c8eb4d677d2158dc8
tree6f037359209824c7aaba9c6bdb4a3b2a155225b5
parent057084180662c897a94563768b374f8b58e71ebf
[ELF] Use late evaluation for ALIGN in expression

While the following expression is handled fine:

  PROVIDE_HIDDEN(newsym = oldsym + address);

The following expression triggers an error because the expression
is evaluated as absolute:

  PROVIDE_HIDDEN(newsym = ALIGN(oldsym, CONSTANT(MAXPAGESIZE)) + address);

To avoid this error, we use late evaluation for ALIGN by making the
alignment an attribute of the expression itself.

Differential Revision: https://reviews.llvm.org/D33629

llvm-svn: 304185
lld/ELF/LinkerScript.cpp
lld/ELF/LinkerScript.h
lld/ELF/ScriptParser.cpp
lld/test/ELF/linkerscript/align.s
lld/test/ELF/linkerscript/symbol-reserved.s