Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 31 Jan 2000 06:42:36 +0000 (06:42 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 31 Jan 2000 06:42:36 +0000 (06:42 +0000)
2000-01-30  Ulrich Drepper  <drepper@redhat.com>

* locale/programs/ld-collate.c (struct locale_collate_t): Change
type of plane_size and plane_cnt to uint32_t.
Reported by Jakub Jelinek.

2000-01-29  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
(SYSCALL_ERROR_HANDLER): Optimize.
(__SYSCALL_STRING, __SYSCALL_CLOBBERS): Define.
Include linux/sparc/sysdep.h.
Use a different guard define than linux/sparc/sysdep.h.
* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Remove
stubs for inlined syscalls.
* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
(SYSCALL_ERROR_HANDLER): Optimize.
(__SYSCALL_STRING, __SYSCALL_CLOBBERS): Define.
Include linux/sparc/sysdep.h.
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Remove
stubs for inlined syscalls.
* sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction):
Use INLINE_SYSCALL.
* sysdeps/unix/sysv/linux/sparc/sparc64/Makefile: Remove.
* sysdeps/unix/sysv/linux/sparc/sysdep.h: New file.
2000-01-29  Ulrich Drepper  <drepper@redhat.com>

ChangeLog
locale/programs/ld-collate.c
manual/message.texi
sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
sysdeps/unix/sysv/linux/sparc/sparc64/Makefile [deleted file]
sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
sysdeps/unix/sysv/linux/sparc/sysdep.h [new file with mode: 0644]

index b7a21ef..d478e8a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
-2000-01-29  Ulrich Drepper  <drepper@redhat.com>
+2000-01-30  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale/programs/ld-collate.c (struct locale_collate_t): Change
+       type of plane_size and plane_cnt to uint32_t.
+       Reported by Jakub Jelinek.
+
+2000-01-29  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
+       (SYSCALL_ERROR_HANDLER): Optimize.
+       (__SYSCALL_STRING, __SYSCALL_CLOBBERS): Define.
+       Include linux/sparc/sysdep.h.
+       Use a different guard define than linux/sparc/sysdep.h.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Remove
+       stubs for inlined syscalls.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
+       (SYSCALL_ERROR_HANDLER): Optimize.
+       (__SYSCALL_STRING, __SYSCALL_CLOBBERS): Define.
+       Include linux/sparc/sysdep.h.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Remove
+       stubs for inlined syscalls.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction):
+       Use INLINE_SYSCALL.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/Makefile: Remove.
+       * sysdeps/unix/sysv/linux/sparc/sysdep.h: New file.
 
+2000-01-29  Ulrich Drepper  <drepper@redhat.com>
        * locale/loadlocale.c (_nl_load_locale): Optimize a bit.  Pretty
        print.  Add checks for _POSIX_MMAPPED_FILES where necessary.
        (_nl_unload_locale): If locale data was mmapped use munmap.
index 642eddd..7b85b76 100644 (file)
@@ -180,8 +180,8 @@ struct locale_collate_t
   struct element_t *mbheads[256];
 
   /* Table size of wide character hash table.  */
-  size_t plane_size;
-  size_t plane_cnt;
+  uint32_t plane_size;
+  uint32_t plane_cnt;
 
   /* Arrays with heads of the list for each of the leading bytes in
      the multibyte sequences.  */
index 35ef29d..e7479c3 100644 (file)
@@ -190,18 +190,16 @@ Otherwise the values of environment variables from the standard
 environment are examined (@pxref{Standard Environment}).  Which
 variables are examined is decided by the @var{flag} parameter of
 @code{catopen}.  If the value is @code{NL_CAT_LOCALE} (which is defined
-in @file{nl_types.h}) then the @code{catopen} function examines the
-environment variable @code{LC_ALL}, @code{LC_MESSAGES}, and @code{LANG}
-in this order.  The first variable which is set in the current
-environment will be used.
-
-If @var{flag} is zero only the @code{LANG} environment variable is
-examined.  This is a left-over from the early days of this function
-where the other environment variable were not known.
-
-In any case the environment variable should have a value of the form
-@code{@var{lang}[_@var{terr}[.@var{codeset}]]} as explained above.  If
-no environment variable is set the @code{"C"} locale is used which
+in @file{nl_types.h}) then the @code{catopen} function use the name of
+the locale currently selected for the @code{LC_MESSAGES} category.
+
+If @var{flag} is zero the @code{LANG} environment variable is examined.
+This is a left-over from the early days where the concept of the locales
+had not even reached the level of POSIX locales.
+
+The environment variable and the locale name should have a value of the
+form @code{@var{lang}[_@var{terr}[.@var{codeset}]]} as explained above.
+If no environment variable is set the @code{"C"} locale is used which
 prevents any translation.
 
 The return value of the function is in any case a valid string.  Either
