]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 9 Jan 2003 04:19:03 +0000 (04:19 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 9 Jan 2003 04:19:03 +0000 (04:19 +0000)
2003-01-08  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/unix/sysv/linux/arm/sysdep.h (INTERNAL_SYSCALL,
INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Add err
argument.
(INTERNAL_SYSCALL_DECL): Define.

2003-01-06  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/unix/sysv/linux/ia64/sysdep.h (INTERNAL_SYSCALL,
INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Add err
argument.
(INTERNAL_SYSCALL_DECL): Define.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
(INLINE_SYSCALL): Adjust.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
* elf/dl-misc.c (_dl_debug_vdprintf): Add INTERNAL_SYSCALL_DECL,
add err argument to INTERNAL_SYSCALL* macros.
* sysdeps/unix/sysv/linux/i386/brk.c (__brk): Likewise.
* sysdeps/unix/sysv/linux/i386/system.c (cancel_handler): Likewise.
* sysdeps/unix/sysv/linux/m68k/brk.c (__brk): Likewise.
* sysdeps/unix/sysv/linux/m68k/getpagesize.c  (__getpagesize):
Likewise.
* sysdeps/unix/sysv/linux/sigwait.c (do_sigwait): Likewise.
* sysdeps/unix/sysv/linux/i386/sigaction.c (__libc_sigaction): Use
INLINE_SYSCALL instead of INTERNAL_SYSCALL and setting errno.

23 files changed:
ChangeLog
elf/dl-misc.c
linuxthreads/ChangeLog
linuxthreads/sysdeps/unix/sysv/linux/sigwait.c
nptl/ChangeLog
nptl/init.c
nptl/sysdeps/pthread/pthread_sigmask.c
nptl/sysdeps/unix/sysv/linux/raise.c
sysdeps/unix/sysv/linux/arm/sysdep.h
sysdeps/unix/sysv/linux/i386/brk.c
sysdeps/unix/sysv/linux/i386/sigaction.c
sysdeps/unix/sysv/linux/i386/sysdep.h
sysdeps/unix/sysv/linux/i386/system.c
sysdeps/unix/sysv/linux/ia64/sysdep.h
sysdeps/unix/sysv/linux/m68k/brk.c
sysdeps/unix/sysv/linux/m68k/getpagesize.c
sysdeps/unix/sysv/linux/m68k/sysdep.h
sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
sysdeps/unix/sysv/linux/sigwait.c
sysdeps/unix/sysv/linux/sparc/sysdep.h
sysdeps/unix/sysv/linux/x86_64/sysdep.h

index f28cc7416893e1c924bc0448885df73e545b5f28..357bb218f25dae192f4ebb8ddbd843a04d3d9618 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+2003-01-08  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/arm/sysdep.h (INTERNAL_SYSCALL,
+       INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Add err
+       argument.
+       (INTERNAL_SYSCALL_DECL): Define.
+
+2003-01-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/ia64/sysdep.h (INTERNAL_SYSCALL,
+       INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Add err
+       argument.
+       (INTERNAL_SYSCALL_DECL): Define.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sysdep.h: Likewise.
+       * sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
+       (INLINE_SYSCALL): Adjust.
+       * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
+       * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
+       * elf/dl-misc.c (_dl_debug_vdprintf): Add INTERNAL_SYSCALL_DECL,
+       add err argument to INTERNAL_SYSCALL* macros.
+       * sysdeps/unix/sysv/linux/i386/brk.c (__brk): Likewise.
+       * sysdeps/unix/sysv/linux/i386/system.c (cancel_handler): Likewise.
+       * sysdeps/unix/sysv/linux/m68k/brk.c (__brk): Likewise.
+       * sysdeps/unix/sysv/linux/m68k/getpagesize.c  (__getpagesize):
+       Likewise.
+       * sysdeps/unix/sysv/linux/sigwait.c (do_sigwait): Likewise.
+       * sysdeps/unix/sysv/linux/i386/sigaction.c (__libc_sigaction): Use
+       INLINE_SYSCALL instead of INTERNAL_SYSCALL and setting errno.
+
 2003-01-07  Ulrich Drepper  <drepper@redhat.com>
 
        Unify symbols in user namespace exported by libc.so and libc.a.
index 2f37675b461d984ac1adced04ee61835f08e1807..eacd3a440f2d5a496d361b026472d5ed4a4d263d 100644 (file)
@@ -248,7 +248,8 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
 
   /* Finally write the result.  */
 #ifdef INTERNAL_SYSCALL
-  INTERNAL_SYSCALL (writev, 3, fd, &iov, niov);
+  INTERNAL_SYSCALL_DECL (err);
+  INTERNAL_SYSCALL (writev, err, 3, fd, &iov, niov);
 #elif RTLD_PRIVATE_ERRNO
   /* We have to take this lock just to be sure we don't clobber the private
      errno when it's being used by another thread that cares about it.
index 89c771ed533dd31075d618d3e7b03c9c0d631e5e..0a6e6a65ffcc32c0ab94405c102272f369b70de0 100644 (file)
@@ -1,3 +1,8 @@
+2003-01-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/sigwait.c (do_sigwait): Add
+       INTERNAL_SYSCALL_DECL, add err argument to INTERNAL_SYSCALL* macros.
+
 2003-01-06  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Use
index c0cfb417532cb10e2d8181f3a871e3b3ce443251..fdec09455a97e5df812994359ef2cac7352c9993 100644 (file)
@@ -39,15 +39,16 @@ do_sigwait (const sigset_t *set, int *sig)
   /* XXX The size argument hopefully will have to be changed to the
      real size of the user-level sigset_t.  */
 #ifdef INTERNAL_SYSCALL
-  ret = INTERNAL_SYSCALL (rt_sigtimedwait, 4, CHECK_SIGSET (set),
+  INTERNAL_SYSCALL_DECL (err);
+  ret = INTERNAL_SYSCALL (rt_sigtimedwait, err, 4, CHECK_SIGSET (set),
                          NULL, NULL, _NSIG / 8);
-  if (! INTERNAL_SYSCALL_ERROR_P (ret))
+  if (! INTERNAL_SYSCALL_ERROR_P (ret, err))
     {
       *sig = ret;
       ret = 0;
     }
   else
-    ret = INTERNAL_SYSCALL_ERRNO (ret);
+    ret = INTERNAL_SYSCALL_ERRNO (ret, err);
 #else
   ret = INLINE_SYSCALL (rt_sigtimedwait, 4, CHECK_SIGSET (set),
                        NULL, NULL, _NSIG / 8);
index 3afa3e6754cb8d4c0350f364afe46058272c890d..2b70a747e395fdeaca60ef5c20a0a7b36aeb91ea 100644 (file)
@@ -1,3 +1,10 @@
+2003-01-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Add
+       INTERNAL_SYSCALL_DECL, add err argument to INTERNAL_SYSCALL* macros.
+       * sysdeps/unix/sysv/linux/raise.c (raise): Likewise.
+       * init.c (__pthread_initialize_minimal_internal): Likewise.
+
 2003-01-07  Jakub Jelinek  <jakub@redhat.com>
 
        * pthreadP.h (__pthread_cond_timedwait): Add prototype.
index 6ed65d309eafdacb244cbf972689b5a32fc39b99..7704e9f507664f13d64702c8bb4f5961ddbcb429 100644 (file)
@@ -172,7 +172,8 @@ __pthread_initialize_minimal_internal (void)
 
   /* Minimal initialization of the thread descriptor.  */
   struct pthread *pd = THREAD_SELF;
-  pd->tid = INTERNAL_SYSCALL (set_tid_address, 1, &pd->tid);
+  INTERNAL_SYSCALL_DECL (err);
+  pd->tid = INTERNAL_SYSCALL (set_tid_address, err, 1, &pd->tid);
   THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
   THREAD_SETMEM (pd, user_stack, true);
   if (LLL_LOCK_INITIALIZER != 0)
index 99ec52baa532352603229111849271d9a4ead01b..3a3fa351aaff994d76f7dc7485c946206692bc1e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -44,11 +44,12 @@ pthread_sigmask (how, newmask, oldmask)
 
 #ifdef INTERNAL_SYSCALL
   /* We know that realtime signals are available if NPTL is used.  */
-  int result = INTERNAL_SYSCALL (rt_sigprocmask, 4, how, newmask, oldmask,
-                                _NSIG / 8);
+  INTERNAL_SYSCALL_DECL (err);
+  int result = INTERNAL_SYSCALL (rt_sigprocmask, err, 4, how, newmask,
+                                oldmask, _NSIG / 8);
 
-  return (INTERNAL_SYSCALL_ERROR_P (result)
-         ? INTERNAL_SYSCALL_ERRNO (result)
+  return (INTERNAL_SYSCALL_ERROR_P (result, err)
+         ? INTERNAL_SYSCALL_ERRNO (result, err)
          : 0);
 #else
   return sigprocmask (how, newmask, oldmask) == -1 ? errno : 0;
index e152ba9055c4664e93e8440bc6a56e6e4f6cbf95..24a00b1e4d83b34a42fda855f454c179568e4cda 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -33,7 +33,8 @@ raise (sig)
     {
       /* This system call is not supposed to fail.  */
 #ifdef INTERNAL_SYSCALL
-      selftid = INTERNAL_SYSCALL (gettid, 0);
+      INTERNAL_SYSCALL_DECL (err);
+      selftid = INTERNAL_SYSCALL (gettid, err, 0);
 #else
       selftid = INLINE_SYSCALL (gettid, 0);
 #endif
index e7caaa14806bbf48f1428e0e05b554e06eef8c49..33ce12342ad58f036df90c1dfad90693e8a4fe02 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992,93,95-99,2000,02 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 93, 1995-2000, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
    ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 1997.
@@ -146,8 +146,11 @@ __local_syscall_error:                                             \
        }                                                               \
      (int) _sys_result; })
 
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
 #undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...)                    \
+#define INTERNAL_SYSCALL(name, err, nr, args...)               \
   ({ unsigned int _sys_result;                                 \
      {                                                         \
        register int _a1 asm ("a1");                            \
@@ -161,10 +164,11 @@ __local_syscall_error:                                            \
      (int) _sys_result; })
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned int) (val) >= 0xfffff001u)
+#define INTERNAL_SYSCALL_ERROR_P(val, err) \
+  ((unsigned int) (val) >= 0xfffff001u)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define LOAD_ARGS_0()
 #define ASM_ARGS_0
index c71a1fbf085762353707520a103ee9bc3e37496f..1d26439ede6d68bc1e65d4026b144fb2bc498553 100644 (file)
@@ -1,5 +1,5 @@
 /* brk system call for Linux/i386.
-   Copyright (C) 1995, 1996, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 2000, 2002, 2003 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
@@ -36,7 +36,9 @@ __brk (void *addr)
 {
   void *__unbounded newbrk;
 
-  newbrk = (void *__unbounded) INTERNAL_SYSCALL (brk, 1, __ptrvalue (addr));
+  INTERNAL_SYSCALL_DECL (err);
+  newbrk = (void *__unbounded) INTERNAL_SYSCALL (brk, err, 1,
+                                                __ptrvalue (addr));
 
   __curbrk = newbrk;
 
index 18a5f1ee6585268d5f3736ce7827164df2e778ff..c2f0a0f5d1154f800e3e2e27c2281b3360b2232c 100644 (file)
@@ -131,15 +131,12 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
       k_newact.sa_restorer = &restore;
     }
 
-  result = INTERNAL_SYSCALL (sigaction, 3, sig,
-                            act ? __ptrvalue (&k_newact) : 0,
-                            oact ? __ptrvalue (&k_oldact) : 0);
+  result = INLINE_SYSCALL (sigaction, 3, sig,
+                          act ? __ptrvalue (&k_newact) : 0,
+                          oact ? __ptrvalue (&k_oldact) : 0);
 
   if (result < 0)
-    {
-      __set_errno (-result);
-      return -1;
-    }
+    return -1;
 
   if (oact)
     {
index 25208a00a845f925b49ede73cf516810891fc432..02a78d3514bf94a2ea7ea5c9962ba3638de7c6b2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992,93,95,96,97,98,99,2000,02 Free Software Foundation, Inc.
+/* Copyright (C) 1992,1993,1995-2000,2002,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@gnu.org>, August 1995.
 
@@ -313,10 +313,10 @@ asm (".L__X'%ebx = 1\n\t"
 #undef INLINE_SYSCALL
 #define INLINE_SYSCALL(name, nr, args...) \
   ({                                                                         \
-    unsigned int resultvar = INTERNAL_SYSCALL (name, nr, args);                      \
-    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar), 0))          \
+    unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args);            \
+    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, ), 0))        \
       {                                                                              \
-       __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar));                     \
+       __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, ));                   \
        resultvar = 0xffffffff;                                               \
       }                                                                              \
     (int) resultvar; })
@@ -328,7 +328,7 @@ asm (".L__X'%ebx = 1\n\t"
 #undef INTERNAL_SYSCALL
 #ifdef I386_USE_SYSENTER
 # ifdef SHARED
-#  define INTERNAL_SYSCALL(name, nr, args...) \
+#  define INTERNAL_SYSCALL(name, err, nr, args...) \
   ({                                                                         \
     unsigned int resultvar;                                                  \
     asm volatile (                                                           \
@@ -341,7 +341,7 @@ asm (".L__X'%ebx = 1\n\t"
       ASMFMT_##nr(args) : "memory", "cc");                                   \
     (int) resultvar; })
 # else
-#  define INTERNAL_SYSCALL(name, nr, args...) \
+#  define INTERNAL_SYSCALL(name, err, nr, args...) \
   ({                                                                         \
     unsigned int resultvar;                                                  \
     asm volatile (                                                           \
@@ -354,7 +354,7 @@ asm (".L__X'%ebx = 1\n\t"
     (int) resultvar; })
 # endif
 #else
-# define INTERNAL_SYSCALL(name, nr, args...) \
+# define INTERNAL_SYSCALL(name, err, nr, args...) \
   ({                                                                         \
     unsigned int resultvar;                                                  \
     asm volatile (                                                           \
@@ -367,11 +367,15 @@ asm (".L__X'%ebx = 1\n\t"
     (int) resultvar; })
 #endif
 
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned int) (val) >= 0xfffff001u)
+#define INTERNAL_SYSCALL_ERROR_P(val, err) \
+  ((unsigned int) (val) >= 0xfffff001u)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define LOADARGS_0
 #if defined I386_USE_SYSENTER && defined SHARED
index 69eb2cd2ad19bb30d2b8f4b48f1388d8776357b3..a171541790717ab2c971ecefe35188c40bfebc9d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 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
@@ -56,7 +56,8 @@ cancel_handler (void *arg)
 {
   pid_t child = *(pid_t *) arg;
 
-  INTERNAL_SYSCALL (kill, 2, child, SIGKILL);
+  INTERNAL_SYSCALL_DECL (err);
+  INTERNAL_SYSCALL (kill, err, 2, child, SIGKILL);
 
   TEMP_FAILURE_RETRY (__waitpid (child, NULL, 0));
 
index 0189075e1fdf12a6f9f72509e366ef30be146dc2..07e149e754467254dedd8cf63b7cbd489e83d417 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Jes Sorensen, <Jes.Sorensen@cern.ch>, April 1999.
    Based on code originally written by David Mosberger-Tang
       }                                                                \
     _retval; })
 
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) long int err
+
 #undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...)                    \
+#define INTERNAL_SYSCALL(name, err, nr, args...)               \
   ({                                                           \
     register long _r8 asm ("r8");                              \
     register long _r10 asm ("r10");                            \
                        ASM_ARGS_##nr                           \
                       : "memory" ASM_CLOBBERS_##nr);           \
     _retval = _r8;                                             \
-    if (_r10 == -1)                                            \
-      _retval = -_retval;                                      \
+    err = _r10;                                                        \
     _retval; })
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned long) (val) >= -4095UL)
+#define INTERNAL_SYSCALL_ERROR_P(val, err)     (err == -1)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (val)
 
 #define LOAD_ARGS_0()   do { } while (0)
 #define LOAD_ARGS_1(out0)                              \
index 396b97d945f89d748536ec25e923be75262cfeba..6b2c92852d60bad71f7c076446d65f1bbebe4ffa 100644 (file)
@@ -1,5 +1,5 @@
 /* brk system call for Linux/m68k.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 2003 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
@@ -33,7 +33,8 @@ __brk (void *addr)
 {
   void *newbrk;
 
-  newbrk = (void *) INTERNAL_SYSCALL (brk, 1, addr);
+  INTERNAL_SYSCALL_DECL (err);
+  newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
   __curbrk = newbrk;
 
   if (newbrk < addr)
index 266d81daed667d737b55f31ee0ad4470e117a7c2..10a437b06eec038ea599f75302f9759981c635b2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab <schwab@suse.de>.
 
@@ -37,9 +37,10 @@ __getpagesize ()
     return GL(dl_pagesize);
 
 #ifdef __NR_getpagesize
-  result = INTERNAL_SYSCALL (getpagesize, 0);
+  INTERNAL_SYSCALL_DECL (err);
+  result = INTERNAL_SYSCALL (getpagesize, err, 0);
   /* The only possible error is ENOSYS.  */
-  if (!INTERNAL_SYSCALL_ERROR_P (result))
+  if (!INTERNAL_SYSCALL_ERROR_P (result, err))
     return result;
 #endif
 
index e6fea788b65eb2ffb3f44b598eb9d1f0aa479cfc..125c584eb48597d5bf70c201e144b9d14aa9b5d3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de>,
    December 1995.
@@ -180,20 +180,23 @@ SYSCALL_ERROR_LABEL:                                                            \
    call.  */
 #undef INLINE_SYSCALL
 #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)) \
+  ({ 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));            \
+        __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, ));          \
         _sys_result = (unsigned int) -1;                               \
        }                                                               \
      (int) _sys_result; })
 
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
 /* 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...)            \
+#define INTERNAL_SYSCALL(name, err, nr, args...)       \
   ({ unsigned int _sys_result;                         \
      {                                                 \
        LOAD_ARGS_##nr (args)                           \
@@ -207,10 +210,11 @@ SYSCALL_ERROR_LABEL:                                                            \
      (int) _sys_result; })
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned int) (val) >= -4095U)
+#define INTERNAL_SYSCALL_ERROR_P(val, err)             \
+  ((unsigned int) (val) >= -4095U)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define LOAD_ARGS_0()
 #define ASM_ARGS_0
index 2b3dd03b8d39f8bb82901971a8221cc23e70abc8..e2d599c22bd29374e409e2da8729e334438e4f6e 100644 (file)
@@ -55,7 +55,7 @@
 # include <errno.h>
 
 /* On powerpc a system call basically clobbers the same registers like a
-   function call, with the exception of LR (which is needed for the 
+   function call, with the exception of LR (which is needed for the
    "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal
    an error return status).  */
 
    gave back in the non-error (CR0.SO cleared) case, otherwise (CR0.SO set)
    the negation of the return value in the kernel gets reverted.  */
 
