[LLD][ELF] - Fix the different behavior of the linker script symbols on different...
authorGeorge Rimar <grimar@accesssoftek.com>
Thu, 18 Apr 2019 08:15:54 +0000 (08:15 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Thu, 18 Apr 2019 08:15:54 +0000 (08:15 +0000)
commitda49faf15e8837a3b8d58a76d31050cedae3d9ca
tree851814b56c7c821cb4fce8c4f9bc2cbf065cf89c
parent957c356ffec47c9693b740244fe3001e1f5c7c00
[LLD][ELF] - Fix the different behavior of the linker script symbols on different platforms.

This generalizes code and also fixes the broken behavior shown in
one of our test cases for some targets, like x86-64.

The issue occurs when the forward declarations are used in the script.
One of the samples is:

SECTIONS {
  foo = ADDR(.text) - ABSOLUTE(ADDR(.text));
};

In that case, we have a broken output when output target does
not use thunks. That happens because thunks creating code
(called from maybeAddThunks)
calls Script->assignAddresses() at least one more time,
what fixups the values. As a result final symbols values can
be different on AArch64 and x86, for example.

In this patch, I generalize and rename maybeAddThunks to
finalizeAddressDependentContent and now it is used and called
by all targets.

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

llvm-svn: 358646
lld/ELF/Writer.cpp
lld/test/ELF/linkerscript/addr-zero.test