Fri Mar 3 12:24:52 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>

* sysdeps/generic/sys/mman.h (__mmap, __munmap): Declare these.
	* sysdeps/unix/sysv/irix4/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/ultrix4/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/osf1/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/sys/mman.h: Likewise.
	* sysdeps/stub/munmap.c (munmap): Rename to __munmap, add weak
 	alias munmap.
	* sysdeps/unix/mman/munmap.S: Likewise.
	* sysdeps/mach/munmap.c: Likewise.
	* sysdeps/mach/hurd/mmap.c (mmap): Rename to __mmap, add weak
 	alias mmap.
	* sysdeps/unix/mman/mmap.S: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/mmap.c: Likewise.
	* sysdeps/stub/mmap.c: Likewise.

	* sysdeps/unix/bsd/setsid.c: Use __getpgid instead of __getpgrp.

	* sysdeps/unix/dirfd.c: #undef dirfd before function defn.

Thu Mar  2 12:15:24 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* misc/search.h: Add missing semicolon.

	* sysdeps/unix/dirfd.c: Fix typo.

	* sysdeps/generic/sys/mman.h (mmap): Use __off_t instead of off_t
 	in decl.

	* stdio/vfscanf.c (%c): In no-assign case, fix loop to decrement
 	WIDTH before test.
This commit is contained in:
Roland McGrath 1995-03-06 00:27:08 +00:00
parent 4933a099c2
commit 6408bdde65
22 changed files with 318 additions and 38 deletions

View File

@ -1,3 +1,36 @@
Fri Mar 3 12:24:52 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/generic/sys/mman.h (__mmap, __munmap): Declare these.
* sysdeps/unix/sysv/irix4/sys/mman.h: Likewise.
* sysdeps/unix/bsd/ultrix4/sys/mman.h: Likewise.
* sysdeps/unix/bsd/osf1/sys/mman.h: Likewise.
* sysdeps/unix/bsd/sun/sunos4/sys/mman.h: Likewise.
* sysdeps/stub/munmap.c (munmap): Rename to __munmap, add weak
alias munmap.
* sysdeps/unix/mman/munmap.S: Likewise.
* sysdeps/mach/munmap.c: Likewise.
* sysdeps/mach/hurd/mmap.c (mmap): Rename to __mmap, add weak
alias mmap.
* sysdeps/unix/mman/mmap.S: Likewise.
* sysdeps/unix/bsd/sun/sunos4/mmap.c: Likewise.
* sysdeps/stub/mmap.c: Likewise.
* sysdeps/unix/bsd/setsid.c: Use __getpgid instead of __getpgrp.
* sysdeps/unix/dirfd.c: #undef dirfd before function defn.
Thu Mar 2 12:15:24 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* misc/search.h: Add missing semicolon.
* sysdeps/unix/dirfd.c: Fix typo.
* sysdeps/generic/sys/mman.h (mmap): Use __off_t instead of off_t
in decl.
* stdio/vfscanf.c (%c): In no-assign case, fix loop to decrement
WIDTH before test.
Wed Mar 1 00:57:47 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> Wed Mar 1 00:57:47 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdlib/strtod.c: Fixes from drepper. * stdlib/strtod.c: Fixes from drepper.

View File

@ -41,7 +41,7 @@ struct qelem
extern void insque __P ((struct qelem *__elem, struct qelem *__prev)); extern void insque __P ((struct qelem *__elem, struct qelem *__prev));
/* Unlink ELEM from the doubly-linked list that it is in. */ /* Unlink ELEM from the doubly-linked list that it is in. */
extern void remque __P ((struct qelem *elem)) extern void remque __P ((struct qelem *elem));
__END_DECLS __END_DECLS

View File

@ -231,8 +231,7 @@ DEFUN(__vfscanf, (s, format, arg),
while (inchar() != EOF && --width > 0); while (inchar() != EOF && --width > 0);
} }
else else
while (inchar() != EOF && width > 0) while (inchar() != EOF && --width > 0);
--width;
if (do_assign) if (do_assign)
++done; ++done;

View File