+# undef INTERNAL_SYSCALL_DECL
+# define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
 # undef INTERNAL_SYSCALL
-# define INTERNAL_SYSCALL(name, nr, args...)                           \
+# define INTERNAL_SYSCALL(name, err, nr, args...)                      \
   ({                                                                   \
     register long r0  __asm__ ("r0");                                  \
     register long r3  __asm__ ("r3");                                  \
        : "cr0", "ctr", "memory");                                      \
     (int) r3;                                                          \
   })
-  
+
 # undef INTERNAL_SYSCALL_ERROR_P
-# define INTERNAL_SYSCALL_ERROR_P(val)   ((unsigned long) (val) >= 0xfffff001u)
-  
+# define INTERNAL_SYSCALL_ERROR_P(val, err) \
+  ((unsigned long) (val) >= 0xfffff001u)
+
 # undef INTERNAL_SYSCALL_ERRNO
-# define INTERNAL_SYSCALL_ERRNO(val)     (-(val))
+# define INTERNAL_SYSCALL_ERRNO(val, err)     (-(val))
 
 # define LOADARGS_0(name, dummy) \
        r0 = __NR_##name
index c26d3f1307f0c02bb5732eee6f547dae892059b6..c8d1cdd69869b91d2b0d03c80f60773eef05efb7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000,01,02 Free Software Foundation, Inc.
+/* Copyright (C) 2000,01,02,03 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
 #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))                \
+    unsigned int _ret = INTERNAL_SYSCALL (name, , nr, args);                 \
+    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_ret, ), 0))             \
      {                                                                       \
-       __set_errno (INTERNAL_SYSCALL_ERRNO (err));                           \
-       err = 0xffffffff;                                                     \
+       __set_errno (INTERNAL_SYSCALL_ERRNO (_ret, ));                        \
+       _ret = 0xffffffff;                                                    \
      }                                                                       \
-    (int) err; })
+    (int) _ret; })
+
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
 
 #undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...)                                  \
+#define INTERNAL_SYSCALL(name, err, nr, args...)                             \
   ({                                                                         \
     DECLARGS_##nr(args)                                                              \
-    int err;                                                                 \
+    int _ret;                                                                \
     asm volatile (                                                           \
     LOADARGS_##nr                                                            \
     "svc    %b1\n\t"                                                         \
     "lr     %0,%%r2\n\t"                                                     \
-    : "=d" (err)                                                             \
+    : "=d" (_ret)                                                            \
     : "I" (__NR_##name) ASMFMT_##nr                                          \
     : "memory", "cc", "2", "3", "4", "5", "6");                                      \
-    (int) err; })
+    (int) _ret; })
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned int) (val) >= 0xfffff001u)
+#define INTERNAL_SYSCALL_ERROR_P(val, err)                                   \
+  ((unsigned int) (val) >= 0xfffff001u)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define DECLARGS_0()
 #define DECLARGS_1(arg1) \
index 07285377b087ddf79917d728016b0f5fa5440831..cea75d004a3f09fc4be72e411e43cf75ea0575d3 100644 (file)
 #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))                \
+    unsigned int _ret = INTERNAL_SYSCALL (name, , nr, args);                 \
+    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_ret, ), 0))             \
      {                                                                       \
-       __set_errno (INTERNAL_SYSCALL_ERRNO (err));                           \
-       err = -1;                                                             \
+       __set_errno (INTERNAL_SYSCALL_ERRNO (_ret, ));                        \
+       _ret = -1;                                                            \
      }                                                                       \
-    (int) err; })
+    (int) _ret; })
+
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
 
 #undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...)                                  \
+#define INTERNAL_SYSCALL(name, err, nr, args...)                             \
   ({                                                                         \
     DECLARGS_##nr(args)                                                              \
-    int err;                                                                 \
+    int _ret;                                                                \
     asm volatile (                                                           \
     LOADARGS_##nr                                                            \
     "svc    %b1\n\t"                                                         \
     "lgr    %0,%%r2\n\t"                                                     \
-    : "=d" (err)                                                             \
+    : "=d" (_ret)                                                            \
     : "I" (__NR_##name) ASMFMT_##nr                                          \
     : "memory", "cc", "2", "3", "4", "5", "6");                                      \
-    (int) err; })
+    (int) _ret; })
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned int) (val) >= 0xfffff001u)
+#define INTERNAL_SYSCALL_ERROR_P(val, err)                                   \
+  ((unsigned int) (val) >= 0xfffff001u)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define DECLARGS_0()
 #define DECLARGS_1(arg1) \
index f99c64056f23b93d20697ed582f8d8e5a62a181d..097d62f9cacf9b1596d0114807834b0b845ce01c 100644 (file)
@@ -39,15 +39,16 @@ do_sigwait (const sigset_t *set, int *sig)
   /* XXX The size argument hopefully will have to be changed to the
      real size of the user-level sigset_t.  */
 #ifdef INTERNAL_SYSCALL
