*** empty log message ***
authorAndreas Schwab <schwab@suse.de>
Sat, 21 Dec 2002 19:37:26 +0000 (19:37 +0000)
committerAndreas Schwab <schwab@suse.de>
Sat, 21 Dec 2002 19:37:26 +0000 (19:37 +0000)
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.

ChangeLog
sysdeps/unix/sysv/linux/m68k/sysdep.h

index 2bad0f6..c4c8ad1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
 2002-12-20  Art Haas  <ahaas@airmail.net>
 
        * sysdeps/gnu/siglist.c: Convert GCC extension initializer
index 1247cc4..005e60f 100644 (file)
@@ -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)                                \