[PATCH 0/5] Add support for R_386_GOT32X/R_X86_64_[REX_]GOTPCRELX

Rafael Espíndola rafael.espindola@gmail.com
Mon Jan 18 18:16:00 GMT 2016


>> The byte stream before the R_X86_64_GOTPCREL location does. Checking
>> for the REX prefix is not that different from checking if the
>> instruction in a mov when converting mov to lea.
>>
>
> For mov to lea, linker doesn't need to rewrite the REX byte.  When linker
> does need to rewrite the REX byte, it must be sure that the byte before
> the opcode is the REX byte, not the part of the displacement of the
> previous instruction.

It needs to convert an 0x8b to an 0x8c. So I guess the unwritten
requirement of R_X86_64_GOTPCREL is that it can only be used at least
2 bytes after the start of an actual instruction, and not, for
example, in a table:

bar:
        .byte 0x8b
        .byte 0x42
        .long bar@GOTPCREL

R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX add far more strict requirements.

Thanks,
Rafael



More information about the Binutils mailing list