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:
@@ -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)
|
||||
|
||||
@@ -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 */
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user