@ -1,5 +1,5 @@
/* Definitions for BSD-style memory management. Generic/4.4 BSD version. /* Definitions for BSD-style memory management. Generic/4.4 BSD version.
Copyright (C) 1994 Free Software Foundation, Inc. Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -79,11 +79,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call for errors (in which case `errno' is set). A successful `mmap' call
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
__caddr_t __mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, __off_t __offset));
__caddr_t mmap __P ((__caddr_t __addr, size_t __len, __caddr_t mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, off_t __offset)); int __prot, int __flags, int __fd, __off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN /* Deallocate any mapping for the region starting at ADDR and extending LEN
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int __munmap __P ((__caddr_t __addr, size_t __len));
int munmap __P ((__caddr_t __addr, size_t __len)); int munmap __P ((__caddr_t __addr, size_t __len));
/* Change the memory protection of the region starting at ADDR and /* Change the memory protection of the region starting at ADDR and

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -32,7 +32,7 @@ Cambridge, MA 02139, USA. */
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
caddr_t caddr_t
mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset) __mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
{ {
error_t err; error_t err;
vm_prot_t vmprot; vm_prot_t vmprot;
@ -102,4 +102,6 @@ mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
return err ? (caddr_t) (long int) __hurd_fail (err) : (caddr_t) mapaddr; return err ? (caddr_t) (long int) __hurd_fail (err) : (caddr_t) mapaddr;
} }
weak_alias (__mmap, mmap)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -25,7 +25,7 @@ Cambridge, MA 02139, USA. */
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int int
munmap (caddr_t addr, size_t len) __munmap (caddr_t addr, size_t len)
{ {
kern_return_t err; kern_return_t err;
if (err = __vm_deallocate (__mach_task_self (), if (err = __vm_deallocate (__mach_task_self (),
@ -36,4 +36,5 @@ munmap (caddr_t addr, size_t len)
} }
return 0; return 0;
} }
weak_alias (__munmap, munmap)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -20,7 +20,7 @@ Cambridge, MA 02139, USA. */
#include <sys/mman.h> #include <sys/mman.h>
#include <errno.h> #include <errno.h>
/* Map addresses starting near ADDR and extending for LEN bytes. from /* Map addresses starting near ADDR and extending for LEN bytes. From
OFFSET into the file FD describes according to PROT and FLAGS. If ADDR OFFSET into the file FD describes according to PROT and FLAGS. If ADDR
is nonzero, it is the desired mapping address. If the MAP_FIXED bit is is nonzero, it is the desired mapping address. If the MAP_FIXED bit is
set in FLAGS, the mapping will be at ADDR exactly (which must be set in FLAGS, the mapping will be at ADDR exactly (which must be
@ -30,9 +30,10 @@ Cambridge, MA 02139, USA. */
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
caddr_t caddr_t
mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset) __mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
{ {
errno = ENOSYS; errno = ENOSYS;
return (caddr_t) -1; return (caddr_t) -1;
} }
weak_alias (__mmap, mmap)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -24,9 +24,10 @@ Cambridge, MA 02139, USA. */
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int int
munmap (caddr_t addr, size_t len) __munmap (caddr_t addr, size_t len)
{ {
errno = ENOSYS; errno = ENOSYS;
return -1; return -1;
} }
weak_alias (__munmap, munmap)

View File

@ -1,5 +1,5 @@
/* Definitions for BSD-style memory management. OSF/1 version. /* Definitions for BSD-style memory management. OSF/1 version.
Copyright (C) 1994 Free Software Foundation, Inc. Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -17,10 +17,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
/* These are the bits used by 4.4 BSD and its derivatives. On systems
(such as GNU) where these facilities are not system services but can be
emulated in the C library, these are the definitions we emulate. */
#ifndef _SYS_MMAN_H #ifndef _SYS_MMAN_H
#define _SYS_MMAN_H 1 #define _SYS_MMAN_H 1
@ -87,11 +83,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call for errors (in which case `errno' is set). A successful `mmap' call
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
__caddr_t __mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, off_t __offset));
__caddr_t mmap __P ((__caddr_t __addr, size_t __len, __caddr_t mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, off_t __offset)); int __prot, int __flags, int __fd, off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN /* Deallocate any mapping for the region starting at ADDR and extending LEN
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int __munmap __P ((__caddr_t __addr, size_t __len));
int munmap __P ((__caddr_t __addr, size_t __len)); int munmap __P ((__caddr_t __addr, size_t __len));
/* Change the memory protection of the region starting at ADDR and /* Change the memory protection of the region starting at ADDR and

View File

@ -0,0 +1,55 @@
/* Copyright (C) 1991, 1994, 1995 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
#ifndef SYS_vfork
#define SYS_vfork 66
#endif
/* Clone the calling process, but without copying the whole address space.
The the calling process is suspended until the the new process exits or is
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
and the process ID of the new process to the old process. */
.globl ___vfork
___vfork:
/* Pop the return PC value into A0. */
moveal sp@+, a0
/* Stuff the syscall number in D0 and trap into the kernel. */
movel #SYS_vfork, d0
trap #0
bcs error /* Branch forward if it failed. */
/* It succeeded. See which fork we're in. D1 is now 0 for the
parent and 1 for the child. Decrement it to make it -1 (all
bits set) for the parent, and 0 (no bits set) for the child.
Then AND it with D0, so the parent gets D0&-1==R0, and the child
gets D0&0==0. */
subl #1, d1
andl d1, d0
/* Jump to the return PC. */
jmp a0@
error:
movel d0, _errno
moveq #-1, d0
jmp a0@
weak_alias (__vfork, vfork)

