Message ID | 20191217214728.2886-10-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v2,01/16] linux: Fix vDSO macros build with time64 interfaces | expand |
On 18/12/19 3:17 am, Adhemerval Zanella wrote: > Changes from previous version: > > - Rename HAVE_CLOCK_GETTIME_VSYSCALL to > HAVE_CLOCK_GETTIME64_VSYSCALL on 64 bit time_t architectures. > > -- > > No architecture currently defines the vDSO symbol. On archictures typo > with 64-bit time_t the HAVE_CLOCK_GETTIME_VSYSCALL is renamed to > HAVE_CLOCK_GETTIME64_VSYSCALL, it simplifies clock_gettime code. > --- > sysdeps/unix/sysv/linux/aarch64/sysdep.h | 2 +- > sysdeps/unix/sysv/linux/clock_gettime.c | 19 +++++++++++-------- > sysdeps/unix/sysv/linux/dl-vdso-setup.c | 4 ++++ > sysdeps/unix/sysv/linux/dl-vdso-setup.h | 3 +++ > sysdeps/unix/sysv/linux/powerpc/sysdep.h | 4 ++++ > sysdeps/unix/sysv/linux/riscv/sysdep.h | 2 +- > sysdeps/unix/sysv/linux/s390/sysdep.h | 4 ++++ > sysdeps/unix/sysv/linux/sparc/sysdep.h | 6 +++++- > sysdeps/unix/sysv/linux/x86_64/sysdep.h | 2 +- > 9 files changed, 34 insertions(+), 12 deletions(-) OK. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org> > > diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h > index 53b515aab6..26aa2f9779 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h > +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h > @@ -161,7 +161,7 @@ > > /* List of system calls which are supported as vsyscalls. */ > # define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" > -# define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" > +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" > # define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" > > /* Previously AArch64 used the generic version without the libc_hidden_def > diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c > index e895812704..9be1f779e3 100644 > --- a/sysdeps/unix/sysv/linux/clock_gettime.c > +++ b/sysdeps/unix/sysv/linux/clock_gettime.c > @@ -30,21 +30,24 @@ int > __clock_gettime64 (clockid_t clock_id, struct __timespec64 *tp) > { > #ifdef __ASSUME_TIME64_SYSCALLS > - /* 64 bit ABIs or Newer 32-bit ABIs that only support 64-bit time_t. */ > -# ifdef __NR_clock_gettime64 > - return INLINE_SYSCALL_CALL (clock_gettime64, clock_id, tp); > + /* 64 bit ABIs or newer 32-bit ABIs that only support 64-bit time_t. */ > +# ifndef __NR_clock_gettime64 > +# define __NR_clock_gettime64 __NR_clock_gettime > +# endif > +# ifdef HAVE_CLOCK_GETTIME64_VSYSCALL > + return INLINE_VSYSCALL (clock_gettime64, 2, clock_id, tp); > # else > -# ifdef HAVE_CLOCK_GETTIME_VSYSCALL > - return INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); > -# else > - return INLINE_SYSCALL_CALL (clock_gettime, clock_id, tp); > -# endif > + return INLINE_SYSCALL_CALL (clock_gettime64, clock_id, tp); > # endif > #else > int r; > /* Old 32-bit ABI with possible 64-bit time_t support. */ > # ifdef __NR_clock_gettime64 > +# ifdef HAVE_CLOCK_GETTIME64_VSYSCALL > + r = INLINE_VSYSCALL (clock_gettime64, 2, clock_id, tp); > +# else > r = INLINE_SYSCALL_CALL (clock_gettime64, clock_id, tp); > +# endif > if (r == 0 || errno != ENOSYS) > return r; > # endif > diff --git a/sysdeps/unix/sysv/linux/dl-vdso-setup.c b/sysdeps/unix/sysv/linux/dl-vdso-setup.c > index 1069879f1a..b0b692f78c 100644 > --- a/sysdeps/unix/sysv/linux/dl-vdso-setup.c > +++ b/sysdeps/unix/sysv/linux/dl-vdso-setup.c > @@ -45,6 +45,10 @@ > PROCINFO_CLASS int (*_dl_vdso_clock_gettime) (clockid_t, > struct timespec *) RELRO; > #endif > +# ifdef HAVE_CLOCK_GETTIME64_VSYSCALL > +PROCINFO_CLASS int (*_dl_vdso_clock_gettime64) (clockid_t, > + struct __timespec64 *) RELRO; > +#endif > # ifdef HAVE_GETTIMEOFDAY_VSYSCALL > PROCINFO_CLASS int (*_dl_vdso_gettimeofday) (struct timeval *, void *) RELRO; > #endif > diff --git a/sysdeps/unix/sysv/linux/dl-vdso-setup.h b/sysdeps/unix/sysv/linux/dl-vdso-setup.h > index f4e76202fc..8a89e100c8 100644 > --- a/sysdeps/unix/sysv/linux/dl-vdso-setup.h > +++ b/sysdeps/unix/sysv/linux/dl-vdso-setup.h > @@ -26,6 +26,9 @@ setup_vdso_pointers (void) > #ifdef HAVE_CLOCK_GETTIME_VSYSCALL > GLRO(dl_vdso_clock_gettime) = dl_vdso_vsym (HAVE_CLOCK_GETTIME_VSYSCALL); > #endif > +#ifdef HAVE_CLOCK_GETTIME64_VSYSCALL > + GLRO(dl_vdso_clock_gettime64) = dl_vdso_vsym (HAVE_CLOCK_GETTIME64_VSYSCALL); > +#endif > #ifdef HAVE_GETTIMEOFDAY_VSYSCALL > GLRO(dl_vdso_gettimeofday) = dl_vdso_vsym (HAVE_GETTIMEOFDAY_VSYSCALL); > #endif > diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/sysdep.h > index a29f286ad7..c42659a9c4 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/sysdep.h > +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep.h > @@ -21,7 +21,11 @@ > > /* List of system calls which are supported as vsyscalls. */ > #define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" > +#if defined(__PPC64__) || defined(__powerpc64__) > +#define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" > +#else > #define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" > +#endif > #define HAVE_GETCPU_VSYSCALL "__kernel_getcpu" > #define HAVE_TIME_VSYSCALL "__kernel_time" > #define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" > diff --git a/sysdeps/unix/sysv/linux/riscv/sysdep.h b/sysdeps/unix/sysv/linux/riscv/sysdep.h > index bfbcf60feb..7f43595cb0 100644 > --- a/sysdeps/unix/sysv/linux/riscv/sysdep.h > +++ b/sysdeps/unix/sysv/linux/riscv/sysdep.h > @@ -126,7 +126,7 @@ > > /* List of system calls which are supported as vsyscalls. */ > # define HAVE_CLOCK_GETRES_VSYSCALL "__vdso_clock_getres" > -# define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_clock_gettime" > +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" > # define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_gettimeofday" > # define HAVE_GETCPU_VSYSCALL "__vdso_getcpu" > > diff --git a/sysdeps/unix/sysv/linux/s390/sysdep.h b/sysdeps/unix/sysv/linux/s390/sysdep.h > index 97d78e246c..030bd59ad0 100644 > --- a/sysdeps/unix/sysv/linux/s390/sysdep.h > +++ b/sysdeps/unix/sysv/linux/s390/sysdep.h > @@ -21,6 +21,10 @@ > > /* List of system calls which are supported as vsyscalls. */ > #define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" > +#ifdef __s390x__ > +#define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" > +#else > #define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" > +#endif > #define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" > #define HAVE_GETCPU_VSYSCALL "__kernel_getcpu" > diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h > index f38144c912..739f361384 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sysdep.h > +++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h > @@ -45,7 +45,11 @@ > # define VDSO_HASH 61765110 > > /* List of system calls which are supported as vsyscalls. */ > -# define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_clock_gettime" > +# ifdef __arch64__ > +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" > +# else > +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" > +# endif > # define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_gettimeofday" > > #undef INLINE_SYSCALL > diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h > index 965fd4b851..57a64dce31 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h > +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h > @@ -374,7 +374,7 @@ > # define VDSO_HASH 61765110 > > /* List of system calls which are supported as vsyscalls. */ > -# define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_clock_gettime" > +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" > # define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_gettimeofday" > # define HAVE_TIME_VSYSCALL "__vdso_time" > # define HAVE_GETCPU_VSYSCALL "__vdso_getcpu" >
diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h index 53b515aab6..26aa2f9779 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h @@ -161,7 +161,7 @@ /* List of system calls which are supported as vsyscalls. */ # define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" -# define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" # define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" /* Previously AArch64 used the generic version without the libc_hidden_def diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c index e895812704..9be1f779e3 100644 --- a/sysdeps/unix/sysv/linux/clock_gettime.c +++ b/sysdeps/unix/sysv/linux/clock_gettime.c @@ -30,21 +30,24 @@ int __clock_gettime64 (clockid_t clock_id, struct __timespec64 *tp) { #ifdef __ASSUME_TIME64_SYSCALLS - /* 64 bit ABIs or Newer 32-bit ABIs that only support 64-bit time_t. */ -# ifdef __NR_clock_gettime64 - return INLINE_SYSCALL_CALL (clock_gettime64, clock_id, tp); + /* 64 bit ABIs or newer 32-bit ABIs that only support 64-bit time_t. */ +# ifndef __NR_clock_gettime64 +# define __NR_clock_gettime64 __NR_clock_gettime +# endif +# ifdef HAVE_CLOCK_GETTIME64_VSYSCALL + return INLINE_VSYSCALL (clock_gettime64, 2, clock_id, tp); # else -# ifdef HAVE_CLOCK_GETTIME_VSYSCALL - return INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); -# else - return INLINE_SYSCALL_CALL (clock_gettime, clock_id, tp); -# endif + return INLINE_SYSCALL_CALL (clock_gettime64, clock_id, tp); # endif #else int r; /* Old 32-bit ABI with possible 64-bit time_t support. */ # ifdef __NR_clock_gettime64 +# ifdef HAVE_CLOCK_GETTIME64_VSYSCALL + r = INLINE_VSYSCALL (clock_gettime64, 2, clock_id, tp); +# else r = INLINE_SYSCALL_CALL (clock_gettime64, clock_id, tp); +# endif if (r == 0 || errno != ENOSYS) return r; # endif diff --git a/sysdeps/unix/sysv/linux/dl-vdso-setup.c b/sysdeps/unix/sysv/linux/dl-vdso-setup.c index 1069879f1a..b0b692f78c 100644 --- a/sysdeps/unix/sysv/linux/dl-vdso-setup.c +++ b/sysdeps/unix/sysv/linux/dl-vdso-setup.c @@ -45,6 +45,10 @@ PROCINFO_CLASS int (*_dl_vdso_clock_gettime) (clockid_t, struct timespec *) RELRO; #endif +# ifdef HAVE_CLOCK_GETTIME64_VSYSCALL +PROCINFO_CLASS int (*_dl_vdso_clock_gettime64) (clockid_t, + struct __timespec64 *) RELRO; +#endif # ifdef HAVE_GETTIMEOFDAY_VSYSCALL PROCINFO_CLASS int (*_dl_vdso_gettimeofday) (struct timeval *, void *) RELRO; #endif diff --git a/sysdeps/unix/sysv/linux/dl-vdso-setup.h b/sysdeps/unix/sysv/linux/dl-vdso-setup.h index f4e76202fc..8a89e100c8 100644 --- a/sysdeps/unix/sysv/linux/dl-vdso-setup.h +++ b/sysdeps/unix/sysv/linux/dl-vdso-setup.h @@ -26,6 +26,9 @@ setup_vdso_pointers (void) #ifdef HAVE_CLOCK_GETTIME_VSYSCALL GLRO(dl_vdso_clock_gettime) = dl_vdso_vsym (HAVE_CLOCK_GETTIME_VSYSCALL); #endif +#ifdef HAVE_CLOCK_GETTIME64_VSYSCALL + GLRO(dl_vdso_clock_gettime64) = dl_vdso_vsym (HAVE_CLOCK_GETTIME64_VSYSCALL); +#endif #ifdef HAVE_GETTIMEOFDAY_VSYSCALL GLRO(dl_vdso_gettimeofday) = dl_vdso_vsym (HAVE_GETTIMEOFDAY_VSYSCALL); #endif diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/sysdep.h index a29f286ad7..c42659a9c4 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sysdep.h +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep.h @@ -21,7 +21,11 @@ /* List of system calls which are supported as vsyscalls. */ #define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" +#if defined(__PPC64__) || defined(__powerpc64__) +#define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" +#else #define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" +#endif #define HAVE_GETCPU_VSYSCALL "__kernel_getcpu" #define HAVE_TIME_VSYSCALL "__kernel_time" #define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" diff --git a/sysdeps/unix/sysv/linux/riscv/sysdep.h b/sysdeps/unix/sysv/linux/riscv/sysdep.h index bfbcf60feb..7f43595cb0 100644 --- a/sysdeps/unix/sysv/linux/riscv/sysdep.h +++ b/sysdeps/unix/sysv/linux/riscv/sysdep.h @@ -126,7 +126,7 @@ /* List of system calls which are supported as vsyscalls. */ # define HAVE_CLOCK_GETRES_VSYSCALL "__vdso_clock_getres" -# define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_clock_gettime" +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" # define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_gettimeofday" # define HAVE_GETCPU_VSYSCALL "__vdso_getcpu" diff --git a/sysdeps/unix/sysv/linux/s390/sysdep.h b/sysdeps/unix/sysv/linux/s390/sysdep.h index 97d78e246c..030bd59ad0 100644 --- a/sysdeps/unix/sysv/linux/s390/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/sysdep.h @@ -21,6 +21,10 @@ /* List of system calls which are supported as vsyscalls. */ #define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" +#ifdef __s390x__ +#define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" +#else #define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" +#endif #define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" #define HAVE_GETCPU_VSYSCALL "__kernel_getcpu" diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h index f38144c912..739f361384 100644 --- a/sysdeps/unix/sysv/linux/sparc/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h @@ -45,7 +45,11 @@ # define VDSO_HASH 61765110 /* List of system calls which are supported as vsyscalls. */ -# define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_clock_gettime" +# ifdef __arch64__ +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" +# else +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" +# endif # define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_gettimeofday" #undef INLINE_SYSCALL diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h index 965fd4b851..57a64dce31 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h @@ -374,7 +374,7 @@ # define VDSO_HASH 61765110 /* List of system calls which are supported as vsyscalls. */ -# define HAVE_CLOCK_GETTIME_VSYSCALL "__vdso_clock_gettime" +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime" # define HAVE_GETTIMEOFDAY_VSYSCALL "__vdso_gettimeofday" # define HAVE_TIME_VSYSCALL "__vdso_time" # define HAVE_GETCPU_VSYSCALL "__vdso_getcpu"