This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v2 5/8] mips: Consolidate INTERNAL_VSYSCALL_CALL
I will commit this shortly if no one opposes, after I tested on the affected
architectures.
On 05/09/2019 17:56, Adhemerval Zanella wrote:
> This patch consolidates the mips, mips64, and mips64-n32
> INTERNAL_VSYSCALL_CALL on a single implementation.
>
> No semantic changes. I checked against a build for mips-linux-gnu,
> mips64-linux-gnu, and mips64-n32-linux-gnu.
>
> * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
> (INTERNAL_VSYSCALL_CALL): Remove.
> * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
> (INTERNAL_VSYSCALL_CALL): Likewise.
> * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
> (INTERNAL_VSYSCALL_CALL): Likewise.
> * sysdeps/unix/sysv/linux/mips/sysdep.h (INTERNAL_VSYSCALL_CALL):
> New macro.
> ---
> sysdeps/unix/sysv/linux/mips/mips32/sysdep.h | 12 ------------
> sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h | 12 ------------
> sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h | 12 ------------
> sysdeps/unix/sysv/linux/mips/sysdep.h | 16 ++++++++++++++++
> 4 files changed, 16 insertions(+), 36 deletions(-)
>
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
> index ebe397b701..bfcb916f15 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
> @@ -349,18 +349,6 @@ libc_hidden_proto (__mips_syscall7, nomips16)
> #define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \
> "$14", "$15", "$24", "$25", "hi", "lo", "memory"
>
> -/* Standard MIPS syscalls have an error flag, and return a positive errno
> - when the error flag is set. Emulate this behaviour for vsyscalls so that
> - the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */
> -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
> - ({ \
> - long _ret = funcptr (args); \
> - err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \
> - if (err) \
> - _ret = -_ret; \
> - _ret; \
> - })
> -
> #endif /* __ASSEMBLER__ */
>
> /* Pointer mangling is not yet supported for MIPS. */
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
> index bb49429c30..49e94a1706 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
> @@ -297,18 +297,6 @@
> #define __SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \
> "$14", "$15", "$24", "$25", "hi", "lo", "memory"
>
> -/* Standard MIPS syscalls have an error flag, and return a positive errno
> - when the error flag is set. Emulate this behaviour for vsyscalls so that
> - the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */
> -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
> - ({ \
> - long _ret = funcptr (args); \
> - err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \
> - if (err) \
> - _ret = -_ret; \
> - _ret; \
> - })
> -
> #endif /* __ASSEMBLER__ */
>
> /* Pointer mangling is not yet supported for MIPS. */
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
> index 84a1ff186b..5911a62e5b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
> @@ -293,18 +293,6 @@
> #define __SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \
> "$14", "$15", "$24", "$25", "hi", "lo", "memory"
>
> -/* Standard MIPS syscalls have an error flag, and return a positive errno
> - when the error flag is set. Emulate this behaviour for vsyscalls so that
> - the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */
> -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
> - ({ \
> - long _ret = funcptr (args); \
> - err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \
> - if (err) \
> - _ret = -_ret; \
> - _ret; \
> - })
> -
> #endif /* __ASSEMBLER__ */
>
> /* Pointer mangling is not yet supported for MIPS. */
> diff --git a/sysdeps/unix/sysv/linux/mips/sysdep.h b/sysdeps/unix/sysv/linux/mips/sysdep.h
> index 58a7244581..77b1f9c2fb 100644
> --- a/sysdeps/unix/sysv/linux/mips/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/mips/sysdep.h
> @@ -22,3 +22,19 @@
> /* List of system calls which are supported as vsyscalls. */
> #define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_gettimeofday"
> #define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_clock_gettime"
> +
> +#ifndef __ASSEMBLER__
> +
> +/* Standard MIPS syscalls have an error flag, and return a positive errno
> + when the error flag is set. Emulate this behaviour for vsyscalls so that
> + the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */
> +#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
> + ({ \
> + long _ret = funcptr (args); \
> + err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \
> + if (err) \
> + _ret = -_ret; \
> + _ret; \
> + })
> +
> +#endif /* __ASSEMBLER__ */
>