summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-01-20 02:49:49 +0000
committerUlrich Drepper <drepper@redhat.com>1997-01-20 02:49:49 +0000
commit0c5ecdc449ce581b56090758d5bb5673763ea909 (patch)
tree5136298d89a012eedeb1beb35bf0d414b8e5604b /sysdeps/unix/sysv/linux
parent5290baf06cbad096b1a085b2e20031b854e0226c (diff)
update from main arhive 970119cvs/libc-970120
Mon Jan 20 03:02:50 1997 Ulrich Drepper <drepper@cygnus.com> * Make-dist: Update and reformat copyright. * Makeconfig: Likewise. * assert/Makefile: Likewise. * bare/Makefile: Likewise. * ctype/Makefile: Likewise. * dirent/Makefile: Likewise. * gmon/Makefile: Likewise. * gnulib/Makefile: Likewise. * grp/Makefile: Likewise. * hurd/Makefile: Likewise. * intl/Makefile: Likewise. * mach/Makefile: Likewise. * malloc/Makefile: Likewise. * manual/Makefile: Likewise. * math/Makefile: Likewise. * po/Makefile: Likewise. * pwd/Makefile: Likewise. * resource/Makefile: Likewise. * setjmp/Makefile: Likewise. * socket/Makefile: Likewise. * string/Makefile: Likewise. * sunrpc/Makefile: Likewise. * sysdeps/alpha/Makefile: Likewise. * sysdeps/gnu/Makefile: Likewise. * sysdeps/m68k/fpu/switch/Makefile: Likewise. * sysdeps/m68k/fpu/switch/68881-sw.h: Likewise. * sysdeps/m68k/fpu/switch/switch.c: Likewise. * sysdeps/mach/Makefile: Likewise. * sysdeps/hurd/Makefile: Likewise. * sysdeps/sparc/Makefile: Likewise. * sysdeps/standalone/i960/nindy960/Makefile: Likewise. * sysdeps/standalone/m68k/m68020/mvme136/Makefile: Likewise. * sysdeps/unix/common/Makefile: Likewise. * sysdeps/unix/sysv/Makefile: Likewise. * sysdeps/unix/sysv/irix4/Makefile: Likewise. * sysdeps/unix/sysv/sco3.2/Makefile: Likewise. * sysdeps/unix/sysv/sysv4/Makefile: Likewise. * sysdeps/vax/Makefile: Likewise. * sysvipc/Makefile: Likewise. * wcsmbs/Makefile: Likewise. * wctype/Makefile: Likewise. * elf/rtld.c (dl_main): Objects in LD_PRELOAD environment variable are separated according to Sun docs by white space not colon. * locale/C-time.c (_nl_C_LC_TIME): Use empty string to initialize fields which are not defined for the C locale. * sysdeps/m68k/fpu/switch/Makefile: Don't use ansidecl.h in constructed files. * sysdeps/m68k/fpu/switch/68881-sw.h: Likewise. * sysdeps/m68k/fpu/switch/switch.c: Likewise. Sun Jan 19 19:43:31 1997 Andreas Jaeger <aj@arthur.pfalz.de> * time/strptime.c: Provide prototype for strptime_internal. Sun Jan 19 23:46:27 1997 Ulrich Drepper <drepper@cygnus.com> * glibcbug.in: We don't guarantee confidential handling. Set field to always contain `no'. Sun Jan 19 21:28:01 1997 Philippe De Muyter <phdm@info.ucl.ac.be> * intl/explodename.c: Include sys/types.h. * intl/l10nflist.c: Likewise. Sat Jan 18 22:15:26 1997 Richard Henderson <rth@tamu.edu> * config.make.in (install_root): New variable to make it easy to install glibc somewhere other than /. * shlib-versions: alpha-*-linux-* libc=6.1. Since sigset_t no longer fits in a register, we can't pass in the thread's initial mask so easily. Take this opportunity to simplify the clone implementation by only accepting a single void* argument. * sysdeps/unix/sysv/linux/alpha/clone.S: Only take one argument. * sysdeps/unix/sysv/linux/i386/clone.S: Likewise. * sysdeps/unix/sysv/linux/m68k/clone.S: Likewise. * sysdeps/unix/sysv/linux/sparc/clone.S: Likewise. * sysdeps/unix/sysv/linux/schedbits.h: Update clone prototypes. * sysdeps/unix/sysv/linux/alpha/ioctl-types.h: Remove. Default Linux version should be sufficient. * sysdeps/unix/sysv/linux/alpha/sigprocmask.c: The osf_sigprocmask system call wants the sigset dereferenced. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add entries for __syscall_ustat and __syscall_xmknod. * sysdeps/unix/sysv/linux/alpha/xmknod.c: Include sys/sysmacros.h. * sysdeps/unix/sysv/linux/sigset.h: Use longs instead of ints. * sysdeps/unix/sysv/linux/tcsetattr.c: Fix pointer dereferences. * sysdeps/unix/sysv/linux/alpha/sigsuspend.c: Add comment about dependency to kernel type. * sysdeps/unix/sysv/linux/alpha/termbits.h: Correct comment.
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-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
-rw-r--r--sysdeps/unix/sysv/linux/i386/clone.S47
-rw-r--r--sysdeps/unix/sysv/linux/m68k/clone.S41
-rw-r--r--sysdeps/unix/sysv/linux/schedbits.h24
-rw-r--r--sysdeps/unix/sysv/linux/sigset.h37
-rw-r--r--sysdeps/unix/sysv/linux/sparc/clone.S63
-rw-r--r--sysdeps/unix/sysv/linux/tcsetattr.c4
13 files changed, 147 insertions, 320 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);
diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S
index 7e02f76dfe..541ae10f6a 100644
--- a/sysdeps/unix/sysv/linux/i386/clone.S
+++ b/sysdeps/unix/sysv/linux/i386/clone.S
@@ -1,20 +1,21 @@
-/* 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)
-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. */
/* clone() is even more special than fork() as it mucks with stacks
and invokes a function in the right context after its all over. */
@@ -23,7 +24,7 @@ Cambridge, MA 02139, USA. */
#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)
@@ -35,20 +36,12 @@ ENTRY(__clone)
movl 8(%esp),%ecx /* no NULL stack pointers */
testl %ecx,%ecx
jz syscall_error
- movl 16(%esp),%edx /* no negative argument counts */
- testl %edx,%edx
- js syscall_error
- /* Allocate space on the new stack and copy args over */
- movl %edx,%eax
- negl %eax
- lea -4(%ecx,%eax,4),%ecx
- jz 2f
-1: movl 16(%esp,%edx,4),%eax
- movl %eax,0(%ecx,%edx,4)
- dec %edx
- jnz 1b
-2:
+ /* Insert the argument onto the new stack. */
+ subl $-8,%ecx
+ movl 16(%esp),%eax /* no negative argument counts */
+ movl %eax,4(%ecx)
+
/* Save the function pointer as the zeroth argument.
It will be popped off in the child in the ebx frobbing below. */
movl 4(%esp),%eax
diff --git a/sysdeps/unix/sysv/linux/m68k/clone.S b/sysdeps/unix/sysv/linux/m68k/clone.S
index 4465dd8f68..ef9716d979 100644
--- a/sysdeps/unix/sysv/linux/m68k/clone.S
+++ b/sysdeps/unix/sysv/linux/m68k/clone.S
@@ -1,20 +1,20 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
-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. */
/* clone is even more special than fork as it mucks with stacks
and invokes a function in the right context after its all over. */
@@ -23,7 +23,7 @@ Cambridge, MA 02139, USA. */
#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)
@@ -36,18 +36,9 @@ ENTRY (__clone)
movel 8(%sp), %a1 /* no NULL stack pointers */
tstl %a1
jeq syscall_error
- movel 16(%sp), %d1 /* no negative argument counts */
- jmi syscall_error
- /* Allocate space on the new stack and copy args over */
- movel %d1, %d0
- negl %d0
- lea (%a1,%d0.l*4), %a1
- jeq 2f
-1: movel 16(%sp,%d1.l*4), -4(%a1,%d1.l*4)
- subql #1, %d1
- jne 1b
-2:
+ /* Allocate space and copy the argument onto the new stack. */
+ movel 16(%sp), -(%a1)
/* Do the system call */
exg %d2, %a1 /* save %d2 and get stack pointer */
diff --git a/sysdeps/unix/sysv/linux/schedbits.h b/sysdeps/unix/sysv/linux/schedbits.h
index 97683cd3ef..fccb5d834f 100644
--- a/sysdeps/unix/sysv/linux/schedbits.h
+++ b/sysdeps/unix/sysv/linux/schedbits.h
@@ -1,6 +1,6 @@
/* Definitions of constants and data structure for POSIX 1003.1b-1993
scheduling interface.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ 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
@@ -19,7 +19,9 @@
Boston, MA 02111-1307, USA. */
#ifndef _SCHEDBITS_H
+
#define _SCHEDBITS_H 1
+#include <features.h>
/* Scheduling algorithms. */
#define SCHED_OTHER 0
@@ -28,9 +30,9 @@
/* Data structure to describe a process' schedulability. */
struct sched_param
-{
- int sched_priority;
-};
+ {
+ int sched_priority;
+ };
/* Cloning flags. */
#define CSIGNAL 0x000000ff /* Signal mask to be sent at exit. */
@@ -41,13 +43,13 @@ struct sched_param
#define CLONE_PID 0x00001000 /* Set if pid shared. */
-/* Clone current process. The parameter list of FN is not for true. Only
- dots is not allowed by ISO C and without argument the compiler would
- complain about a missing parameter list. */
-extern int __clone __P ((int (*__fn) (void *, ...), void *__child_stack,
- int __flags, int __nargs, ...));
-extern int clone __P ((int (*__fn) (void *, ...), void *__child_stack,
- int __flags, int __nargs, ...));
+/* Clone current process. */
+extern int __clone __P ((int (*__fn) (void *__arg), void *__child_stack,
+ int __flags, void *__arg));
+#ifdef __USE_MISC
+extern int clone __P ((int (*__fn) (void *__arg), void *__child_stack,
+ int __flags, void *__arg));
+#endif
#endif /* schedbits.h */
diff --git a/sysdeps/unix/sysv/linux/sigset.h b/sysdeps/unix/sysv/linux/sigset.h
index 69648b7e9c..752d13adff 100644
--- a/sysdeps/unix/sysv/linux/sigset.h
+++ b/sysdeps/unix/sysv/linux/sigset.h
@@ -22,13 +22,13 @@
typedef int __sig_atomic_t;
-/* A `sigset_t' has a bit for each signal. Having 32 * 4 * 8 bits gives
- us up to 1024 signals. */
-#define _SIGSET_NWORDS 32
+/* A `sigset_t' has a bit for each signal. */
+
+#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
-{
- unsigned int __val[_SIGSET_NWORDS];
-} __sigset_t;
+ {
+ unsigned long int __val[_SIGSET_NWORDS];
+ } __sigset_t;
#endif
@@ -47,20 +47,23 @@ typedef struct
#endif
/* Return a mask that includes the bit for SIG only. */
-#define __sigmask(sig) (((unsigned int) 1) << (((sig) - 1) \
- % (8 * sizeof (unsigned int))))
+#define __sigmask(sig) \
+ (((unsigned long) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
+
/* Return the word index for SIG. */
-#define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned int)))
+#define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int)))
#if defined __GNUC__ && __GNUC__ >= 2
#define __sigemptyset(set) \
- (__extension__ ({ unsigned int __cnt; \
- for (__cnt = 0; __cnt < _SIGSET_NWORDS; ++__cnt) \
- (set)->__val[__cnt] = 0; 0; }))
+ (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
+ sigset_t *__set = (set); \
+ while (--__cnt >= 0) __set->__val[__cnt] = 0; \
+ 0; }))
#define __sigfillset(set) \
- (__extension__ ({ unsigned int __cnt; \
- for (__cnt = 0; __cnt < _SIGSET_NWORDS; ++__cnt) \
- (set)->__val[__cnt] = ~0; 0; }))
+ (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
+ sigset_t *__set = (set); \
+ while (--__cnt >= 0) __set->__val[__cnt] = ~0UL; \
+ 0; }))
#endif
/* These functions needn't check for a bogus signal number -- error
@@ -74,8 +77,8 @@ extern int __sigdelset (__sigset_t *, int);
_EXTERN_INLINE int \
NAME (CONST __sigset_t *__set, int __sig) \
{ \
- unsigned int __mask = __sigmask (__sig); \
- unsigned int __word = __sigword (__sig); \
+ unsigned long int __mask = __sigmask (__sig); \
+ unsigned long int __word = __sigword (__sig); \
return BODY; \
}
diff --git a/sysdeps/unix/sysv/linux/sparc/clone.S b/sysdeps/unix/sysv/linux/sparc/clone.S
index 875dcba64a..9e1ba812b0 100644
--- a/sysdeps/unix/sysv/linux/sparc/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/clone.S
@@ -1,34 +1,29 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
+ Based on code written for the Intel by Richard Henderson (rth@tamu.edu).
- FIXME: Currently only 6 parameters can be passsed
- to the clone function.
-
- based on code written for the Intel by Richard
- Henderson (rth@tamu.edu)
-
-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. */
/* clone() is even more special than fork() as it mucks with stacks
and invokes a function in the right context after its all over. */
-
+
#include <asm/errno.h>
#include <asm/unistd.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
.align 4
@@ -37,31 +32,20 @@ Cambridge, MA 02139, USA. */
.weak clone
__clone = __libc_clone
clone = __libc_clone
-__libc_clone:
+
+__libc_clone:
save %sp,-96,%sp
+
/* sanity check arguments */
tst %i0
be __clone_syscall_error
tst %i1
be __clone_syscall_error
- cmp %i3,0
- bl __clone_syscall_error
- nop
-
- /* Flush the register windows */
- ta 3
+ nop
- /* Parameters for system call */
+ /* Do the system call */
mov %i1,%o1
mov %i2,%o0
-
- /* parameters that are on the stack for routine */
-#define P(x) 0x5c+(x*4)
- ld [%fp+P(0)],%o2
- ld [%fp+P(1)],%o3
- ld [%fp+P(2)],%o4
- ld [%fp+P(3)],%o5
- /* Do the system call */
set __NR_clone,%g1
ta 0x10
bcs __clone_syscall_error
@@ -71,7 +55,7 @@ __libc_clone:
mov %o0,%i0
ret
restore
-
+
__clone_syscall_error:
call __errno_location
set EINVAL,%i0
@@ -81,8 +65,7 @@ __clone_syscall_error:
restore
__thread_start:
- mov %i5,%o1
call %i0
- mov %i4,%o0
+ mov %i3,%o0
call _exit,0
nop
diff --git a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcsetattr.c
index 7afaf1b986..3bb3e9f5ec 100644
--- a/sysdeps/unix/sysv/linux/tcsetattr.c
+++ b/sysdeps/unix/sysv/linux/tcsetattr.c
@@ -60,10 +60,10 @@ tcsetattr (fd, optional_actions, termios_p)
k_termios.c_lflag = termios_p->c_lflag;
k_termios.c_line = termios_p->c_line;
#ifdef _HAVE_C_ISPEED
- k_termios.c_ispeed = termios_p.c_ispeed;
+ k_termios.c_ispeed = termios_p->c_ispeed;
#endif
#ifdef _HAVE_C_OSPEED
- k_termios.c_ospeed = termios_p.c_ospeed;
+ k_termios.c_ospeed = termios_p->c_ospeed;
#endif
for (cnt = 0; cnt < KERNEL_NCCS; ++cnt)
k_termios.c_cc[cnt] = termios_p->c_cc[cnt];