1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-24 17:51:17 +03:00

update from main arhive 970119

This commit is contained in:
Ulrich Drepper
1997-01-20 02:49:42 +00:00
parent df5a92fd38
commit b5ce64efa4
20 changed files with 159 additions and 310 deletions

View File

@@ -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)

View File

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

View File

@@ -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;
}

View File

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

View File

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

View File

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

View File

@@ -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);