-  ret = INTERNAL_SYSCALL (rt_sigtimedwait, 4, CHECK_SIGSET (set),
+  INTERNAL_SYSCALL_DECL (err);
+  ret = INTERNAL_SYSCALL (rt_sigtimedwait, err, 4, CHECK_SIGSET (set),
                          NULL, NULL, _NSIG / 8);
-  if (! INTERNAL_SYSCALL_ERROR_P (ret))
+  if (! INTERNAL_SYSCALL_ERROR_P (ret, err))
     {
       *sig = ret;
       ret = 0;
     }
   else
-    ret = INTERNAL_SYSCALL_ERRNO (ret);
+    ret = INTERNAL_SYSCALL_ERRNO (ret, err);
 #else
   ret = INLINE_SYSCALL (rt_sigtimedwait, 4, CHECK_SIGSET (set),
                        NULL, NULL, _NSIG / 8);
index cc719b48c31936ba10c1bea9a7d180b8ef14a1a3..834edc7ba65f66faa7b0bfef556b7ab9f2eaa80f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2000.
 
 #define INLINE_SYSCALL(name, nr, args...) \
   inline_syscall##nr(__SYSCALL_STRING, name, args)
 
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
 #undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...) \
+#define INTERNAL_SYSCALL(name, err, nr, args...) \
   inline_syscall##nr(__INTERNAL_SYSCALL_STRING, name, args)
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned long) (val) >= -515L)
+#define INTERNAL_SYSCALL_ERROR_P(val, err) \
+  ((unsigned long) (val) >= -515L)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define inline_syscall0(string,name,dummy...)                          \
 ({                                                                     \
index 5c4c7082d1fa3ecb8864fc8bb2a94c0020e51d18..7c0ea9e3112d2784808b20ab55fbd3b044182c9f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001,02 Free Software Foundation, Inc.
+/* Copyright (C) 2001,02,03 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
 #undef INLINE_SYSCALL
 #define INLINE_SYSCALL(name, nr, args...) \
   ({                                                                         \
-    unsigned long resultvar = INTERNAL_SYSCALL (name, nr, args);             \
-    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar), 0))          \
+    unsigned long resultvar = INTERNAL_SYSCALL (name, , nr, args);           \
+    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, ), 0))        \
       {                                                                              \
-       __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar));                     \
+       __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, ));                   \
        resultvar = (unsigned long) -1;                                       \
       }                                                                              \
     (long) resultvar; })
 
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
 #undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...) \
+#define INTERNAL_SYSCALL(name, err, nr, args...) \
   ({                                                                         \
     unsigned long resultvar;                                                 \
     LOAD_ARGS_##nr (args)                                                    \
     (long) resultvar; })
 
 #undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val)  ((unsigned long) (val) >= -4095L)
+#define INTERNAL_SYSCALL_ERROR_P(val, err) \
+  ((unsigned long) (val) >= -4095L)
 
 #undef INTERNAL_SYSCALL_ERRNO
-#define INTERNAL_SYSCALL_ERRNO(val)    (-(val))
+#define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val))
 
 #define LOAD_ARGS_0()
 #define ASM_ARGS_0