aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/s390/s390-64
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-10-24 18:49:00 +0000
committerRoland McGrath <roland@gnu.org>2002-10-24 18:49:00 +0000
commit369b849f1a382df2c1ee5d3a997bf318950cf5ab (patch)
treed39acd6080d24649012bd3862ca8837d2438a822 /sysdeps/unix/sysv/linux/s390/s390-64
parent90d598708199f0506e390bb9866e4bdb592f858a (diff)
downloadglibc-369b849f1a382df2c1ee5d3a997bf318950cf5ab.tar
glibc-369b849f1a382df2c1ee5d3a997bf318950cf5ab.tar.gz
glibc-369b849f1a382df2c1ee5d3a997bf318950cf5ab.tar.bz2
glibc-369b849f1a382df2c1ee5d3a997bf318950cf5ab.zip
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (INTERNAL_SYSCALL,
INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (INLINE_SYSCALL): Use that. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (INTERNAL_SYSCALL, INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (INLINE_SYSCALL): Use that. * sysdeps/unix/sysv/linux/x86_64/sysdep.h (INTERNAL_SYSCALL, INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (INLINE_SYSCALL): Use that. * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Include dl-sysdep.h. (SYSCALL_ERROR_HANDLER): Define RTLD_PRIVATE_ERRNO variant. (__INTERNAL_SYSCALL_STRING): Define. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Include dl-sysdep.h. (SYSCALL_ERROR_HANDLER): Define RTLD_PRIVATE_ERRNO variant. (__INTERNAL_SYSCALL_STRING): Define. * sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_SYSCALL): Pass __SYSCALL_STRING to inline_syscall*. (INTERNAL_SYSCALL, INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (inline_syscall0, inline_syscall1, inline_syscall2, inline_syscall3, inline_syscall4, inline_syscall5, inline_syscall6): Add string argument. 2002-10-24 Roland McGrath <roland@redhat.com> * libio/bug-wfflush.c: New file. * libio/Makefile (tests): Add bug-wfflush.
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-64')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h22
1 files changed, 17 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
index 2ad9c6224f..07285377b0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
@@ -115,6 +115,17 @@
#undef INLINE_SYSCALL
#define INLINE_SYSCALL(name, nr, args...) \
({ \
+ unsigned int err = INTERNAL_SYSCALL (name, nr, args); \
+ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (err), 0)) \
+ { \
+ __set_errno (INTERNAL_SYSCALL_ERRNO (err)); \
+ err = -1; \
+ } \
+ (int) err; })
+
+#undef INTERNAL_SYSCALL
+#define INTERNAL_SYSCALL(name, nr, args...) \
+ ({ \
DECLARGS_##nr(args) \
int err; \
asm volatile ( \
@@ -124,13 +135,14 @@
: "=d" (err) \
: "I" (__NR_##name) ASMFMT_##nr \
: "memory", "cc", "2", "3", "4", "5", "6"); \
- if (err >= 0xfffff001) \
- { \
- __set_errno(-err); \
- err = -1; \
- } \
(int) err; })
+#undef INTERNAL_SYSCALL_ERROR_P
+#define INTERNAL_SYSCALL_ERROR_P(val) ((unsigned int) (val) >= 0xfffff001u)
+
+#undef INTERNAL_SYSCALL_ERRNO
+#define INTERNAL_SYSCALL_ERRNO(val) (-(val))
+
#define DECLARGS_0()
#define DECLARGS_1(arg1) \
unsigned long gpr2 = (unsigned long) (arg1);