View File

@ -0,0 +1,39 @@
/* Copyright (C) 1993, 1994, 1995 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
/* Since vfork shares the address space between the parent and child,
we must take care to avoid the child unwinding the stack frame and
clobbering it for the parent. */
.text
ENTRY (__vfork)
popl scratch /* Save the return PC in a register. */
DO_CALL (vfork, 0) /* Do the system call. */
pushl scratch /* Put the return PC back on the stack. */
jb syscall_error /* Branch if error. */
/* R1 is now 0 for the parent and 1 for the child. Decrement it to
make it -1 (all bits set) for the parent, and 0 (no bits set)
for the child. Then AND it with R0, so the parent gets
R0&-1==R0, and the child gets R0&0==0. */
decl r1
andl r1, r0
ret
weak_alias (__vfork, vfork)

View File

@ -33,7 +33,7 @@ DEFUN_VOID(__setsid)
int tty; int tty;
int save = errno; int save = errno;
if (__getpgrp (pid) == pid) if (__getpgid (pid) == pid)
{ {
/* Already the leader. */ /* Already the leader. */
errno = EPERM; errno = EPERM;

View File

@ -0,0 +1,55 @@
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
#ifndef SYS_vfork
#define SYS_vfork 66
#endif
/* Clone the calling process, but without copying the whole address space.
The the calling process is suspended until the the new process exits or is
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
and the process ID of the new process to the old process. */
.globl ___vfork
___vfork:
/* Pop the return PC value into A0. */
movel sp@+, a0
/* Push the syscall number and trap into the kernel. */
movel #SYS_vfork, sp@-
trap #0
bcs error /* Branch forward if it failed. */
/* It succeeded. See which fork we're in. D1 is now 0 for the
parent and 1 for the child. Decrement it to make it -1 (all
bits set) for the parent, and 0 (no bits set) for the child.
Then AND it with D0, so the parent gets D0&-1==R0, and the child
gets D0&0==0. */
decl d1
andl d1, d0
/* Jump to the return PC. */
jmp a0@
error:
movel d0, _errno
moveq #-1, d0
jmp a0@
weak_alias (__vfork, vfork)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -34,8 +34,9 @@ extern caddr_t __mmap_syscall (caddr_t addr, size_t len,
caddr_t caddr_t
mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset) __mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
{ {
return __mmap_syscall (addr, len, prot, flags | _MAP_NEW, fd, offset); return __mmap_syscall (addr, len, prot, flags | _MAP_NEW, fd, offset);
} }
weak_alias (__mmap, mmap)

View File

@ -1,5 +1,5 @@
/* Definitions for BSD-style memory management. SunOS 4 version. /* Definitions for BSD-style memory management. SunOS 4 version.
Copyright (C) 1994 Free Software Foundation, Inc. Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -80,11 +80,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call for errors (in which case `errno' is set). A successful `mmap' call
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
__caddr_t __mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, __off_t __offset));
__caddr_t mmap __P ((__caddr_t __addr, size_t __len, __caddr_t mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, __off_t __offset)); int __prot, int __flags, int __fd, __off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN /* Deallocate any mapping for the region starting at ADDR and extending LEN
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int __munmap __P ((__caddr_t __addr, size_t __len));
int munmap __P ((__caddr_t __addr, size_t __len)); int munmap __P ((__caddr_t __addr, size_t __len));
/* Change the memory protection of the region starting at ADDR and /* Change the memory protection of the region starting at ADDR and

View File

@ -1,5 +1,5 @@
/* Definitions for BSD-style memory management. Ultrix 4 version. /* Definitions for BSD-style memory management. Ultrix 4 version.
Copyright (C) 1994 Free Software Foundation, Inc. Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -17,10 +17,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
/* These are the bits used by 4.4 BSD and its derivatives. On systems
(such as GNU) where these facilities are not system services but can be
emulated in the C library, these are the definitions we emulate. */
#ifndef _SYS_MMAN_H #ifndef _SYS_MMAN_H
#define _SYS_MMAN_H 1 #define _SYS_MMAN_H 1
@ -70,11 +66,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call for errors (in which case `errno' is set). A successful `mmap' call
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
__caddr_t __mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, off_t __offset));
__caddr_t mmap __P ((__caddr_t __addr, size_t __len, __caddr_t mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, off_t __offset)); int __prot, int __flags, int __fd, off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN /* Deallocate any mapping for the region starting at ADDR and extending LEN
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int __munmap __P ((__caddr_t __addr, size_t __len));
int munmap __P ((__caddr_t __addr, size_t __len)); int munmap __P ((__caddr_t __addr, size_t __len));
/* Change the memory protection of the region starting at ADDR and /* Change the memory protection of the region starting at ADDR and

View File

@ -0,0 +1,57 @@
/* Copyright (C) 1991, 1992, 1995 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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
#ifndef SYS_vfork
#define SYS_vfork 66
#endif
/* Clone the calling process, but without copying the whole address space.
The the calling process is suspended until the the new process exits or is
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
and the process ID of the new process to the old process. */
.globl ___vfork
error: jmp syscall_error
___vfork:
.word 0
/* Save our return address in R2, and return to code below. */
movl 16(fp), r2
movab unwind, 16(fp)
ret
unwind:
/* Do the system call. */
chmk $SYS_vfork
bcs error
tstl r1
beq parent
/* We are the child. Return zero. */
clrl r0
/* Return to the saved address. */
parent: jmp (r2)
.globl _errno
error:
movl r0, _errno
mnegl $1, r0
jmp (r2)
weak_alias (__vfork, vfork)

View File

@ -20,9 +20,11 @@ Cambridge, MA 02139, USA. */
#include <dirent.h> #include <dirent.h>
#include <dirstream.h> #include <dirstream.h>
#undef dirfd
int int
dirfd (dirp) dirfd (dirp)
FILE *dirp; DIR *dirp;
{ {
return dirp->__fd; return dirp->__fd;
} }

23
sysdeps/unix/i386/vfork.S Normal file
View File

@ -0,0 +1,23 @@
/* Copyright (C) 1994 Free Software Foundation, Inc.
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., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <sysdep.h>
/* Go directly into __vfork, don't do anything with the stack ptr. */
ENTRY(vfork)
jmp __vfork

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -18,5 +18,7 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
SYSCALL (mmap, 5) SYSCALL__ (mmap, 5)
ret ret
weak_alias (__mmap, mmap)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -18,5 +18,7 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
SYSCALL (munmap, 2) SYSCALL__ (munmap, 2)
ret ret
weak_alias (__munmap, munmap)

View File

@ -1,5 +1,5 @@
/* Definitions for BSD-style memory management. Irix 4 version. /* Definitions for BSD-style memory management. Irix 4 version.
Copyright (C) 1994 Free Software Foundation, Inc. Copyright (C) 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -74,11 +74,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call for errors (in which case `errno' is set). A successful `mmap' call
deallocates any previous mapping for the affected region. */ deallocates any previous mapping for the affected region. */
__caddr_t __mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, __off_t __offset));
__caddr_t mmap __P ((__caddr_t __addr, size_t __len, __caddr_t mmap __P ((__caddr_t __addr, size_t __len,
int __prot, int __flags, int __fd, __off_t __offset)); int __prot, int __flags, int __fd, __off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN /* Deallocate any mapping for the region starting at ADDR and extending LEN
bytes. Returns 0 if successful, -1 for errors (and sets errno). */ bytes. Returns 0 if successful, -1 for errors (and sets errno). */
int __munmap __P ((__caddr_t __addr, size_t __len));
int munmap __P ((__caddr_t __addr, size_t __len)); int munmap __P ((__caddr_t __addr, size_t __len));
/* Change the memory protection of the region starting at ADDR and /* Change the memory protection of the region starting at ADDR and