summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/extract-insert.ll
diff options
context:
space:
mode:
authorEli Friedman <efriedma@codeaurora.org>2018-10-11 21:43:06 +0000
committerEli Friedman <efriedma@codeaurora.org>2018-10-11 21:43:06 +0000
commit8b44cc21c6e0e4184d078e686440694e13d99bb6 (patch)
tree1b49c872eb4fab23715b1927f933fbf09ff87edf /llvm/test/CodeGen/X86/extract-insert.ll
parent724a3b728ae7e6f4b9be787336acd03a8870087f (diff)
downloadbcm5719-llvm-8b44cc21c6e0e4184d078e686440694e13d99bb6.tar.gz
bcm5719-llvm-8b44cc21c6e0e4184d078e686440694e13d99bb6.zip
[ELF] Fix link failure with Android compressed relocation support.
Android uses a compressed relocation format, which means the size of the relocation section isn't predictable based on the number of relocations, and can vary if the layout changes in any way. To deal with this, the linker normally runs multiple passes until the layout converges. The layout should converge if the size of the compressed relocation section increases monotonically: if the size of an encoded offset increases by one byte, the larget value which can be encoded is multiplied by 128, so the representable offsets grow much faster than the size of the section itself. The problem here is that there is no code to ensure the size of the section doesn't decrease. If the size of the relocation section decreases, the relative offsets can increase due to alignment restrictions, so that can force the size of the relocation section to increase again. The end result is an infinite loop; the loop gets cut off after 10 iterations with the message "thunk creation not converged". To avoid this issue, this patch adds padding to the end of the relocation section if its size would decrease. The extra padding is harmless because of the way the format is defined: decoding stops after it reaches the number of relocations specified in the section's header. Differential Revision: https://reviews.llvm.org/D53003 llvm-svn: 344300
Diffstat (limited to 'llvm/test/CodeGen/X86/extract-insert.ll')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud