On Fri, Aug 12, 2011 at 6:17 AM, Jan Beulich <jbeul...@novell.com> wrote: >>>> On 12.08.11 at 14:09, "H.J. Lu" <hjl.to...@gmail.com> wrote: >> On Fri, Aug 12, 2011 at 12:30 AM, Jan Beulich <jbeul...@novell.com> wrote: >>>>>> On 12.08.11 at 06:37, "H.J. Lu" <hjl.to...@gmail.com> wrote: >>>> On Mon, Aug 1, 2011 at 3:15 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>>> Hi, >>>>> >>>>> It turns out that x32 needs R_X86_64_64. One major reason is >>>>> the displacement range of x32 is -2G to +2G. It isn't a problem >>>>> for compiler since only small model is required for x32. >>>>> >>>>> However, to address 0 to 4G directly in assembly code, we have >>>>> to use R_X86_64_64 with movabs. I am checking the follow patch >>>>> into x32 psABI to allow R_X86_64_64. >>>>> >>>>> >>>> >>>> X32 Linker should treats R_X86_64_64 as R_X86_64_32 >>>> zero-extended to 64bit for output. I will update x32 psABI with >>> >>> I'm sorry to say that, but the situation about x32 seems to be >>> getting worse with each change you do, every time again >>> revolving around mixing up ABI specification and a particular >>> implementation thereof. >>> >>> Here, if you need something zero-extended (though I can't see >>> why you would), then you should use a new relocation type. As >>> pointed out before, there are valid possible uses of R_X86_64_64 >>> that would require the semantics of x86-64. >>> >> >> When does x32 need the semantics of x86-64 for R_X86_64_64? > > When referencing an assembler or linker defined constant that > exceeds 32-bit in width. Given that this is a 64-bit architecture > with 32-bit addresses, at least I would expect such to work. >
Yes, it should work just fine for x32 by zero-extending 32bit address to 64bit. -- H.J.