Commit Message
Hi
This patch consolidates the sched_getcpu implementations across all
arches (except tile, which requires its own). This patch removes
the powerpc, x86_64 and x32 specific files and change the default
linux one to use INLINE_VSYSCALL where possible (for ports that
implements it).
For x86 is add some more cleanups:
* There is no need for __syscall_clock_gettime anymore, since the
VSYSCALL_INLINE will call the syscall version directly. So the
fallback mechanism could be removed.
* The x86_64 fallback mechanism is to use the vsyscall, which is
nowadays is not a recommended interface to access the kernel.
The patch removes it and a subsequent patch removes all vsyscall
usage.
* x86_64 and x32 can use the same init-first.c now.
* There is no need to specific static file for sched_getcpu for x32.
Tested on i686, x86_64, and x32. I also check the build for ppc32
and ppc64le.
--
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
(HAVE_GETCPU_VSYSCALL): Define.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
(HAVE_GETCPU_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c: Remove file.
* sysdeps/unix/sysv/linux/sched_getcpu.c (HAVE_VSYSCALL): Define if
HAVE_GETCPU_VSYSCALL and include sysdep-vdso.
(sched_getcpu): Use INLINE_VSYSCALL instead of INLINE_SYSCALL.
* sysdeps/unix/sysv/linux/x86/libc-vdso.h (getcpu): Add vDSO
prototype.
* sysdeps/unix/sysv/linux/x86_64/init-first.c
(__syscall_clock_gettime): Remove prototype.
(__vdso_platform_setup): Remove vsyscall getcpu fallback.
* sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S: Remove file.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list
(__syscall_clock_gettime): Remove defintion.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h (HAVE_GETCPU_VSYSCALL):
Define.
* sysdeps/unix/sysv/linux/x86_64/x32/Makefile: Remove file.
* sysdeps/unix/sysv/linux/x86_64/x32/init-first.c: Likewise.
* sysdeps/unix//sysv/linux/x86_64/x32/sched_getcpu-static.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S: Likewise.
---
--
Comments
Ping.
On 23-04-2015 18:21, Adhemerval Zanella wrote:
> Hi
>
> This patch consolidates the sched_getcpu implementations across all
> arches (except tile, which requires its own). This patch removes
> the powerpc, x86_64 and x32 specific files and change the default
> linux one to use INLINE_VSYSCALL where possible (for ports that
> implements it).
>
> For x86 is add some more cleanups:
>
> * There is no need for __syscall_clock_gettime anymore, since the
> VSYSCALL_INLINE will call the syscall version directly. So the
> fallback mechanism could be removed.
>
> * The x86_64 fallback mechanism is to use the vsyscall, which is
> nowadays is not a recommended interface to access the kernel.
> The patch removes it and a subsequent patch removes all vsyscall
> usage.
>
> * x86_64 and x32 can use the same init-first.c now.
>
> * There is no need to specific static file for sched_getcpu for x32.
>
> Tested on i686, x86_64, and x32. I also check the build for ppc32
> and ppc64le.
>
> --
>
> * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
> (HAVE_GETCPU_VSYSCALL): Define.
> * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
> (HAVE_GETCPU_VSYSCALL): Likewise.
> * sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c: Remove file.
> * sysdeps/unix/sysv/linux/sched_getcpu.c (HAVE_VSYSCALL): Define if
> HAVE_GETCPU_VSYSCALL and include sysdep-vdso.
> (sched_getcpu): Use INLINE_VSYSCALL instead of INLINE_SYSCALL.
> * sysdeps/unix/sysv/linux/x86/libc-vdso.h (getcpu): Add vDSO
> prototype.
> * sysdeps/unix/sysv/linux/x86_64/init-first.c
> (__syscall_clock_gettime): Remove prototype.
> (__vdso_platform_setup): Remove vsyscall getcpu fallback.
> * sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S: Remove file.
> * sysdeps/unix/sysv/linux/x86_64/syscalls.list
> (__syscall_clock_gettime): Remove defintion.
> * sysdeps/unix/sysv/linux/x86_64/sysdep.h (HAVE_GETCPU_VSYSCALL):
> Define.
> * sysdeps/unix/sysv/linux/x86_64/x32/Makefile: Remove file.
> * sysdeps/unix/sysv/linux/x86_64/x32/init-first.c: Likewise.
> * sysdeps/unix//sysv/linux/x86_64/x32/sched_getcpu-static.c: Likewise.
> * sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S: Likewise.
>
> ---
>
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
> index 8bd42ec..f52f1a9 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
> @@ -165,6 +165,7 @@
> /* List of system calls which are supported as vsyscalls. */
> # define HAVE_CLOCK_GETRES_VSYSCALL 1
> # define HAVE_CLOCK_GETTIME_VSYSCALL 1
> +# define HAVE_GETCPU_VSYSCALL 1
>
>
> # define LOADARGS_0(name, dummy) \
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
> index 1bad856..e2205f9 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
> @@ -80,6 +80,7 @@
> /* List of system calls which are supported as vsyscalls. */
> #define HAVE_CLOCK_GETRES_VSYSCALL 1
> #define HAVE_CLOCK_GETTIME_VSYSCALL 1
> +#define HAVE_GETCPU_VSYSCALL 1
>
> /* Define a macro which expands inline into the wrapper code for a system
> call. This use is for internal calls that do not need to handle errors
> diff --git a/sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c b/sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c
> deleted file mode 100644
> index f93be01..0000000
> --- a/sysdeps/unix/sysv/linux/powerpc/sched_getcpu.c
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -/* Copyright (C) 2013-2015 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/>. */
> -
> -#include <sched.h>
> -#include <sysdep.h>
> -#include <sysdep-vdso.h>
> -
> -int
> -sched_getcpu (void)
> -{
> - unsigned int cpu;
> - int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
> -
> - return r == -1 ? r : cpu;
> -}
> diff --git a/sysdeps/unix/sysv/linux/sched_getcpu.c b/sysdeps/unix/sysv/linux/sched_getcpu.c
> index 09f0816..a485d36 100644
> --- a/sysdeps/unix/sysv/linux/sched_getcpu.c
> +++ b/sysdeps/unix/sysv/linux/sched_getcpu.c
> @@ -19,13 +19,17 @@
> #include <sched.h>
> #include <sysdep.h>
>
> +#ifdef HAVE_GETCPU_VSYSCALL
> +# define HAVE_VSYSCALL
> +#endif
> +#include <sysdep-vdso.h>
>
> int
> sched_getcpu (void)
> {
> #ifdef __NR_getcpu
> unsigned int cpu;
> - int r = INLINE_SYSCALL (getcpu, 3, &cpu, NULL, NULL);
> + int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
>
> return r == -1 ? r : cpu;
> #else
> diff --git a/sysdeps/unix/sysv/linux/x86/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/libc-vdso.h
> index fea9c2b..f3a8f07 100644
> --- a/sysdeps/unix/sysv/linux/x86/libc-vdso.h
> +++ b/sysdeps/unix/sysv/linux/x86/libc-vdso.h
> @@ -29,6 +29,8 @@
> extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
> attribute_hidden;
>
> +extern long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *);
> +
> #endif
>
> #endif /* _LIBC_VDSO_H */
> diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c
> index b7bdbd1..d83b04b 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/init-first.c
> +++ b/sysdeps/unix/sysv/linux/x86_64/init-first.c
> @@ -27,25 +27,16 @@ long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
> long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *)
> attribute_hidden;
>
> -extern long int __syscall_clock_gettime (clockid_t, struct timespec *);
> -
> -
> static inline void
> __vdso_platform_setup (void)
> {
> PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
>
> void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
> - if (p == NULL)
> - p = __syscall_clock_gettime;
> PTR_MANGLE (p);
> VDSO_SYMBOL(clock_gettime) = p;
>
> p = _dl_vdso_vsym ("__vdso_getcpu", &linux26);
> - /* If the vDSO is not available we fall back on the old vsyscall. */
> -#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
> - if (p == NULL)
> - p = (void *) VSYSCALL_ADDR_vgetcpu;
> PTR_MANGLE (p);
> VDSO_SYMBOL(getcpu) = p;
> }
> diff --git a/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S b/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S
> deleted file mode 100644
> index b87f803..0000000
> --- a/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S
> +++ /dev/null
> @@ -1,74 +0,0 @@
> -/* Copyright (C) 2007-2015 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/>. */
> -
> -#include <sysdep.h>
> -#include <tls.h>
> -#define _ERRNO_H 1
> -#include <bits/errno.h>
> -#include <kernel-features.h>
> -
> -/* For the calculation see asm/vsyscall.h. */
> -#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
> -
> -
> -ENTRY (sched_getcpu)
> - /* Align stack and create local variable for result. */
> - sub $0x8, %rsp
> - cfi_adjust_cfa_offset(8)
> -
> - movq %rsp, %rdi
> - xorl %esi, %esi
> - movl $VGETCPU_CACHE_OFFSET, %edx
> - addq %fs:0, %rdx
> -
> -#ifdef SHARED
> - movq __vdso_getcpu(%rip), %rax
> - PTR_DEMANGLE (%rax)
> - callq *%rax
> -#else
> -# ifdef __NR_getcpu
> - movl $__NR_getcpu, %eax
> - syscall
> -# ifndef __ASSUME_GETCPU_SYSCALL
> - cmpq $-ENOSYS, %rax
> - jne 1f
> -# endif
> -# endif
> -# ifndef __ASSUME_GETCPU_SYSCALL
> - movq $VSYSCALL_ADDR_vgetcpu, %rax
> - callq *%rax
> -1:
> -# else
> -# ifndef __NR_getcpu
> -# error "cannot happen"
> -# endif
> -# endif
> -#endif
> -
> - /* Local variable is result if the call is successful. */
> - movl (%rsp), %edx
> - /* Restore stack pointer before we might jump to
> - SYSCALL_ERROR_LABEL which returns to the caller. */
> - add $0x8, %rsp
> - cfi_adjust_cfa_offset(-8)
> -
> - cmpq $-4095, %rax
> - jae SYSCALL_ERROR_LABEL
> -
> - movl %edx, %eax
> - ret
> -PSEUDO_END(sched_getcpu)
> diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
> index 2e4135f..b4f2075 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
> @@ -14,7 +14,6 @@ semop - semop i:ipi __semop semop
> semtimedop - semtimedop i:ipip semtimedop
> semget - semget i:iii __semget semget
> semctl - semctl i:iiii __semctl semctl
> -syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime
>
>
> # proper socket implementations:
> diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
> index bea3192..5a62cce 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
> @@ -255,6 +255,7 @@
> /* List of system calls which are supported as vsyscalls. */
> # define HAVE_CLOCK_GETTIME_VSYSCALL 1
> # define HAVE_GETTIMEOFDAY_VSYSCALL 1
> +# define HAVE_GETCPU_VSYSCALL 1
>
> # define LOAD_ARGS_0()
> # define LOAD_REGS_0
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/Makefile b/sysdeps/unix/sysv/linux/x86_64/x32/Makefile
> index ecbdefb..8c3253b 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/Makefile
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/Makefile
> @@ -4,7 +4,3 @@ default-abi := x32
> ifeq ($(subdir),misc)
> sysdep_routines += arch_prctl
> endif
> -
> -ifeq ($(subdir),posix)
> -sysdep_routines += getcpu sched_getcpu-static
> -endif
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c b/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
> deleted file mode 100644
> index 31ec80f..0000000
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
> +++ /dev/null
> @@ -1,39 +0,0 @@
> -/* Initialization code run first thing by the ELF startup code. Linux/x32.
> - Copyright (C) 2012-2015 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_clock_gettime) (clockid_t, struct timespec *)
> - attribute_hidden;
> -
> -static inline void
> -_libc_vdso_platform_setup (void)
> -{
> - PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
> -
> - void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
> - PTR_MANGLE (p);
> - __vdso_clock_gettime = p;
> -}
> -
> -# define VDSO_SETUP _libc_vdso_platform_setup
> -#endif
> -
> -#include <csu/init-first.c>
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu-static.c b/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu-static.c
> deleted file mode 100644
> index 38bbf9a..0000000
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu-static.c
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -#ifndef SHARED
> -#include "../../sched_getcpu.c"
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S b/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S
> deleted file mode 100644
> index 35ad01b..0000000
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/sched_getcpu.S
> +++ /dev/null
> @@ -1,49 +0,0 @@
> -/* Copyright (C) 2012-2015 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 <sysdep.h>
> -#include <tls.h>
> -#define _ERRNO_H 1
> -#include <bits/errno.h>
> -
> -ENTRY (sched_getcpu)
> - /* Align stack and create local variable for result. */
> - sub $0x8, %esp
> - cfi_adjust_cfa_offset(8)
> -
> - mov %esp, %edi
> - xor %esi, %esi
> - mov $VGETCPU_CACHE_OFFSET, %edx
> - add %fs:0, %edx
> -
> - call __getcpu
> -
> - /* Local variable is result if the call is successful. */
> - mov (%rsp), %edx
> - /* Restore stack pointer before we might jump to
> - SYSCALL_ERROR_LABEL which returns to the caller. */
> - add $0x8, %esp
> - cfi_adjust_cfa_offset(-8)
> -
> - cmp $-4095, %eax
> - jae SYSCALL_ERROR_LABEL
> -
> - mov %edx, %eax
> - ret
> -PSEUDO_END(sched_getcpu)
> -#endif
> --
>
@@ -165,6 +165,7 @@
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETRES_VSYSCALL 1
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
+# define HAVE_GETCPU_VSYSCALL 1
# define LOADARGS_0(name, dummy) \
@@ -80,6 +80,7 @@
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETRES_VSYSCALL 1
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
+#define HAVE_GETCPU_VSYSCALL 1
/* Define a macro which expands inline into the wrapper code for a system
call. This use is for internal calls that do not need to handle errors
deleted file mode 100644
@@ -1,29 +0,0 @@
-/* Copyright (C) 2013-2015 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/>. */
-
-#include <sched.h>
-#include <sysdep.h>
-#include <sysdep-vdso.h>
-
-int
-sched_getcpu (void)
-{
- unsigned int cpu;
- int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
-
- return r == -1 ? r : cpu;
-}
@@ -19,13 +19,17 @@
#include <sched.h>
#include <sysdep.h>
+#ifdef HAVE_GETCPU_VSYSCALL
+# define HAVE_VSYSCALL
+#endif
+#include <sysdep-vdso.h>
int
sched_getcpu (void)
{
#ifdef __NR_getcpu
unsigned int cpu;
- int r = INLINE_SYSCALL (getcpu, 3, &cpu, NULL, NULL);
+ int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
return r == -1 ? r : cpu;
#else
@@ -29,6 +29,8 @@
extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
attribute_hidden;
+extern long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *);
+
#endif
#endif /* _LIBC_VDSO_H */
@@ -27,25 +27,16 @@ long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *)
attribute_hidden;
-extern long int __syscall_clock_gettime (clockid_t, struct timespec *);
-
-
static inline void
__vdso_platform_setup (void)
{
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
- if (p == NULL)
- p = __syscall_clock_gettime;
PTR_MANGLE (p);
VDSO_SYMBOL(clock_gettime) = p;
p = _dl_vdso_vsym ("__vdso_getcpu", &linux26);
- /* If the vDSO is not available we fall back on the old vsyscall. */
-#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
- if (p == NULL)
- p = (void *) VSYSCALL_ADDR_vgetcpu;
PTR_MANGLE (p);
VDSO_SYMBOL(getcpu) = p;
}
deleted file mode 100644
@@ -1,74 +0,0 @@
-/* Copyright (C) 2007-2015 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/>. */
-
-#include <sysdep.h>
-#include <tls.h>
-#define _ERRNO_H 1
-#include <bits/errno.h>
-#include <kernel-features.h>
-
-/* For the calculation see asm/vsyscall.h. */
-#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
-
-
-ENTRY (sched_getcpu)
- /* Align stack and create local variable for result. */
- sub $0x8, %rsp
- cfi_adjust_cfa_offset(8)
-
- movq %rsp, %rdi
- xorl %esi, %esi
- movl $VGETCPU_CACHE_OFFSET, %edx
- addq %fs:0, %rdx
-
-#ifdef SHARED
- movq __vdso_getcpu(%rip), %rax
- PTR_DEMANGLE (%rax)
- callq *%rax
-#else
-# ifdef __NR_getcpu
- movl $__NR_getcpu, %eax
- syscall
-# ifndef __ASSUME_GETCPU_SYSCALL
- cmpq $-ENOSYS, %rax
- jne 1f
-# endif
-# endif
-# ifndef __ASSUME_GETCPU_SYSCALL
- movq $VSYSCALL_ADDR_vgetcpu, %rax
- callq *%rax
-1:
-# else
-# ifndef __NR_getcpu
-# error "cannot happen"
-# endif
-# endif
-#endif
-
- /* Local variable is result if the call is successful. */
- movl (%rsp), %edx
- /* Restore stack pointer before we might jump to
- SYSCALL_ERROR_LABEL which returns to the caller. */
- add $0x8, %rsp
- cfi_adjust_cfa_offset(-8)
-
- cmpq $-4095, %rax
- jae SYSCALL_ERROR_LABEL
-
- movl %edx, %eax
- ret
-PSEUDO_END(sched_getcpu)
@@ -14,7 +14,6 @@ semop - semop i:ipi __semop semop
semtimedop - semtimedop i:ipip semtimedop
semget - semget i:iii __semget semget
semctl - semctl i:iiii __semctl semctl
-syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime
# proper socket implementations:
@@ -255,6 +255,7 @@
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1
+# define HAVE_GETCPU_VSYSCALL 1
# define LOAD_ARGS_0()
# define LOAD_REGS_0
@@ -4,7 +4,3 @@ default-abi := x32
ifeq ($(subdir),misc)
sysdep_routines += arch_prctl
endif
-
-ifeq ($(subdir),posix)
-sysdep_routines += getcpu sched_getcpu-static
-endif
deleted file mode 100644
@@ -1,39 +0,0 @@
-/* Initialization code run first thing by the ELF startup code. Linux/x32.
- Copyright (C) 2012-2015 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_clock_gettime) (clockid_t, struct timespec *)
- attribute_hidden;
-
-static inline void
-_libc_vdso_platform_setup (void)
-{
- PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
-
- void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
- PTR_MANGLE (p);
- __vdso_clock_gettime = p;
-}
-
-# define VDSO_SETUP _libc_vdso_platform_setup
-#endif
-
-#include <csu/init-first.c>
deleted file mode 100644
@@ -1,3 +0,0 @@
-#ifndef SHARED
-#include "../../sched_getcpu.c"
-#endif
deleted file mode 100644
@@ -1,49 +0,0 @@
-/* Copyright (C) 2012-2015 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 <sysdep.h>
-#include <tls.h>
-#define _ERRNO_H 1
-#include <bits/errno.h>
-
-ENTRY (sched_getcpu)
- /* Align stack and create local variable for result. */
- sub $0x8, %esp
- cfi_adjust_cfa_offset(8)
-
- mov %esp, %edi
- xor %esi, %esi
- mov $VGETCPU_CACHE_OFFSET, %edx
- add %fs:0, %edx
-
- call __getcpu
-
- /* Local variable is result if the call is successful. */
- mov (%rsp), %edx
- /* Restore stack pointer before we might jump to
- SYSCALL_ERROR_LABEL which returns to the caller. */
- add $0x8, %esp
- cfi_adjust_cfa_offset(-8)
-
- cmp $-4095, %eax
- jae SYSCALL_ERROR_LABEL
-
- mov %edx, %eax
- ret
-PSEUDO_END(sched_getcpu)
-#endif