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>
This commit is contained in:
Ulrich Drepper 2000-01-31 06:42:36 +00:00
parent b6aa34eb72
commit 4d76a0ec18
10 changed files with 217 additions and 160 deletions

View File

@ -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 * locale/loadlocale.c (_nl_load_locale): Optimize a bit. Pretty
print. Add checks for _POSIX_MMAPPED_FILES where necessary. print. Add checks for _POSIX_MMAPPED_FILES where necessary.
(_nl_unload_locale): If locale data was mmapped use munmap. (_nl_unload_locale): If locale data was mmapped use munmap.

View File

@ -180,8 +180,8 @@ struct locale_collate_t
struct element_t *mbheads[256]; struct element_t *mbheads[256];
/* Table size of wide character hash table. */ /* Table size of wide character hash table. */
size_t plane_size; uint32_t plane_size;
size_t plane_cnt; uint32_t plane_cnt;
/* Arrays with heads of the list for each of the leading bytes in /* Arrays with heads of the list for each of the leading bytes in
the multibyte sequences. */ the multibyte sequences. */

View File

@ -190,18 +190,16 @@ Otherwise the values of environment variables from the standard
environment are examined (@pxref{Standard Environment}). Which environment are examined (@pxref{Standard Environment}). Which
variables are examined is decided by the @var{flag} parameter of variables are examined is decided by the @var{flag} parameter of
@code{catopen}. If the value is @code{NL_CAT_LOCALE} (which is defined @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 in @file{nl_types.h}) then the @code{catopen} function use the name of
environment variable @code{LC_ALL}, @code{LC_MESSAGES}, and @code{LANG} the locale currently selected for the @code{LC_MESSAGES} category.
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 If @var{flag} is zero the @code{LANG} environment variable is examined.
examined. This is a left-over from the early days of this function This is a left-over from the early days where the concept of the locales
where the other environment variable were not known. had not even reached the level of POSIX locales.
In any case the environment variable should have a value of the form The environment variable and the locale name should have a value of the
@code{@var{lang}[_@var{terr}[.@var{codeset}]]} as explained above. If form @code{@var{lang}[_@var{terr}[.@var{codeset}]]} as explained above.
no environment variable is set the @code{"C"} locale is used which If no environment variable is set the @code{"C"} locale is used which
prevents any translation. prevents any translation.
The return value of the function is in any case a valid string. Either The return value of the function is in any case a valid string. Either

View File

@ -25,54 +25,3 @@ rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait 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

View File

@ -17,8 +17,8 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#ifndef _LINUX_SPARC_SYSDEP_H #ifndef _LINUX_SPARC32_SYSDEP_H
#define _LINUX_SPARC_SYSDEP_H 1 #define _LINUX_SPARC32_SYSDEP_H 1
#include <sysdeps/unix/sparc/sysdep.h> #include <sysdeps/unix/sparc/sysdep.h>
@ -56,20 +56,18 @@
.type C_SYMBOL_NAME(__errno_location),@function; \ .type C_SYMBOL_NAME(__errno_location),@function; \
save %sp,-96,%sp; \ save %sp,-96,%sp; \
call __errno_location; \ call __errno_location; \
nop; \ nop; \
st %i0,[%o0]; \ st %i0,[%o0]; \
restore; \ jmpl %i7+8,%g0; \
retl; \ restore %g0,-1,%o0;
mov -1,%o0;
#else #else
#define SYSCALL_ERROR_HANDLER \ #define SYSCALL_ERROR_HANDLER \
save %sp,-96,%sp; \ save %sp,-96,%sp; \
call __errno_location; \ call __errno_location; \
nop; \ nop; \
st %i0,[%o0]; \ st %i0,[%o0]; \
restore; \ jmpl %i7+8,%g0; \
retl; \ restore %g0,-1,%o0;
mov -1,%o0;
#endif /* PIC */ #endif /* PIC */
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
@ -82,6 +80,32 @@
SYSCALL_ERROR_HANDLER; \ SYSCALL_ERROR_HANDLER; \
9000:; 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 /* __ASSEMBLER__ */
#endif /* linux/sparc/sysdep.h */ #endif /* linux/sparc/sysdep.h */

View File

@ -1,4 +0,0 @@
ifeq ($(subdir),signal)
sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
rt_sigqueueinfo rt_sigaction rt_sigpending
endif

View File

@ -21,16 +21,13 @@
#include <string.h> #include <string.h>
#include <syscall.h> #include <syscall.h>
#include <sysdep.h>
#include <sys/signal.h> #include <sys/signal.h>
#include <errno.h> #include <errno.h>
#include <kernel_sigaction.h> #include <kernel_sigaction.h>
/* SPARC 64bit userland requires a kernel that has rt signals anyway. */ /* 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); static void __rt_sigreturn_stub (void);
int 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 /* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */ real size of the user-level sigset_t. */
ret = __syscall_rt_sigaction (sig, act ? &kact : 0, oact ? &koact : 0, ret = INLINE_SYSCALL (rt_sigaction, 5, sig, act ? &kact : 0,
stub, _NSIG / 8); oact ? &koact : 0, stub, _NSIG / 8);
if (oact && ret >= 0) if (oact && ret >= 0)
{ {

View File

@ -33,33 +33,3 @@ socketpair - socketpair 4 __socketpair socketpair
getresuid - getresuid 3 getresuid getresuid - getresuid 3 getresuid
getresgid - getresgid 3 getresgid 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

View 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. This file is part of the GNU C Library.
Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997. Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
@ -43,53 +43,13 @@
C_LABEL(name); \ C_LABEL(name); \
.type name,@function; .type name,@function;
#ifdef PIC #define SYSCALL_ERROR_HANDLER \
# 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 \
save %sp, -192, %sp; \ save %sp, -192, %sp; \
call __errno_location; \ call __errno_location; \
nop; \ nop; \
st %i0, [%o0]; \ st %i0, [%o0]; \
sub %g0, 1, %i0; \
jmpl %i7+8, %g0; \ jmpl %i7+8, %g0; \
restore restore %g0, -1, %o0
# 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
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
.text; \ .text; \
@ -115,6 +75,30 @@
#define r1 %o1 #define r1 %o1
#define MOVE(x,y) mov x, y #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__ */ #endif /* __ASSEMBLER__ */
/* This is the offset from the %sp to the backing store above the /* This is the offset from the %sp to the backing store above the

View File

@ -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 */