diff options
Diffstat (limited to 'libc/sysdeps/linux/sparc')
| -rw-r--r-- | libc/sysdeps/linux/sparc/Makefile.arch | 2 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/pipe.S | 62 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/sigaction.c | 8 | 
3 files changed, 69 insertions, 3 deletions
diff --git a/libc/sysdeps/linux/sparc/Makefile.arch b/libc/sysdeps/linux/sparc/Makefile.arch index 346f13fe7..9cf0a1afa 100644 --- a/libc/sysdeps/linux/sparc/Makefile.arch +++ b/libc/sysdeps/linux/sparc/Makefile.arch @@ -9,6 +9,6 @@ CSRC := brk.c __syscall_error.c qp_ops.c sigaction.c  SSRC := \  	__longjmp.S fork.S vfork.S clone.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ -	syscall.S urem.S udiv.S umul.S sdiv.S rem.S +	syscall.S urem.S udiv.S umul.S sdiv.S rem.S pipe.S  include $(top_srcdir)libc/sysdeps/linux/Makefile.commonarch diff --git a/libc/sysdeps/linux/sparc/pipe.S b/libc/sysdeps/linux/sparc/pipe.S new file mode 100644 index 000000000..0226e3f5c --- /dev/null +++ b/libc/sysdeps/linux/sparc/pipe.S @@ -0,0 +1,62 @@ +/* Copyright (C) 1999 Free Software Foundation, Inc. +   This file is part of the GNU C Library. +   Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 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 +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.   +  +   Ported to uClibc by: +   Austin Foxley, Ceton Corporation <austinf@cetoncorp.com> + */ + +#include <features.h> +#include <sys/syscall.h> +#include <asm/errno.h> + +.text +.global	pipe +.type	pipe, @function +.align 4 + +pipe: +	save	%sp,-96,%sp + +	/* sanity check arguments */ +	tst	%i0 +	be	.Lerror +	 orcc	%i1,%g0,%o1 +	be	.Lerror +	 mov	%i2,%o0 + +	/* Do the system call */ +	set	__NR_pipe,%g1 +	ta	0x10 +	bcs	.Lerror +	 nop +  +    st %o0,[%i0] +    st %o1,[%i0+4] +	ret +	 restore %o0,%g0,%o0 + +.Lerror: +	call	__errno_location +	 or	%g0,EINVAL,%i0 +	st	%i0,[%o0] +	ret +	 restore %g0,-1,%o0 + +.size pipe,.-pipe +libc_hidden_def(pipe) diff --git a/libc/sysdeps/linux/sparc/sigaction.c b/libc/sysdeps/linux/sparc/sigaction.c index 9dee63b6c..67db1c8f9 100644 --- a/libc/sysdeps/linux/sparc/sigaction.c +++ b/libc/sysdeps/linux/sparc/sigaction.c @@ -38,7 +38,7 @@ int  __libc_sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)  {      int ret; -	struct old_kernel_sigaction kact, koact; +    struct old_kernel_sigaction kact, koact;      unsigned long stub = 0;      int saved_errno = errno; @@ -54,7 +54,11 @@ __libc_sigaction (int sig, __const struct sigaction *act, struct sigaction *oact          kact.sa_restorer = NULL;      }      /* XXX The size argument hopefully will have to be changed to the real size of the user-level sigset_t.  */ -    ret = rt_sigaction(sig, act ? &kact : NULL, oact ? &koact : NULL, stub, _NSIG / 8); +    ret = rt_sigaction(sig,  +	(int)(act ? &kact : NULL),  +	(int)(oact ? &koact : NULL),  +	stub,  +	_NSIG / 8);      if (ret >= 0 || errno != ENOSYS)      {  | 
