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 12/14] Fix {INLINE,INTERNAL}_SYSCALL macros for x32


On Tue, Jul 4, 2017 at 1:22 PM, Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
>
> On 04/07/2017 17:09, H.J. Lu wrote:
>> On Tue, Jul 4, 2017 at 12:53 PM, Adhemerval Zanella
>> <adhemerval.zanella@linaro.org> wrote:
>>> From: Adhemerval Zanella <adhemerval.zanella@linaro.com>
>>>
>>> The problem for x32 is the {INTERNAL,INLINE}_SYSCALL C macros explicit
>>> cast the arguments to 'long int', thus passing as 32 bits arguments
>>> that should be passed to 64 bits.
>>>
>>> Previous x32 implementation uses the auto-generated syscalls from
>>> assembly macros (syscalls.list), so the {INTERNAL,INLINE}_SYSCALL
>>> macros are never used with 64 bit argument in x32 (which are
>>> internally broken for this ILP).
>>>
>>> To fix it I used a strategy similar to MIPS64n32 (although both
>>> ABI differs for some syscalls on how top pass 64-bits arguments)
>>> where argument types for kernel call are defined using GCC extension
>>> 'typeof' with a arithmetic operation.  This allows 64-bits arguments
>>> to be defined while 32-bits argument will still passed as 32-bits.
>>>
>>> I also cleanup the {INLINE,INTERNAL}_SYSCALL definition by defining
>>> 'inline_syscallX' instead of constructing the argument passing using
>>> macros (it adds some readability) and removed the ununsed
>>> INTERNAL_SYSCALL_NCS_TYPES define (since the patch idea is exactly to
>>> avoid requiric explicit types passing).
>>>
>>> Tested on x86_64 and x32.
>>>
>>>         * sysdeps/unix/sysv/linux/x86_64/sysdep.h
>>>         (INTERNAL_SYSCALL_NCS_TYPES): Remove define.
>>>         (LOAD_ARGS_0): Likewise.
>>>         (LOAD_ARGS_1): Likewise.
>>>         (LOAD_ARGS_2): Likewise.
>>>         (LOAD_ARGS_3): Likewise.
>>>         (LOAD_ARGS_4): Likewise.
>>>         (LOAD_ARGS_5): Likewise.
>>>         (LOAD_ARGS_6): Likewise.
>>>         (LOAD_REGS_0): Likewise.
>>>         (LOAD_REGS_1): Likewise.
>>>         (LOAD_REGS_2): Likewise.
>>>         (LOAD_REGS_3): Likewise.
>>>         (LOAD_REGS_4): Likewise.
>>>         (LOAD_REGS_5): Likewise.
>>>         (LOAD_REGS_6): Likewise.
>>>         (ASM_ARGS_0): Likewise.
>>>         (ASM_ARGS_1): Likewise.
>>>         (ASM_ARGS_2): Likewise.
>>>         (ASM_ARGS_3): Likewise.
>>>         (ASM_ARGS_4): Likewise.
>>>         (ASM_ARGS_5): Likewise.
>>>         (ASM_ARGS_6): Likewise.
>>>         (LOAD_ARGS_TYPES_1): Likewise.
>>>         (LOAD_ARGS_TYPES_2): Likewise.
>>>         (LOAD_ARGS_TYPES_3): Likewise.
>>>         (LOAD_ARGS_TYPES_4): Likewise.
>>>         (LOAD_ARGS_TYPES_5): Likewise.
>>>         (LOAD_ARGS_TYPES_6): Likewise.
>>>         (LOAD_REGS_TYPES_1): Likewise.
>>>         (LOAD_REGS_TYPES_2): Likewise.
>>>         (LOAD_REGS_TYPES_3): Likewise.
>>>         (LOAD_REGS_TYPES_4): Likewise.
>>>         (LOAD_REGS_TYPES_5): Likewise.
>>>         (LOAD_REGS_TYPES_6): Likewise.
>>>         (TYPEFY): New define.
>>>         (ARGIFY): Likewise.
>>>         (internal_syscall0): Likewise.
>>>         (internal_syscall1): Likewise.
>>>         (internal_syscall2): Likewise.
>>>         (internal_syscall3): Likewise.
>>>         (internal_syscall4): Likewise.
>>>         (internal_syscall5): Likewise.
>>>         (internal_syscall6): Likewise.
>>>         * sysdeps/unix/sysv/linux/x86_64/x32/times.c
>>>         (INTERNAL_SYSCALL_NCS): Remove define.
>>>         (internal_syscall1): Add define.
>>
>> Could you please push your branch to glibc git repo so that I can
>> check out the whole patch series?
>>
>> Thanks.
>
> I have created the azanella/master-not-cancel branch.

x32 patch is OK.

Thanks.

-- 
H.J.


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