Remove Binutils<2.17 hack in X86 codegen
The purpose of this ticket is to keep track of an hack that the X86 code generator uses to support binutils<2.17:
HACK: On x86_64 binutils<2.17 is only able to generate PC32 relocations, hence we only get 32-bit offsets in the jump table. As these offsets are always negative we need to properly sign extend them to 64-bit. This hack should be removed in conjunction with the hack in PprMach.hs/pprDataItem once binutils 2.17 is standard.
x86_64: binutils can't handle the R_X86_64_PC64 relocation type, which means we can't do pc-relative 64-bit addresses. Fortunately we're assuming the small memory model, in which all such offsets will fit into 32 bits, so we have to stick to 32-bit offset fields and modify the RTS appropriately
See Note [x86-64-relative] in includes/rts/storage/InfoTables.h
Note [x86-64-relative] There is a complication on the x86_64 platform, where pointeres are 64 bits, but the tools don't support 64-bit relative relocations. However, the default memory model (small) ensures that all symbols have values in the lower 2Gb of the address space, so offsets all fit in 32 bits. Hence we can use 32-bit offset fields.
Somewhere between binutils-2.16.1 and binutils-188.8.131.52.6, support for 64-bit PC-relative relocations was added, so maybe this hackery can go away sometime.
As binutils 2.17 is out since 2011, maybe we could remove this hack now.