[PATCH] [BZ #19363] Use INTERNAL_SYSCALL_TIMES for Linux times

Adhemerval Zanella adhemerval.zanella@linaro.org
Thu Dec 17 20:48:00 GMT 2015



On 16-12-2015 19:18, H.J. Lu wrote:
> On Wed, Dec 16, 2015 at 8:46 AM, Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>> On 16-12-2015 12:42, H.J. Lu wrote:
>>> On Wed, Dec 16, 2015 at 6:17 AM, Andreas Schwab <schwab@suse.de> wrote:
>>>> "H.J. Lu" <hjl.tools@gmail.com> writes:
>>>>
>>>>> Then they have to use proper type to hold the return from "syscall".
>>>>
>>>> The proper type is long long which works for both x86_64 and x32.
>>>>
>>>
>>> I opened a syscall (), not "syscall" instruction, bug:
>>>
>>> https://sourceware.org/bugzilla/show_bug.cgi?id=19371
>>>
>>
>> The question is why instead of reimplement each x32 syscall call that
>> requires long long return with specific arch implementations (this
>> very patch idea) we change the x32 syscall return to long long
>> instead?
>>
>> So instead of redefine each INTERNAL_SYSCALL_XXX for x32 we make it
>> work on the current times implementation instead.
> 
> Please think hard on this.  X32 is ILP32 and syscall puts return
> value in 64-bit register RAX.   All, but 3, system calls have 32-bit
> return value with zero upper 32-bits in RAX.  Now RAX has
> 0x80000000.  How do you extend it to 64-bit if syscall returns 64-bit?
> 

I meant the macros at sysdep.h, not the ABI. Instead of internally
using 'long int' to handle the inline assembly, change it to 'long long'
to make it 64-bit for both x86_64 and x32, and let the compiler handle
the truncation if required.



More information about the Libc-alpha mailing list