summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/alpha
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/alpha')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/clone.S54
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ioctl-types.h123
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigprocmask.c65
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/termbits.h2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/xmknod.c1
7 files changed, 53 insertions, 198 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S
index 03ecddc727..261bd81e57 100644
--- a/sysdeps/unix/sysv/linux/alpha/clone.S
+++ b/sysdeps/unix/sysv/linux/alpha/clone.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
@@ -24,15 +24,11 @@
 #define _ERRNO_H	1
 #include <errnos.h>
 
-/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */
 
         .text
 ENTRY(__clone)
-	lda	sp,-16(sp)
-	.frame	sp,16,$26,0
-	/* Save rest of argument registers for varargs-type work.  */
-	stq	a4,0(sp)
-	stq	a5,8(sp)
+	.frame	sp,0,ra,0
 #ifdef PROF
 	.set noat
 	lda	AT, _mcount
@@ -42,24 +38,13 @@ ENTRY(__clone)
 	.prologue 1
 
 	/* Sanity check arguments.  */
-	sextl	a3,a3
 	ldiq	v0,EINVAL
 	beq	a0,$error		/* no NULL function pointers */
 	beq	a1,$error		/* no NULL stack pointers */
-	blt	a3,$error		/* no negative argument counts */
-
-	/* Allocate space on the new stack and copy args over */
-	mov	a3,t0			/* save nargs for thread_start */
-	s8addq	a3,sp,t1
-1:	ldq	t2,-8(t1)
-	subq	t1,8,t1
-	stq	t2,-8(a1)
-	subq	a3,1,a3
-	subq	a1,8,a1
-	bne	a3,1b
 
 	/* Do the system call */
 	mov	a0,pv			/* get fn ptr out of the way */
+	mov	a3,a4			/* get fn arg out of the way */
 	mov	a2,a0
 	ldiq	v0,__NR_clone
 	call_pal PAL_callsys
@@ -68,23 +53,19 @@ ENTRY(__clone)
 	beq	v0,thread_start
 
 	/* Successful return from the parent */
-	lda	sp,16(sp)
 	ret
 
 	/* Something bad happened -- no child created */
 $error:
 	br	gp,1f
 1:	ldgp	gp,0(gp)
-	lda	sp,16(sp)
 	jmp	zero,__syscall_error
 
 	END(__clone)
 
 /* Load up the arguments to the function.  Put this block of code in
    its own function so that we can terminate the stack trace with our
-   debug info.
-
-   At this point we have $t0=nargs, $pv=fn, $sp=&arg[0].  */
+   debug info.  */
 
 	.ent thread_start
 thread_start:
@@ -92,28 +73,8 @@ thread_start:
 	mov	zero,fp
 	.prologue 0
 
-	/* Calculate address of jump into argument loading code */
-	cmple	t0,6,t2		/* no more than 6 args in registers */
-	cmoveq	t2,6,t0
-	br	v0,1f		/* find address of arg0 */
-1:	lda	v0,$arg0-1b(v0)
-	s4addq	t0,zero,t1
-	subq	v0,t1,v0
-	jmp	(v0)
-
-	/* Load the integer register arguments */
-	ldq	a5,40(sp)
-	ldq	a4,32(sp)
-	ldq	a3,24(sp)
-	ldq	a2,16(sp)
-	ldq	a1,8(sp)
-	ldq	a0,0(sp)
-$arg0:
-
-	/* Adjust stack to remove the arguments we just loaded */
-	s8addq	t0,sp,sp
-
 	/* Call the user's function */
+	mov	a4,a0
 	jsr	ra,(pv)
 	ldgp	gp,0(ra)
 
@@ -121,6 +82,9 @@ $arg0:
 	mov	v0,a0
 	jsr	ra,_exit
 
