mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	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.
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1017 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1017 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ld {
 | |
|   GLIBC_PRIVATE {
 | |
|     # used for loading by static libraries
 | |
|     _dl_var_init;
 | |
|   }
 | |
| }
 | |
| libc {
 | |
|   # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk.
 | |
|   # When you get an error from errlist-compat.awk, you need to add a new
 | |
|   # version here.  Don't do this blindly, since this means changing the ABI
 | |
|   # for all GNU/Linux configurations.
 | |
| 
 | |
|   GLIBC_2.0 {
 | |
|     #errlist-compat	123
 | |
|     _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
 | |
| 
 | |
|     # Exception handling support functions from libgcc
 | |
|     __register_frame; __register_frame_table; __deregister_frame;
 | |
|     __frame_state_for; __register_frame_info_table;
 | |
| 
 | |
|     # Needed by gcc:
 | |
|     _flush_cache;
 | |
| 
 | |
|     # c*
 | |
|     cachectl; cacheflush;
 | |
| 
 | |
|     # s*
 | |
|     sysmips;
 | |
|   }
 | |
|   GLIBC_2.2 {
 | |
|     #errlist-compat	1134
 | |
|     _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
 | |
| 
 | |
|     # _*
 | |
|     _test_and_set;
 | |
|   }
 | |
|   GLIBC_2.11 {
 | |
|     fallocate64;
 | |
|   }
 | |
|   GLIBC_PRIVATE {
 | |
|     # nptl/pthread_cond_timedwait.c uses INTERNAL_VSYSCALL(clock_gettime).
 | |
|     __vdso_clock_gettime;
 | |
|   }
 | |
| }
 |