Linker: ARM: Refactor relocation handling
authorBen Gamari <ben@smart-cactus.org>
Sun, 3 Jan 2016 12:27:58 +0000 (13:27 +0100)
committerBen Gamari <ben@smart-cactus.org>
Sun, 3 Jan 2016 20:09:23 +0000 (21:09 +0100)
commite042582aa2cf03439456c10fb541acdd590069a0
treea7543168e814ed104ce5717f0c1cf628fc0e07ce
parent7d2f41c093c09bdb66ff4c18b811bf75ef31aee5
Linker: ARM: Refactor relocation handling

This refactors handling of R_ARM_CALL, R_ARM_JUMP24, R_ARM_MOVW_NC, and
R_ARM_MOVT relocations to follow the LLVM LLD implementation. The "ELF
for ARM"  specification is (like most documents of this type, sadly) a
bit vague in some areas, so it seems safest to follow the behavior of a
trusted implementation like LLD, which is remarkable in its clarity..

Moreover, we now throw a proper error message when a jump to a symbol
extra is out of range. This is great improvement over the previous
behavior, which ended in a segfault.

See #11340.

Differential Revision: https://phabricator.haskell.org/D1728

(cherry picked from commit d159a51bb0f26aa232432987e88499109002b3f7)
rts/Linker.c