aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-01-31 06:42:36 +0000
committerUlrich Drepper <drepper@redhat.com>2000-01-31 06:42:36 +0000
commit4d76a0ec18ca374bbb5a2cf15b80515e246a135b (patch)
tree59b0a92fc083ec7758b9bd6f4ec21c3f70c5f27d
parentb6aa34eb721a209444df2c0694bb18f8f4a58e47 (diff)
downloadglibc-4d76a0ec18ca374bbb5a2cf15b80515e246a135b.tar
glibc-4d76a0ec18ca374bbb5a2cf15b80515e246a135b.tar.gz
glibc-4d76a0ec18ca374bbb5a2cf15b80515e246a135b.tar.bz2
glibc-4d76a0ec18ca374bbb5a2cf15b80515e246a135b.zip
Update.
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>
-rw-r--r--ChangeLog27
-rw-r--r--locale/programs/ld-collate.c4
-rw-r--r--manual/message.texi22
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list51
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h50
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/Makefile4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c9
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list30
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h70
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sysdep.h114
10 files changed, 219 insertions, 162 deletions
diff --git a/ChangeLog b/ChangeLog
index b7a21ef046..d478e8ae6f 100644
--- 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.
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 642eddd210..7b85b760aa 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -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. */
diff --git a/manual/message.texi b/manual/message.texi
index 35ef29d40b..e7479c3fad 100644
--- a/manual/message.texi
+++ b/manual/message.texi
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
index d08c1a9cac..c82ae16c1a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
index 003c0483a8..ee235c2b43 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
@@ -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>
@@ -56,20 +56,18 @@
.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) \
@@ -82,6 +80,32 @@
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
index 9d02acecc4..0000000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-ifeq ($(subdir),signal)
-sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
- rt_sigqueueinfo rt_sigaction rt_sigpending
-endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
index 34d3c62e86..87468fd409 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
@@ -21,16 +21,13 @@
#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)
{
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index 77c0e2608e..c4d40f5fff 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
index 5a9a4e249b..6ce6d01d7b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
@@ -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.
@@ -43,53 +43,13 @@
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; \
@@ -115,6 +75,30 @@
#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
index 0000000000..5fd9a158b0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h
@@ -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 */