This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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] [BZ #19363] Use INTERNAL_SYSCALL_TIMES for Linux times


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?

-- 
H.J.


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