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: [x32] Allow R_X86_64_64


On Fri, Aug 12, 2011 at 8:17 AM, Jan Beulich <JBeulich@novell.com> wrote:
>>>> On 12.08.11 at 16:47, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>> On Fri, Aug 12, 2011 at 7:42 AM, Jan Beulich <JBeulich@novell.com> wrote:
>>>>>> On 12.08.11 at 16:02, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>>>> On Fri, Aug 12, 2011 at 6:59 AM, Jan Beulich <JBeulich@novell.com> wrote:
>>>>>>>> On 12.08.11 at 15:22, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>>>>>> On Fri, Aug 12, 2011 at 6:17 AM, Jan Beulich <JBeulich@novell.com> wrote:
>>>>>>>>>> On 12.08.11 at 14:09, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>>>>>>>> On Fri, Aug 12, 2011 at 12:30 AM, Jan Beulich <JBeulich@novell.com> wrote:
>>>>>>>>>>>> On 12.08.11 at 06:37, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>>>>>>>>>> On Mon, Aug 1, 2011 at 3:15 PM, H.J. Lu <hjl.tools@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.
>>>>>
>>>>> For a constant that has more than 32 significant bits???
>>>>>
>>>>
>>>> Can you give me an example in assembly code?
>>>
>>> Something like
>>>
>>> ? ? ? ?.equ ? ?sym, 0x1234567890
>>> ? ? ? ?.global sym
>>>
>>
>> "sym" is truncated to 32bit:
>
> Yes, because of your tying of the ABI to ELF32.

X32 uses ELF32 and won't change.

>> Symbol table '.symtab' contains 5 entries:
>> ? ?Num: ? ?Value ?Size Type ? ?Bind ? Vis ? ? ?Ndx Name
>> ? ? ?0: 00000000 ? ? 0 NOTYPE ?LOCAL ?DEFAULT ?UND
>> ? ? ?1: 00000000 ? ? 0 SECTION LOCAL ?DEFAULT ? ?1
>> ? ? ?2: 00000000 ? ? 0 SECTION LOCAL ?DEFAULT ? ?2
>> ? ? ?3: 00000000 ? ? 0 SECTION LOCAL ?DEFAULT ? ?3
>> ? ? ?4: 34567890 ? ? 0 NOTYPE ?GLOBAL DEFAULT ?ABS sym
>>
>> However, one can write
>>
>> .quad main + 0x8000000
>
> And I suppose that wouldn't work either with your R_X86_64_64
> implied zero-extension...
>

I will investigate.

-- 
H.J.


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