[RFC,v5,20/21] RISC-V: Use 64-bit vdso syscalls for RV32
Commit Message
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
* sysdeps/unix/sysv/linux/clock_getres.c: Use 64-bit vdso syscalls
for RV32
* sysdeps/unix/sysv/linux/riscv/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/riscv/libc-vdso.h: Likewise.
---
sysdeps/unix/sysv/linux/clock_getres.c | 4 ++++
sysdeps/unix/sysv/linux/riscv/init-first.c | 19 ++++++++++++-------
sysdeps/unix/sysv/linux/riscv/libc-vdso.h | 9 ++++++---
3 files changed, 22 insertions(+), 10 deletions(-)
@@ -30,6 +30,10 @@
int
__clock_getres (clockid_t clock_id, struct timespec *res)
{
+#ifndef __vdso_clock_getres
+ return INLINE_SYSCALL_CALL (clock_getres, clock_id, res);
+#else
return INLINE_VSYSCALL (clock_getres, 2, clock_id, res);
+#endif
}
weak_alias (__clock_getres, clock_getres)
@@ -22,12 +22,15 @@
long int (*VDSO_SYMBOL (getcpu)) (unsigned int *, unsigned int *, void *)
attribute_hidden;
-long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
-long int (*VDSO_SYMBOL (__clock_gettime64)) (clockid_t, struct __timespec64 *)
+long int (*VDSO_SYMBOL (clock_gettime64)) (clockid_t, struct timespec *)
attribute_hidden;
+
+#if __riscv_xlen == 64
long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
attribute_hidden;
+long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
+ attribute_hidden;
+#endif
static inline void
_libc_vdso_platform_setup (void)
@@ -38,17 +41,19 @@ _libc_vdso_platform_setup (void)
PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p;
- p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
+ p = _dl_vdso_vsym ("__vdso_clock_gettime64", &linux_version);
PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
+ VDSO_SYMBOL (clock_gettime64) = p;
- p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version);
+#if __riscv_xlen == 64
+ p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
PTR_MANGLE (p);
- VDSO_SYMBOL (clock_gettime) = p;
+ VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__vdso_clock_getres", &linux_version);
PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p;
+#endif
}
#define VDSO_SETUP _libc_vdso_platform_setup
@@ -24,11 +24,14 @@
extern long int (*VDSO_SYMBOL (getcpu)) (unsigned int *, unsigned int *, void *)
attribute_hidden;
-extern long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
-extern long int (*VDSO_SYMBOL (__clock_gettime64)) (clockid_t, struct __timespec64 *)
+extern long int (*VDSO_SYMBOL (clock_gettime64)) (clockid_t, struct timespec *)
attribute_hidden;
+
+#if __riscv_xlen == 64
extern long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
attribute_hidden;
+extern long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
+ attribute_hidden;
+#endif
#endif /* _LIBC_VDSO_H */