aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-03-06 00:27:08 +0000
committerRoland McGrath <roland@gnu.org>1995-03-06 00:27:08 +0000
commit6408bdde65cac02ef96ae9f2b77f222b534c0e75 (patch)
tree3a10be5fdb3d11bdd95f31a2615c266d5f3e0762 /sysdeps
parent4933a099c29045e0615139c9a55d77862ae8ae6c (diff)
downloadglibc-6408bdde65cac02ef96ae9f2b77f222b534c0e75.tar
glibc-6408bdde65cac02ef96ae9f2b77f222b534c0e75.tar.gz
glibc-6408bdde65cac02ef96ae9f2b77f222b534c0e75.tar.bz2
glibc-6408bdde65cac02ef96ae9f2b77f222b534c0e75.zip
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.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/sys/mman.h7
-rw-r--r--sysdeps/mach/hurd/mmap.c6
-rw-r--r--sysdeps/mach/munmap.c7
-rw-r--r--sysdeps/stub/mmap.c9
-rw-r--r--sysdeps/stub/munmap.c7
-rw-r--r--sysdeps/unix/bsd/Attic/osf1/sys/mman.h9
-rw-r--r--sysdeps/unix/bsd/hp/m68k/vfork.S55
-rw-r--r--sysdeps/unix/bsd/i386/vfork.S39
-rw-r--r--sysdeps/unix/bsd/setsid.c2
-rw-r--r--sysdeps/unix/bsd/sun/m68k/vfork.S55
-rw-r--r--sysdeps/unix/bsd/sun/sunos4/mmap.c7
-rw-r--r--sysdeps/unix/bsd/sun/sunos4/sys/mman.h5
-rw-r--r--sysdeps/unix/bsd/ultrix4/sys/mman.h9
-rw-r--r--sysdeps/unix/bsd/vax/vfork.S57
-rw-r--r--sysdeps/unix/dirfd.c4
-rw-r--r--sysdeps/unix/i386/vfork.S23
-rw-r--r--sysdeps/unix/mman/mmap.S6
-rw-r--r--sysdeps/unix/mman/munmap.S6
-rw-r--r--sysdeps/unix/sysv/irix4/sys/mman.h5
19 files changed, 283 insertions, 35 deletions
diff --git a/sysdeps/generic/sys/mman.h b/sysdeps/generic/sys/mman.h
index 3575eeb3b4..e9d69ec1ad 100644
--- a/sysdeps/generic/sys/mman.h
+++ b/sysdeps/generic/sys/mman.h
@@ -1,5 +1,5 @@
/* 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.
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
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,
- 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
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));
/* Change the memory protection of the region starting at ADDR and
diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c
index e682225ec8..0fb1a08cfb 100644
--- a/sysdeps/mach/hurd/mmap.c
+++ b/sysdeps/mach/hurd/mmap.c
@@ -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.
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. */
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;
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;
}
+
+weak_alias (__mmap, mmap)
diff --git a/sysdeps/mach/munmap.c b/sysdeps/mach/munmap.c
index 5ca11298f3..29270bb7f4 100644
--- a/sysdeps/mach/munmap.c
+++ b/sysdeps/mach/munmap.c
@@ -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.
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). */
int
-munmap (caddr_t addr, size_t len)
+__munmap (caddr_t addr, size_t len)
{
kern_return_t err;
if (err = __vm_deallocate (__mach_task_self (),
@@ -36,4 +36,5 @@ munmap (caddr_t addr, size_t len)
}
return 0;
}
-
+
+weak_alias (__munmap, munmap)
diff --git a/sysdeps/stub/mmap.c b/sysdeps/stub/mmap.c
index 5ee4fa7797..e230c9d8a4 100644
--- a/sysdeps/stub/mmap.c
+++ b/sysdeps/stub/mmap.c
@@ -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.
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 <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
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
@@ -30,9 +30,10 @@ Cambridge, MA 02139, USA. */
deallocates any previous mapping for the affected region. */
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;
return (caddr_t) -1;
}
-
+
+weak_alias (__mmap, mmap)
diff --git a/sysdeps/stub/munmap.c b/sysdeps/stub/munmap.c
index c12889a1e5..ba61e0f97a 100644
--- a/sysdeps/stub/munmap.c
+++ b/sysdeps/stub/munmap.c
@@ -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.
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). */
int
-munmap (caddr_t addr, size_t len)
+__munmap (caddr_t addr, size_t len)
{
errno = ENOSYS;
return -1;
}
-
+
+weak_alias (__munmap, munmap)
diff --git a/sysdeps/unix/bsd/Attic/osf1/sys/mman.h b/sysdeps/unix/bsd/Attic/osf1/sys/mman.h
index 6ac25f459f..397ad28535 100644
--- a/sysdeps/unix/bsd/Attic/osf1/sys/mman.h
+++ b/sysdeps/unix/bsd/Attic/osf1/sys/mman.h
@@ -1,5 +1,5 @@
/* 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.
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,
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
#define _SYS_MMAN_H 1
@@ -87,11 +83,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call
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,
int __prot, int __flags, int __fd, off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN
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));
/* Change the memory protection of the region starting at ADDR and
diff --git a/sysdeps/unix/bsd/hp/m68k/vfork.S b/sysdeps/unix/bsd/hp/m68k/vfork.S
new file mode 100644
index 0000000000..b70c122838
--- /dev/null
+++ b/sysdeps/unix/bsd/hp/m68k/vfork.S
@@ -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)
diff --git a/sysdeps/unix/bsd/i386/vfork.S b/sysdeps/unix/bsd/i386/vfork.S
new file mode 100644
index 0000000000..af7f907bd6
--- /dev/null
+++ b/sysdeps/unix/bsd/i386/vfork.S
@@ -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)
diff --git a/sysdeps/unix/bsd/setsid.c b/sysdeps/unix/bsd/setsid.c
index 59594101cf..e057694589 100644
--- a/sysdeps/unix/bsd/setsid.c
+++ b/sysdeps/unix/bsd/setsid.c
@@ -33,7 +33,7 @@ DEFUN_VOID(__setsid)
int tty;
int save = errno;
- if (__getpgrp (pid) == pid)
+ if (__getpgid (pid) == pid)
{
/* Already the leader. */
errno = EPERM;
diff --git a/sysdeps/unix/bsd/sun/m68k/vfork.S b/sysdeps/unix/bsd/sun/m68k/vfork.S
new file mode 100644
index 0000000000..cb7dae8d2b
--- /dev/null
+++ b/sysdeps/unix/bsd/sun/m68k/vfork.S
@@ -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)
diff --git a/sysdeps/unix/bsd/sun/sunos4/mmap.c b/sysdeps/unix/bsd/sun/sunos4/mmap.c
index 4dfc1ca2da..b71937381b 100644
--- a/sysdeps/unix/bsd/sun/sunos4/mmap.c
+++ b/sysdeps/unix/bsd/sun/sunos4/mmap.c
@@ -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.
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
-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);
}
-
+
+weak_alias (__mmap, mmap)
diff --git a/sysdeps/unix/bsd/sun/sunos4/sys/mman.h b/sysdeps/unix/bsd/sun/sunos4/sys/mman.h
index 727e665fb6..10f31a898e 100644
--- a/sysdeps/unix/bsd/sun/sunos4/sys/mman.h
+++ b/sysdeps/unix/bsd/sun/sunos4/sys/mman.h
@@ -1,5 +1,5 @@
/* 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.
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
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,
int __prot, int __flags, int __fd, __off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN
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));
/* Change the memory protection of the region starting at ADDR and
diff --git a/sysdeps/unix/bsd/ultrix4/sys/mman.h b/sysdeps/unix/bsd/ultrix4/sys/mman.h
index c850b4f7c8..d49da02c32 100644
--- a/sysdeps/unix/bsd/ultrix4/sys/mman.h
+++ b/sysdeps/unix/bsd/ultrix4/sys/mman.h
@@ -1,5 +1,5 @@
/* 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.
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,
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
#define _SYS_MMAN_H 1
@@ -70,11 +66,14 @@ __BEGIN_DECLS
for errors (in which case `errno' is set). A successful `mmap' call
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,
int __prot, int __flags, int __fd, off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN
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));
/* Change the memory protection of the region starting at ADDR and
diff --git a/sysdeps/unix/bsd/vax/vfork.S b/sysdeps/unix/bsd/vax/vfork.S
new file mode 100644
index 0000000000..daf8f0f20d
--- /dev/null
+++ b/sysdeps/unix/bsd/vax/vfork.S
@@ -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)
diff --git a/sysdeps/unix/dirfd.c b/sysdeps/unix/dirfd.c
index 6b6f980a41..7733634a47 100644
--- a/sysdeps/unix/dirfd.c
+++ b/sysdeps/unix/dirfd.c
@@ -20,9 +20,11 @@ Cambridge, MA 02139, USA. */
#include <dirent.h>
#include <dirstream.h>
+#undef dirfd
+
int
dirfd (dirp)
- FILE *dirp;
+ DIR *dirp;
{
return dirp->__fd;
}
diff --git a/sysdeps/unix/i386/vfork.S b/sysdeps/unix/i386/vfork.S
new file mode 100644
index 0000000000..8ad6ffde5c
--- /dev/null
+++ b/sysdeps/unix/i386/vfork.S
@@ -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
diff --git a/sysdeps/unix/mman/mmap.S b/sysdeps/unix/mman/mmap.S
index dd60f43b34..9a9f1cdb6b 100644
--- a/sysdeps/unix/mman/mmap.S
+++ b/sysdeps/unix/mman/mmap.S
@@ -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.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,5 +18,7 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
-SYSCALL (mmap, 5)
+SYSCALL__ (mmap, 5)
ret
+
+weak_alias (__mmap, mmap)
diff --git a/sysdeps/unix/mman/munmap.S b/sysdeps/unix/mman/munmap.S
index 6b1ae163ee..3742a6d2c7 100644
--- a/sysdeps/unix/mman/munmap.S
+++ b/sysdeps/unix/mman/munmap.S
@@ -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.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,5 +18,7 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
-SYSCALL (munmap, 2)
+SYSCALL__ (munmap, 2)
ret
+
+weak_alias (__munmap, munmap)
diff --git a/sysdeps/unix/sysv/irix4/sys/mman.h b/sysdeps/unix/sysv/irix4/sys/mman.h
index ac50aab6dd..543ce552f3 100644
--- a/sysdeps/unix/sysv/irix4/sys/mman.h
+++ b/sysdeps/unix/sysv/irix4/sys/mman.h
@@ -1,5 +1,5 @@
/* 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.
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
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,
int __prot, int __flags, int __fd, __off_t __offset));
/* Deallocate any mapping for the region starting at ADDR and extending LEN
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));
/* Change the memory protection of the region starting at ADDR and