summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/python_api/process
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-08-26 10:23:31 +0000
committerFangrui Song <maskray@google.com>2019-08-26 10:23:31 +0000
commitdebcac9fef21bc0a9159d189357d5a37fd7336f6 (patch)
tree781afeb422eced189cb96ab9ea71f9d0c69ff06e /lldb/packages/Python/lldbsuite/test/python_api/process
parent91e2fbad3d95914b28b820efc26b9fb1d7f3368b (diff)
downloadbcm5719-llvm-debcac9fef21bc0a9159d189357d5a37fd7336f6.tar.gz
bcm5719-llvm-debcac9fef21bc0a9159d189357d5a37fd7336f6.zip
[ELF] Make LinkerScript::assignAddresses iterative
PR42990. For `SECTIONS { b = a; . = 0xff00 + (a >> 8); a = .; }`, we currently set st_value(a)=0xff00 while st_value(b)=0xffff. The following call tree demonstrates the problem: ``` link<ELF64LE>(Args); Script->declareSymbols(); // insert a and b as absolute Defined Writer<ELFT>().run(); Script->processSectionCommands(); addSymbol(cmd); // a and b are re-inserted. LinkerScript::getSymbolValue // is lazily called by subsequent evaluation finalizeSections(); forEachRelSec(scanRelocations<ELFT>); processRelocAux // another problem PR42506, not affected by this patch finalizeAddressDependentContent(); // loop executed once script->assignAddresses(); // a = 0, b = 0xff00 script->assignAddresses(); // a = 0xff00, _end = 0xffff ``` We need another assignAddresses() to finalize the value of `a`. This patch 1) modifies assignAddress() to track the original section/value of each symbol and return a symbol whose section/value has changed. 2) moves the post-finalizeSections assignAddress() inside the loop of finalizeAddressDependentContent() and makes it iterative. Symbol assignment may not converge so we make a few attempts before bailing out. Note, assignAddresses() must be called at least twice. The penultimate call finalized section addresses while the last finalized symbol values. It is somewhat obscure and there was no comment. linkerscript/addr-zero.test tests this. Reviewed By: ruiu Differential Revision: https://reviews.llvm.org/D66279 llvm-svn: 369889
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/python_api/process')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud