summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2016-08-20 19:50:45 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2016-08-20 19:50:45 +0200
commit4dd9e35bfd35d3138bc44169baba098005bad51e (patch)
treea4939c43a9c3fe00eb27f023e14acc5e1fe8808c /sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
parentbd42a4599d1b6f77bcfe1e4f67b7cbd9e1cb2dfd (diff)
parentf76453c31593957fec1a99b986bfa5506618b79c (diff)
Merge commit 'refs/top-bases/t/bigmem' into t/bigmem
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h74
1 files changed, 10 insertions, 64 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
index fa7c8c50e5..c768df1743 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2015 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of the GNU C Library.
@@ -105,7 +105,7 @@
br %r14; \
2: .long rtld_errno-1b
# elif defined _LIBC_REENTRANT
-# ifndef NOT_IN_libc
+# if IS_IN (libc)
# define SYSCALL_ERROR_ERRNO __libc_errno
# else
# define SYSCALL_ERROR_ERRNO errno
@@ -182,7 +182,7 @@
#define INLINE_SYSCALL(name, nr, args...) \
({ \
unsigned int _ret = INTERNAL_SYSCALL (name, , nr, args); \
- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_ret, ), 0)) \
+ if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (_ret, ))) \
{ \
__set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \
_ret = 0xffffffff; \
@@ -281,63 +281,7 @@
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETRES_VSYSCALL 1
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-
-/* This version is for kernels that implement system calls that
- behave like function calls as far as register saving.
- It falls back to the syscall in the case that the vDSO doesn't
- exist or fails for ENOSYS */
-#ifdef SHARED
-# define INLINE_VSYSCALL(name, nr, args...) \
- ({ \
- __label__ out; \
- __label__ iserr; \
- long int _ret; \
- \
- if (__vdso_##name != NULL) \
- { \
- _ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, , nr, ##args); \
- if (!INTERNAL_SYSCALL_ERROR_P (_ret, )) \
- goto out; \
- if (INTERNAL_SYSCALL_ERRNO (_ret, ) != ENOSYS) \
- goto iserr; \
- } \
- \
- _ret = INTERNAL_SYSCALL (name, , nr, ##args); \
- if (INTERNAL_SYSCALL_ERROR_P (_ret, )) \
- { \
- iserr: \
- __set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \
- _ret = -1L; \
- } \
- out: \
- (int) _ret; \
- })
-#else
-# define INLINE_VSYSCALL(name, nr, args...) \
- INLINE_SYSCALL (name, nr, ##args)
-#endif
-
-#ifdef SHARED
-# define INTERNAL_VSYSCALL(name, err, nr, args...) \
- ({ \
- __label__ out; \
- long int _ret; \
- \
- if (__vdso_##name != NULL) \
- { \
- _ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, err, nr, ##args); \
- if (!INTERNAL_SYSCALL_ERROR_P (_ret, err) \
- || INTERNAL_SYSCALL_ERRNO (_ret, err) != ENOSYS) \
- goto out; \
- } \
- _ret = INTERNAL_SYSCALL (name, err, nr, ##args); \
- out: \
- _ret; \
- })
-#else
-# define INTERNAL_VSYSCALL(name, err, nr, args...) \
- INTERNAL_SYSCALL (name, err, nr, ##args)
-#endif
+#define HAVE_GETTIMEOFDAY_VSYSCALL 1
/* This version is for internal uses when there is no desire
to set errno */
@@ -345,14 +289,16 @@
({ \
long int _ret = ENOSYS; \
\
- if (__vdso_##name != NULL) \
- _ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, err, nr, ##args); \
+ __typeof (__vdso_##name) vdsop = __vdso_##name; \
+ PTR_DEMANGLE (vdsop); \
+ if (vdsop != NULL) \
+ _ret = INTERNAL_VSYSCALL_CALL (vdsop, err, nr, ##args); \
else \
err = 1 << 28; \
_ret; \
})
-#define INTERNAL_VSYSCALL_NCS(fn, err, nr, args...) \
+#define INTERNAL_VSYSCALL_CALL(fn, err, nr, args...) \
({ \
DECLARGS_##nr(args) \
register long _ret asm("2"); \
@@ -366,7 +312,7 @@
_ret; })
/* Pointer mangling support. */
-#if defined NOT_IN_libc && defined IS_IN_rtld
+#if IS_IN (rtld)
/* We cannot use the thread descriptor because in ld.so we use setjmp
earlier than the descriptor is initialized. */
#else