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


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