mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 02:03:35 +08:00
Add VDSO support to sparc.
* sysdeps/unix/sysv/linux/sparc/init-first.c: New file. * sysdeps/unix/sysv/linux/sparc/libc-vdso.h: New file. * sysdeps/unix/sysv/linux/sparc/Makefile: Add dl-vdso to sysdep_routines in subdir elf. * sysdeps/unix/sysv/linux/sparc/Versions: Add GLIBC_PRIVATE version for __vdso_clock_gettime. * sysdeps/unix/sysv/linux/sparc/sysdep.h (INTERNAL_VSYSCALL_CALL): Define. (HAVE_CLOCK_GETTIME_VSYSCALL): Define. (HAVE_GETTIMEOFDAY_VSYSCALL): Define.
This commit is contained in:
parent
0a271c8f25
commit
94a3a27f5d
11
ChangeLog
11
ChangeLog
@ -1,5 +1,16 @@
|
||||
2018-10-18 David S. Miller <davem@davemloft.net>
|
||||
|
||||
* sysdeps/unix/sysv/linux/sparc/init-first.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sparc/libc-vdso.h: New file.
|
||||
* sysdeps/unix/sysv/linux/sparc/Makefile: Add dl-vdso to
|
||||
sysdep_routines in subdir elf.
|
||||
* sysdeps/unix/sysv/linux/sparc/Versions: Add GLIBC_PRIVATE
|
||||
version for __vdso_clock_gettime.
|
||||
* sysdeps/unix/sysv/linux/sparc/sysdep.h (INTERNAL_VSYSCALL_CALL):
|
||||
Define.
|
||||
(HAVE_CLOCK_GETTIME_VSYSCALL): Define.
|
||||
(HAVE_GETTIMEOFDAY_VSYSCALL): Define.
|
||||
|
||||
* sysdeps/sparc/fpu/libm-test-ulps: Regenerated.
|
||||
|
||||
2018-10-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
@ -7,6 +7,10 @@ librt-routines += rt-sysdep
|
||||
librt-shared-only-routines += rt-sysdep
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),elf)
|
||||
sysdep_routines += dl-vdso
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),sysvipc)
|
||||
sysdep_routines += getshmlba
|
||||
endif
|
||||
|
@ -29,6 +29,10 @@ libc {
|
||||
|
||||
__getshmlba;
|
||||
}
|
||||
GLIBC_PRIVATE {
|
||||
# nptl/pthread_cond_timedwait.c uses INTERNAL_VSYSCALL(clock_gettime).
|
||||
__vdso_clock_gettime;
|
||||
}
|
||||
}
|
||||
|
||||
libpthread {
|
||||
|
46
sysdeps/unix/sysv/linux/sparc/init-first.c
Normal file
46
sysdeps/unix/sysv/linux/sparc/init-first.c
Normal file
@ -0,0 +1,46 @@
|
||||
/* SPARC VDSO initialization
|
||||
Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifdef SHARED
|
||||
# include <dl-vdso.h>
|
||||
# include <libc-vdso.h>
|
||||
|
||||
long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
|
||||
attribute_hidden;
|
||||
long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *)
|
||||
attribute_hidden;
|
||||
|
||||
static inline void
|
||||
_libc_vdso_platform_setup (void)
|
||||
{
|
||||
PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6);
|
||||
|
||||
void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
|
||||
PTR_MANGLE (p);
|
||||
VDSO_SYMBOL (gettimeofday) = p;
|
||||
|
||||
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version);
|
||||
PTR_MANGLE (p);
|
||||
VDSO_SYMBOL (clock_gettime) = p;
|
||||
}
|
||||
|
||||
# define VDSO_SETUP _libc_vdso_platform_setup
|
||||
#endif
|
||||
|
||||
#include <csu/init-first.c>
|
33
sysdeps/unix/sysv/linux/sparc/libc-vdso.h
Normal file
33
sysdeps/unix/sysv/linux/sparc/libc-vdso.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* VDSO function pointer declarations.
|
||||
Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library. If not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _LIBC_VDSO_H
|
||||
#define _LIBC_VDSO_H
|
||||
|
||||
#ifdef SHARED
|
||||
|
||||
# include <sysdep-vdso.h>
|
||||
|
||||
extern long int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
|
||||
attribute_hidden;
|
||||
extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _LIBC_VDSO_H */
|
@ -34,6 +34,17 @@
|
||||
|
||||
#else /* __ASSEMBLER__ */
|
||||
|
||||
#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
|
||||
({ \
|
||||
long _ret = funcptr (args); \
|
||||
err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \
|
||||
_ret; \
|
||||
})
|
||||
|
||||
/* List of system calls which are supported as vsyscalls. */
|
||||
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
|
||||
# define HAVE_GETTIMEOFDAY_VSYSCALL 1
|
||||
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
({ INTERNAL_SYSCALL_DECL(err); \
|
||||
|
Loading…
Reference in New Issue
Block a user