]> git.ipfire.org Git - thirdparty/glibc.git/commit - sysdeps/unix/sysv/linux/mips/init-first.c
VDSO support for MIPS
authorMatthew Fortune <matthew.fortune@imgtec.com>
Tue, 12 Apr 2016 08:31:06 +0000 (09:31 +0100)
committerMatthew Fortune <matthew.fortune@imgtec.com>
Tue, 12 Apr 2016 10:05:13 +0000 (11:05 +0100)
commitb39d84adff832bddc3e2fc4a1878a7fba6bbb2a1
treee0c8e80c56e73097a75f824e16671a570b195ac4
parent071af4769fcdfe2cd349157b01f27c9571478ace
VDSO support for MIPS

This patch adds support for using the implementations of gettimeofday()
and clock_gettime() provided by the kernel in the VDSO. The VDSO will
always provide clock_gettime() as CLOCK_{REALTIME,MONOTONIC}_COARSE can
be implemented regardless of platform. CLOCK_{REALTIME,MONOTONIC}, along
with gettimeofday(), are only implemented on platforms which make use of
either the CP0 count or GIC as their clocksource. On other platforms,
the VDSO does not provide the __vdso_gettimeofday symbol, as it is
never useful.

The VDSO functions return ENOSYS when they encounter an unsupported
request, in which case glibc should fall back to the standard syscall.

Tested with upstream kernel 4.5 and QEMU emulating Malta.

./vdsotest gettimeofday bench
gettimeofday: syscall: 1021 nsec/call
gettimeofday:    libc: 262 nsec/call
gettimeofday:    vdso: 174 nsec/call

* sysdeps/unix/sysv/linux/mips/Makefile (sysdep_routines):
Include dl-vdso.
* sysdeps/unix/sysv/linux/mips/Versions: Add
__vdso_clock_gettime.
* sysdeps/unix/sysv/linux/mips/init-first.c: New file.
* sysdeps/unix/sysv/linux/mips/libc-vdso.h: New file.
* sysdeps/unix/sysv/linux/mips/mips32/sysdep.h:
(INTERNAL_VSYSCALL_CALL): Define to be compatible with MIPS
definitions of INTERNAL_SYSCALL_{ERROR_P,ERRNO}.
(HAVE_CLOCK_GETTIME_VSYSCALL): Define.
(HAVE_GETTIMEOFDAY_VSYSCALL): Define.
* sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: Likewise.
ChangeLog
sysdeps/unix/sysv/linux/mips/Makefile
sysdeps/unix/sysv/linux/mips/Versions
sysdeps/unix/sysv/linux/mips/init-first.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/libc-vdso.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h