index d08c1a9..c82ae16 100644 (file)
@@ -25,54 +25,3 @@ rt_sigprocmask       -       rt_sigprocmask  4       __syscall_rt_sigprocmask
 rt_sigqueueinfo        -       rt_sigqueueinfo 3       __syscall_rt_sigqueueinfo
 rt_sigsuspend  -       rt_sigsuspend   2       __syscall_rt_sigsuspend
 rt_sigtimedwait        -       rt_sigtimedwait 4       __syscall_rt_sigtimedwait
-s_execve       execve  execve          3       __syscall_execve
-s_fstat64      fxstat64 fstat64        2       __syscall_fstat64
-s_ftruncate64  ftruncate64 ftruncate64 3       __syscall_ftruncate64
-s_getcwd       getcwd  getcwd          2       __syscall_getcwd
-s_getdents     getdents getdents       3       __syscall_getdents
-s_getpriority  getpriority getpriority 2       __syscall_getpriority
-s_getresgid    getresgid getresgid     3       __syscall_getresgid
-s_getresuid    getresuid getresuid     3       __syscall_getresuid
-s_lstat64      lxstat64 lstat64        2       __syscall_lstat64
-s_mmap2                mmap64  mmap2           6       __syscall_mmap2
-s_poll         poll    poll            3       __syscall_poll
-s_pread64      pread64 pread           5       __syscall_pread
-s_ptrace       ptrace  ptrace          4       __syscall_ptrace
-s_pwrite64     pwrite64 pwrite         5       __syscall_pwrite
-s_reboot       reboot  reboot          3       __syscall_reboot
-s_sigaction    sigaction sigaction     3       __syscall_sigaction
-s_sigpending   sigpending sigpending   1       __syscall_sigpending
-s_sigprocmask  sigprocmask sigprocmask 3       __syscall_sigprocmask
-s_sigsuspend   sigsuspend sigsuspend   3       __syscall_sigsuspend
-s_stat64       xstat64 stat64          2       __syscall_stat64
-s_sysctl       sysctl  _sysctl         1       __syscall__sysctl
-s_truncate64   truncate64 truncate64   3       __syscall_truncate64
-s_ustat                ustat   ustat           2       __syscall_ustat
-sys_fstat      fxstat  fstat           2       __syscall_fstat
-sys_lstat      lxstat  lstat           2       __syscall_lstat
-sys_mknod      xmknod  mknod           3       __syscall_mknod
-sys_readv      readv   readv           3       __syscall_readv
-sys_stat       xstat   stat            2       __syscall_stat
-sys_writev     writev  writev          3       __syscall_writev
-s_chown                chown   chown           3       __syscall_chown
-s_chown32      chown   chown32         3       __syscall_chown32
-s_fchown       fchown  fchown          3       __syscall_fchown
-s_fchown32     fchown  fchown32        3       __syscall_fchown32
-s_lchown       lchown  lchown          3       __syscall_lchown
-s_lchown32     lchown  lchown32        3       __syscall_lchown32
-s_getgid       getgid  getgid          0       __syscall_getgid
-s_getgid32     getgid  getgid32        0       __syscall_getgid32
-s_getuid       getuid  getuid          0       __syscall_getuid
-s_getuid32     getuid  getuid32        0       __syscall_getuid32
-s_getgroups32  getgroups getgroups32   2       __syscall_getgroups32
-s_setgroups32  setgroups setgroups32   2       __syscall_setgroups32
-s_setfsgid32   setfsgid setfsgid32     1       __syscall_setfsgid32
-s_setfsuid32   setfsuid setfsuid32     1       __syscall_setfsuid32
-s_setregid32   setregid setregid32     2       __syscall_setregid32
-s_setreuid32   setreuid setreuid32     2       __syscall_setreuid32
-s_getegid      getegid getegid         0       __syscall_getegid
-s_geteuid      geteuid geteuid         0       __syscall_geteuid
-s_getegid32    getegid getegid32       0       __syscall_getegid32
-s_geteuid32    geteuid geteuid32       0       __syscall_geteuid32
-s_setgid32     setgid  setgid32        1       __syscall_setgid32
-s_setuid32     setuid  setuid32        1       __syscall_setuid32
index 003c048..ee235c2 100644 (file)
@@ -17,8 +17,8 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#ifndef _LINUX_SPARC_SYSDEP_H
-#define _LINUX_SPARC_SYSDEP_H 1
+#ifndef _LINUX_SPARC32_SYSDEP_H
+#define _LINUX_SPARC32_SYSDEP_H 1
 
 #include <sysdeps/unix/sparc/sysdep.h>
 
         .type   C_SYMBOL_NAME(__errno_location),@function;     \
        save   %sp,-96,%sp;                                     \
        call   __errno_location;                                \
