This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


>> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]