summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2002-12-21 19:37:26 +0000
committerAndreas Schwab <schwab@suse.de>2002-12-21 19:37:26 +0000
commit257757f8b032bd2913db107b7bbfa76cbce6f9d1 (patch)
treedd135dd3a88f8342406d5a2fd7d3a661b0f74086 /sysdeps
parent1332e84802b4dd0018655411b112999eccaf12c4 (diff)
*** empty log message ***
2002-12-21 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/m68k/sysdep.h (INTERNAL_SYSCALL): Define. (INLINE_SYSCALL): Use it. (INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Define. * sysdeps/unix/sysv/linux/m68k/getpagesize.c: Use INTERNAL_SYSCALL. * sysdeps/unix/sysv/linux/m68k/brk.c: Likewise.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep.h27
1 files changed, 21 insertions, 6 deletions
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h
index 1247cc49f2..005e60ffe1 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep.h
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h
@@ -163,7 +163,21 @@ SYSCALL_ERROR_LABEL: \
/* Define a macro which expands into the inline wrapper code for a system
call. */
#undef INLINE_SYSCALL
-#define INLINE_SYSCALL(name, nr, args...) \
+#define INLINE_SYSCALL(name, nr, args...) \
+ ({ unsigned int _sys_result = INTERNAL_SYSCALL (name, nr, args); \
+ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result), 0)) \
+ { \
+ __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result)); \
+ _sys_result = (unsigned int) -1; \
+ } \
+ (int) _sys_result; })
+
+/* 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
+ normally. It will never touch errno. This returns just what the kernel
+ gave back. */
+#undef INTERNAL_SYSCALL
+#define INTERNAL_SYSCALL(name, nr, args...) \
({ unsigned int _sys_result; \
{ \
LOAD_ARGS_##nr (args) \
@@ -174,13 +188,14 @@ SYSCALL_ERROR_LABEL: \
: "memory"); \
_sys_result = _d0; \
} \
- if (_sys_result >= (unsigned int) -4095) \
- { \
- __set_errno (-_sys_result); \
- _sys_result = (unsigned int) -1; \
- } \
(int) _sys_result; })
+#undef INTERNAL_SYSCALL_ERROR_P
+#define INTERNAL_SYSCALL_ERROR_P(val) ((unsigned int) (val) >= -4095U)
+
+#undef INTERNAL_SYSCALL_ERRNO
+#define INTERNAL_SYSCALL_ERRNO(val) (-(val))
+
#define LOAD_ARGS_0()
#define ASM_ARGS_0
#define LOAD_ARGS_1(a1) \