summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/shlib_version2
-rw-r--r--lib/libc/sys/Makefile.inc8
-rw-r--r--lib/libc/sys/mquery.2127
-rw-r--r--lib/libc/sys/mquery.c17
4 files changed, 149 insertions, 5 deletions
diff --git a/lib/libc/shlib_version b/lib/libc/shlib_version
index a048d137bb3..7b897a195c1 100644
--- a/lib/libc/shlib_version
+++ b/lib/libc/shlib_version
@@ -1,2 +1,2 @@
major=29
-minor=0 # note: remember to update minor in ../libpthread/shlib_version
+minor=1 # note: remember to update minor in ../libpthread/shlib_version
diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc
index e6030715104..4501f4d6445 100644
--- a/lib/libc/sys/Makefile.inc
+++ b/lib/libc/sys/Makefile.inc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.64 2003/01/31 21:47:46 millert Exp $
+# $OpenBSD: Makefile.inc,v 1.65 2003/04/14 04:53:50 art Exp $
# $NetBSD: Makefile.inc,v 1.35 1995/10/16 23:49:07 jtc Exp $
# @(#)Makefile.inc 8.1 (Berkeley) 6/17/93
@@ -21,7 +21,7 @@ DPSRCS+= Lint_Ovfork.c Lint_brk.c Lint_exect.c Lint_fork.c \
# glue to provide compatibility between GCC 1.X and 2.X and for compat
# with old syscall interfaces.
-SRCS+= ftruncate.c lseek.c mmap.c ptrace.c semctl.c truncate.c \
+SRCS+= ftruncate.c lseek.c mquery.c mmap.c ptrace.c semctl.c truncate.c \
timer_create.c timer_delete.c timer_getoverrun.c timer_gettime.c \
timer_settime.c pread.c preadv.c pwrite.c pwritev.c
@@ -216,8 +216,8 @@ MAN+= accept.2 access.2 acct.2 adjtime.2 bind.2 brk.2 chdir.2 chflags.2 \
getpid.2 getpriority.2 getrlimit.2 getrusage.2 getsid.2 getsockname.2 \
getsockopt.2 gettimeofday.2 getuid.2 intro.2 issetugid.2 ioctl.2 \
kill.2 kqueue.2 ktrace.2 link.2 \
- listen.2 lseek.2 mkdir.2 mkfifo.2 mknod.2 madvise.2 mincore.2 \
- minherit.2 mlock.2 mlockall.2 \
+ listen.2 lseek.2 mkdir.2 mkfifo.2 mknod.2 madvise.2 \
+ mquery.2 mincore.2 minherit.2 mlock.2 mlockall.2 \
mmap.2 mount.2 mprotect.2 msync.2 munmap.2 nanosleep.2 \
nfssvc.2 open.2 pathconf.2 \
pipe.2 profil.2 poll.2 ptrace.2 quotactl.2 read.2 readlink.2 reboot.2 \
diff --git a/lib/libc/sys/mquery.2 b/lib/libc/sys/mquery.2
new file mode 100644
index 00000000000..9e835bc4233
--- /dev/null
+++ b/lib/libc/sys/mquery.2
@@ -0,0 +1,127 @@
+.\" $OpenBSD: mquery.2,v 1.1 2003/04/14 04:53:50 art Exp $
+.\"
+.\" Copyright (c) 2003 Artur Grabowski <art@openbsd.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\"
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd April 2, 2003
+.Dt MQUERY 2
+.Os
+.Sh NAME
+.Nm mquery
+.Nd provide mapping hints to applications
+.Sh SYNOPSIS
+.Fd #include <sys/types.h>
+.Fd #include <sys/mman.h>
+.Ft int
+.Fn mquery "int flags" "void **addr" "size_t size" "int fd" "off_t off"
+.Sh DESCRIPTION
+The
+.Nm mqeury
+system call checks the existing memory mappings of a process and returns
+hints to the caller about where to put a memory mapping.
+This hint can be later used when performing memory mappings with the
+.Fn mmap
+system call with
+.Dv MAP_FIXED
+in the flags.
+The
+.Fa addr
+argument should point to a memory location that stores a pointer
+which is used both as an input argument where the caller specifies the
+preferred address and as an output of the resulting hint.
+The
+.Fa size
+argument specifies the requested size of the memory area the caller
+is looking for.
+The
+.Fa fd
+and
+.Fa off
+arguments specify the file that will be mapped and the offset in it,
+this is the same as the corresponding arguments to
+.Fn mmap .
+.Pp
+The behavior of the function depends on the
+.Fa flags
+argument.
+If set to
+.Dv MAP_FIXED
+the pointer
+.Fa *addr
+is used as a fixed hint and
+.Fn mquery
+will return \-1 and set
+.Va errno
+to
+.Dv ENOMEM
+if there is not
+.Fa size
+bytes free after that address.
+Otherwise it will return 0 and
+.Fa *addr
+will not be changed.
+If no flags are set
+.Fn mquery
+will use
+.Fa *addr
+as a starting point in memory and will search forward to find
+a memory area with
+.Fa size
+bytes free and that will be suitable for creating a mapping for the
+file and offset specified in the
+.Fa fd
+and
+.Fa off
+arguments.
+When no such area can be found
+.Fn mquery
+will return \-1 and set
+.Va errno
+to
+.Dv ENOMEM .
+.Sh RETURN VALUES
+When a memory range satisfying the request is found
+.Fn mquery
+returns 0.
+Otherwise, \-1 is returned and
+.Va errno
+is set to indicate the error.
+.Sh ERRORS
+.Fn mquery
+will fail if:
+.Bl -tag -width ENOMEM
+.It Bq Er ENOMEM
+.Dv MAP_FIXED
+was specified and the requested memory area is unavailable.
+.It Bq Er ENOMEM
+There was not enough memory left after the hint specified.
+.It Bq Er EBADF
+.Fa fd
+is not a valid open file descriptor.
+.Sh SEE ALSO
+.Xr mmap 2
+.Sh HISTORY
+The
+.Fn mquery
+function first appeared in
+.Ox 3.4 .
diff --git a/lib/libc/sys/mquery.c b/lib/libc/sys/mquery.c
new file mode 100644
index 00000000000..2cb28e27a9b
--- /dev/null
+++ b/lib/libc/sys/mquery.c
@@ -0,0 +1,17 @@
+/* $OpenBSD: mquery.c,v 1.1 2003/04/14 04:53:50 art Exp $ */
+/*
+ * Written by Artur Grabowski <art@openbsd.org> Public Domain
+ */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/syscall.h>
+
+/*
+ * This function provides 64-bit offset padding.
+ */
+int
+mquery(int flags, void **addr, size_t size, int fd, off_t off)
+{
+ return(__syscall((quad_t)SYS_mquery, flags, addr, size, fd, off));
+}