-       nop;                                                    \
-       st %i0,[%o0];                                           \
-       restore;                                                \
-       retl;                                                   \
-       mov -1,%o0;
+        nop;                                                   \
+       st      %i0,[%o0];                                      \
+       jmpl    %i7+8,%g0;                                      \
+        restore %g0,-1,%o0;
 #else
 #define SYSCALL_ERROR_HANDLER                                  \
-       save %sp,-96,%sp;                                       \
-       call __errno_location;                                  \
+       save    %sp,-96,%sp;                                    \
+       call    __errno_location;                               \
        nop;                                                    \
-       st %i0,[%o0];                                           \
-       restore;                                                \
-       retl;                                                   \
-       mov -1,%o0;
+       st      %i0,[%o0];                                      \
+       jmpl    %i7+8,%g0;                                      \
+        restore %g0,-1,%o0;
 #endif   /* PIC */
 
 #define PSEUDO(name, syscall_name, args)                       \
        SYSCALL_ERROR_HANDLER;                                  \
 9000:;
 
+#else  /* __ASSEMBLER__ */
+
+#define __SYSCALL_STRING                                               \
+       "ta     0x10;"                                                  \
+       "bcs    2f;"                                                    \
+       " nop;"                                                         \
+       "1:"                                                            \
+       ".subsection 2;"                                                \
+       "2:"                                                            \
+       "save   %%sp, -192, %%sp;"                                      \
+       "call   __errno_location;"                                      \
+       " nop;"                                                         \
+       "st     %%i0,[%%o0];"                                           \
+       "ba     1b;"                                                    \
+       " restore %%g0, -1, %%o0;"                                      \
+       ".previous;"
+
+#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g7",               \
+       "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",                 \
+       "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",           \
+       "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",         \
+       "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",         \
+       "cc", "memory"
+
+#include <sysdeps/unix/sysv/linux/sparc/sysdep.h>
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* linux/sparc/sysdep.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile b/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
deleted file mode 100644 (file)
index 9d02ace..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ifeq ($(subdir),signal)
-sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait        \
-                  rt_sigqueueinfo rt_sigaction rt_sigpending
-endif
index 34d3c62..87468fd 100644 (file)
 
 #include <string.h>
 #include <syscall.h>
+#include <sysdep.h>
 #include <sys/signal.h>
 #include <errno.h>
 #include <kernel_sigaction.h>
 
 /* SPARC 64bit userland requires a kernel that has rt signals anyway. */
 
-extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
-                                  struct kernel_sigaction *, unsigned long,
-                                  size_t);
-
 static void __rt_sigreturn_stub (void);
 
 int
@@ -50,8 +47,8 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
 
   /* XXX The size argument hopefully will have to be changed to the
      real size of the user-level sigset_t.  */