+	/* Die horribly.  */
+	halt
+
 	.end thread_start
 
 weak_alias(__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/alpha/ioctl-types.h b/sysdeps/unix/sysv/linux/alpha/ioctl-types.h
deleted file mode 100644
index c51310f4cd..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/ioctl-types.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Structure types for pre-termios terminal ioctls.  Linux version.
-   Copyright (C) 1996, 1997 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
-   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 _IOCTL_TYPES_H
-#define _IOCTL_TYPES_H 1
-
-/* Get definition of constants for use with `ioctl'.  */
-#include <asm/ioctl.h>
-
-
-#define FIOCLEX		_IO('f', 1)
-#define FIONCLEX	_IO('f', 2)
-#define FIOASYNC	_IOW('f', 125, int)
-#define FIONBIO		_IOW('f', 126, int)
-#define FIONREAD	_IOR('f', 127, int)
-#define TIOCINQ		FIONREAD
-
-#define TIOCGETP	_IOR('t', 8, struct sgttyb)
-#define TIOCSETP	_IOW('t', 9, struct sgttyb)
-#define TIOCSETN	_IOW('t', 10, struct sgttyb)	/* TIOCSETP wo flush */
-
-#define TIOCSETC	_IOW('t', 17, struct tchars)
-#define TIOCGETC	_IOR('t', 18, struct tchars)
-#define TCGETS		_IOR('t', 19, struct termios)
-#define TCSETS		_IOW('t', 20, struct termios)
-#define TCSETSW		_IOW('t', 21, struct termios)
-#define TCSETSF		_IOW('t', 22, struct termios)
-
-#define TCGETA		_IOR('t', 23, struct termio)
-#define TCSETA		_IOW('t', 24, struct termio)
-#define TCSETAW		_IOW('t', 25, struct termio)
-#define TCSETAF		_IOW('t', 28, struct termio)
-
-#define TCSBRK		_IO('t', 29)
-#define TCXONC		_IO('t', 30)
-#define TCFLSH		_IO('t', 31)
-
-#define TIOCSWINSZ	_IOW('t', 103, struct winsize)
-#define TIOCGWINSZ	_IOR('t', 104, struct winsize)
-#define	TIOCSTART	_IO('t', 110)		/* start output, like ^Q */
-#define	TIOCSTOP	_IO('t', 111)		/* stop output, like ^S */
-#define TIOCOUTQ        _IOR('t', 115, int)     /* output queue size */
-
-#define TIOCGLTC	_IOR('t', 116, struct ltchars)
-#define TIOCSLTC	_IOW('t', 117, struct ltchars)
-#define TIOCSPGRP	_IOW('t', 118, int)
-#define TIOCGPGRP	_IOR('t', 119, int)
-
-#define TIOCEXCL	0x540C
-#define TIOCNXCL	0x540D
-#define TIOCSCTTY	0x540E
-
-#define TIOCSTI		0x5412
-#define TIOCMGET	0x5415
-#define TIOCMBIS	0x5416
-#define TIOCMBIC	0x5417
-#define TIOCMSET	0x5418
-# define TIOCM_LE	0x001
-# define TIOCM_DTR	0x002
-# define TIOCM_RTS	0x004
-# define TIOCM_ST	0x008
-# define TIOCM_SR	0x010
-# define TIOCM_CTS	0x020
-# define TIOCM_CAR	0x040
-# define TIOCM_RNG	0x080
-# define TIOCM_DSR	0x100
-# define TIOCM_CD	TIOCM_CAR
-# define TIOCM_RI	TIOCM_RNG
-
-#define TIOCGSOFTCAR	0x5419
-#define TIOCSSOFTCAR	0x541A
-#define TIOCLINUX	0x541C
-#define TIOCCONS	0x541D
-#define TIOCGSERIAL	0x541E
-#define TIOCSSERIAL	0x541F
-#define TIOCPKT		0x5420
-# define TIOCPKT_DATA		 0
-# define TIOCPKT_FLUSHREAD	 1
-# define TIOCPKT_FLUSHWRITE	 2
-# define TIOCPKT_STOP		 4
-# define TIOCPKT_START		 8
-# define TIOCPKT_NOSTOP		16
-# define TIOCPKT_DOSTOP		32
-
-
-#define TIOCNOTTY	0x5422
-#define TIOCSETD	0x5423
-#define TIOCGETD	0x5424
-#define TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TIOCTTYGSTRUCT	0x5426  /* For debugging only */
-
-#define TIOCSERCONFIG	0x5453
-#define TIOCSERGWILD	0x5454
-#define TIOCSERSWILD	0x5455
-#define TIOCGLCKTRMIOS	0x5456
-#define TIOCSLCKTRMIOS	0x5457
-#define TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TIOCSERGETLSR   0x5459 /* Get line status register */
-  /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
-# define TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-#define TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-
-#endif /* ioctl-types.h */
diff --git a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c b/sysdeps/unix/sysv/linux/alpha/sigprocmask.c
index a1d5636fcb..7fb58f1d80 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c
+++ b/sysdeps/unix/sysv/linux/alpha/sigprocmask.c
@@ -1,48 +1,59 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
    Contributed by David Mosberger (davidm@azstarnet.com).
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 #include <signal.h>
 
+/* When there is kernel support for more than 64 signals, we'll have to
+   switch to a new system call convention here.  */
+
 extern unsigned long __osf_sigprocmask (int how, unsigned long newmask);
 
 int
 __sigprocmask (int how, const sigset_t *set, sigset_t *oset)
 {
-  sigset_t setval;
+  unsigned long int setval;
   long result;
 
-  if (set) {
-    setval = *set;
-  } else {
-    sigemptyset(&setval);
-    how = SIG_BLOCK;	/* ensure blocked mask doesn't get changed */
-  }
-  result = __osf_sigprocmask(how, setval);
-  if (result == -1) {
-    /* if there are ever more than 63 signals, we need to recode this
+  if (set)
+    {
+      setval = set->__val[0];
+    }
+  else
+    {
+      setval = 0;
+      how = SIG_BLOCK;	/* ensure blocked mask doesn't get changed */
+    }
+  result = __osf_sigprocmask (how, setval);
+  if (result == -1)
+    /* If there are ever more than 63 signals, we need to recode this
        in assembler since we wouldn't be able to distinguish a mask of
        all 1s from -1, but for now, we're doing just fine... */
     return result;
-  }
-  if (oset) {
-    *oset = result;
-  }
+
+  if (oset)
+    {
+      oset->__val[0] = result;
+      result = _SIGSET_NWORDS;
+      while (--result > 0)
+	oset->__val[result] = 0;
+    }
   return 0;
 }
 
diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
index f476ed595f..3036b2f8ed 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
+++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995.
 
@@ -18,7 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 /* sigsuspend is a special syscall since it needs to dereference the
-   sigset.  */
+   sigset.  This will have to change when we have more than 64 signals.  */
 
 #include <sysdep.h>
 
diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list
index 49cc697489..cf5f439bc4 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscalls.list
+++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list
@@ -26,6 +26,8 @@ llseek		EXTRA	lseek		3	llseek
 # these are actually common with the x86:
 fstatfs		-	fstatfs		2	__fstatfs	fstatfs
 statfs		-	statfs		2	__statfs	statfs
+sys_ustat	ustat	ustat		2	__syscall_ustat
+sys_mknod	xmknod	mknod		3	__syscall_mknod
 
 # override select.S in parent directory:
 select		-	select		5	__select	select
diff --git a/sysdeps/unix/sysv/linux/alpha/termbits.h b/sysdeps/unix/sysv/linux/alpha/termbits.h
index 6cb729f7f8..bcd3ff5d63 100644
--- a/sysdeps/unix/sysv/linux/alpha/termbits.h
+++ b/sysdeps/unix/sysv/linux/alpha/termbits.h
@@ -29,7 +29,7 @@ struct termios
     tcflag_t c_cflag;		/* control mode flags */
     tcflag_t c_lflag;		/* local mode flags */
     cc_t c_cc[NCCS];		/* control characters */
-    cc_t c_line;		/* line discipline (== c_cc[19]) */
+    cc_t c_line;		/* line discipline (== c_cc[33]) */
     speed_t c_ispeed;		/* input speed */
     speed_t c_ospeed;		/* output speed */
   };
diff --git a/sysdeps/unix/sysv/linux/alpha/xmknod.c b/sysdeps/unix/sysv/linux/alpha/xmknod.c
index f4cdd7135a..25de60ce63 100644
--- a/sysdeps/unix/sysv/linux/alpha/xmknod.c
+++ b/sysdeps/unix/sysv/linux/alpha/xmknod.c
@@ -20,6 +20,7 @@
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/sysmacros.h>
 
 extern int __syscall_mknod (const char *, unsigned int, unsigned int);