• Clemens Fruhwirth's avatar
    Sign extension hack to work around PC64 relocation limitation for binutils <2.17 for x86_64. · b8a64b8e
    Clemens Fruhwirth authored
    binutils <2.17 can't generate PC64 relocations for x86_64. Hence we
    emit only 32 bit PC relative offsets, and artifically stick a zero in
    front of them to make them 64 bit (see PprMach.sh ppr_item in
    pprDataItem). This works as long as the offset is <32bit AND it's
    positive. This is not the case for offsets in jump tables, they are
    all negative. This hack sign extends them with a MOVSXL instruction
    into the dead index register, then adding the properly sign extended
    offset to the jump table base label giving the correct target address
    for the following jump.
MachCodeGen.hs 156 KB