-  ret = __syscall_rt_sigaction (sig, act ? &kact : 0, oact ? &koact : 0,
-                               stub, _NSIG / 8);
+  ret = INLINE_SYSCALL (rt_sigaction, 5, sig, act ? &kact : 0,
+                       oact ? &koact : 0, stub, _NSIG / 8);
 
   if (oact && ret >= 0)
     {
index 77c0e26..c4d40f5 100644 (file)
@@ -33,33 +33,3 @@ socketpair   -       socketpair      4       __socketpair    socketpair
 
 getresuid      -       getresuid       3       getresuid
 getresgid      -       getresgid       3       getresgid
-
-# System calls with wrappers.
-rt_sigaction   -       rt_sigaction    4       __syscall_rt_sigaction
-rt_sigpending  -       rt_sigpending   2       __syscall_rt_sigpending
-rt_sigprocmask -       rt_sigprocmask  4       __syscall_rt_sigprocmask
-rt_sigqueueinfo        -       rt_sigqueueinfo 3       __syscall_rt_sigqueueinfo
-rt_sigsuspend  -       rt_sigsuspend   2       __syscall_rt_sigsuspend
-rt_sigtimedwait        -       rt_sigtimedwait 4       __syscall_rt_sigtimedwait
-s_execve       execve  execve          3       __syscall_execve
-s_getcwd       getcwd  getcwd          2       __syscall_getcwd
-s_getdents     getdents getdents       3       __syscall_getdents
-s_getpriority  getpriority getpriority 2       __syscall_getpriority
-s_getresgid    getresgid getresgid     3       __syscall_getresgid
-s_getresuid    getresuid getresuid     3       __syscall_getresuid
-s_ipc          msgget  ipc             5       __syscall_ipc
-s_poll         poll    poll            3       __syscall_poll
-s_ptrace       ptrace  ptrace          4       __syscall_ptrace
-s_reboot       reboot  reboot          3       __syscall_reboot
-s_sigaction    sigaction sigaction     3       __syscall_sigaction
-s_sigpending   sigpending sigpending   1       __syscall_sigpending
-s_sigprocmask  sigprocmask sigprocmask 3       __syscall_sigprocmask
-s_sigsuspend   sigsuspend sigsuspend   3       __syscall_sigsuspend
-s_sysctl       sysctl  _sysctl         1       __syscall__sysctl
-s_ustat                ustat   ustat           2       __syscall_ustat
-sys_fstat      fxstat  fstat           2       __syscall_fstat
-sys_lstat      lxstat  lstat           2       __syscall_lstat
-sys_mknod      xmknod  mknod           3       __syscall_mknod
-sys_readv      readv   readv           3       __syscall_readv
-sys_stat       xstat   stat            2       __syscall_stat
-sys_writev     writev  writev          3       __syscall_writev
index 5a9a4e2..6ce6d01 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
 
        C_LABEL(name);                                                  \
        .type name,@function;
 
-#ifdef PIC
-# ifdef _LIBC_REENTRANT
-#  define SYSCALL_ERROR_HANDLER                                                \
-       save    %sp, -192, %sp;                                         \
-       call    __errno_location;                                       \
-        nop;                                                           \
-       st      %i0,[%o0];                                              \
-       sub     %g0,1,%i0;                                              \
-       jmpl    %i7+8, %g0;                                             \
-        restore
-# else
-#  define SYSCALL_ERROR_HANDLER                                                \
-       .global C_SYMBOL_NAME(errno);                                   \
-       .type C_SYMBOL_NAME(errno),@object;                             \
-       mov     %o7, %g3;                                               \
-  101: call    102f;                                                   \
-       sethi   %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2;               \
-  102: or      %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2;           \
-       sethi   %hi(errno), %o1;                                        \
-       add     %g2, %o7, %l7;                                          \
-       or      %o1, %lo(errno), %o1;                                   \
-       mov     %g3,%o7;                                                \
-       ldx     [%l7+%o1], %g2;                                         \
-       st      %o0, [%g2];                                             \
-       retl;                                                           \
-        sub    %g0, 1, %i0
-# endif
-#else
-# ifdef _LIBC_REENTRANT
-#  define SYSCALL_ERROR_HANDLER                                                \
+#define SYSCALL_ERROR_HANDLER                                          \
        save    %sp, -192, %sp;                                         \
        call    __errno_location;                                       \
         nop;                                                           \
        st      %i0, [%o0];                                             \
-       sub     %g0, 1, %i0;                                            \
        jmpl    %i7+8, %g0;                                             \
-        restore
-# else
-#  define SYSCALL_ERROR_HANDLER                                                \
-       .global C_SYMBOL_NAME(errno);                                   \
-       .type C_SYMBOL_NAME(errno),@object;                             \
-       sethi   %hi(errno), %g1;                                        \
-       st      %i0, [%g1 + %lo(errno)];                                \
-       retl;                                                           \
-        sub    %g0, 1, %i0
-# endif
-#endif
+        restore %g0, -1, %o0
 
 #define PSEUDO(name, syscall_name, args)                               \
        .text;                                                          \
 #define r1              %o1
 #define MOVE(x,y)       mov x, y
 
+#else  /* __ASSEMBLER__ */
+
+#define __SYSCALL_STRING                                               \
+       "ta     0x6d;"                                                  \
+       "bcc,pt %%xcc, 1f;"                                             \
+       " nop;"                                                         \
+       "save   %%sp, -192, %%sp;"                                      \
+       "call   __errno_location;"                                      \
+       " nop;"                                                         \
+       "st     %%i0,[%%o0];"                                           \
+       "restore %%g0, -1, %%o0;"                                       \
+       "1:"
+
+#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g7",               \
+       "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",                 \
+       "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",           \
+       "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",         \
+       "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",         \
+       "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46",         \
+       "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62",         \
+       "cc", "memory"
+
+#include <sysdeps/unix/sysv/linux/sparc/sysdep.h>
+
 #endif /* __ASSEMBLER__ */
 
 /* This is the offset from the %sp to the backing store above the 
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h
new file mode 100644 (file)
index 0000000..5fd9a15
--- /dev/null
@@ -0,0 +1,114 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2000.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _LINUX_SPARC_SYSDEP_H
+#define _LINUX_SPARC_SYSDEP_H 1
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...) inline_syscall##nr(name, args)
+
+#define inline_syscall0(name,dummy...)                                 \
+({                                                                     \
+       register long __o0 __asm__ ("o0");                              \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1) :                                           \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#define inline_syscall1(name,arg1)                                     \
+({                                                                     \
+       register long __o0 __asm__ ("o0") = (long)(arg1);               \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1), "1" (__o0) :                               \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#define inline_syscall2(name,arg1,arg2)                                        \
+({                                                                     \
+       register long __o0 __asm__ ("o0") = (long)(arg1);               \
+       register long __o1 __asm__ ("o1") = (long)(arg2);               \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1), "1" (__o0), "r" (__o1) :                   \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#define inline_syscall3(name,arg1,arg2,arg3)                           \
+({                                                                     \
+       register long __o0 __asm__ ("o0") = (long)(arg1);               \
+       register long __o1 __asm__ ("o1") = (long)(arg2);               \
+       register long __o2 __asm__ ("o2") = (long)(arg3);               \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2) :       \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#define inline_syscall4(name,arg1,arg2,arg3,arg4)                      \
+({                                                                     \
+       register long __o0 __asm__ ("o0") = (long)(arg1);               \
+       register long __o1 __asm__ ("o1") = (long)(arg2);               \
+       register long __o2 __asm__ ("o2") = (long)(arg3);               \
+       register long __o3 __asm__ ("o3") = (long)(arg4);               \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2),        \
+                "r" (__o3) :                                           \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5)                 \
+({                                                                     \
+       register long __o0 __asm__ ("o0") = (long)(arg1);               \
+       register long __o1 __asm__ ("o1") = (long)(arg2);               \
+       register long __o2 __asm__ ("o2") = (long)(arg3);               \
+       register long __o3 __asm__ ("o3") = (long)(arg4);               \
+       register long __o4 __asm__ ("o4") = (long)(arg5);               \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2),        \
+                "r" (__o3), "r" (__o4) :                               \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6)            \
+({                                                                     \
+       register long __o0 __asm__ ("o0") = (long)(arg1);               \
+       register long __o1 __asm__ ("o1") = (long)(arg2);               \
+       register long __o2 __asm__ ("o2") = (long)(arg3);               \
+       register long __o3 __asm__ ("o3") = (long)(arg4);               \
+       register long __o4 __asm__ ("o4") = (long)(arg5);               \
+       register long __o5 __asm__ ("o5") = (long)(arg6);               \
+       register long __g1 __asm__ ("g1") = __NR_##name;                \
+       __asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :          \
+                "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2),        \
+                "r" (__o3), "r" (__o4), "r" (__o5) :                   \
+                __SYSCALL_CLOBBERS);                                   \
+       __o0;                                                           \
+})
+
+#endif /* _LINUX_SPARC_SYSDEP_H */