[PATCH 2/4] sys/mman.h: New file. Clean up and add supporting stubs

Joel Sherrill joel at rtems.org
Sat Jul 30 14:44:38 UTC 2016


It makes sense to me. Chris identified some mmap capabilities that could be
implemented on normal Barr metal RTEMS but when paravirtualized, we can use
kernel or hypervisor services to support the actual dirty work. But our
code still needs to properly track mmaps and shm_open regions so the unmap
or close is error checked correctly

On Jul 29, 2016 8:07 PM, "Gedare Bloom" <gedare at rtems.org> wrote:
>
> On Wed, Nov 19, 2014 at 5:04 PM, Joel Sherrill
> <joel.sherrill at oarcorp.com> wrote:
> >
> > On 11/19/2014 2:55 PM, Gedare Bloom wrote:
> >> Is this the same one that Chris has had in use before? (I think that
> >> is who had one in use..)
> > Yes. You wanted it in rtems to avoid me having to add a prototype to a
file
> > to avoid a warning.
> >
> I'm looking at implementing/stubbing some more mman functions. While I
> do this, does it make sense to relocate this mman.h into
> newlib/libc/sys/rtems/include/sys/mman.h?
>
> > I didn't integrate his implementation but only his .h file and stubs.
His
> > implementation will need the addition of tests and code in confdefs.h.
> >
> I may integrate his implementation as part of my effort.
>
> > --joel
> >
> >> -Gedare
> >>
> >> On Wed, Nov 19, 2014 at 2:59 PM, Joel Sherrill
> >> <joel.sherrill at oarcorp.com> wrote:
> >>>         * Makefile.am updated and preinstall.am regenerated.
> >>>         * mprotect.c had a prototype removed now that we have mman.h
> >>>         * mmap.c, munmap.c: New stub files.
> >>> ---
> >>>  cpukit/posix/Makefile.am        |   5 ++
> >>>  cpukit/posix/include/sys/mman.h | 189
++++++++++++++++++++++++++++++++++++++++
> >>>  cpukit/posix/preinstall.am      |   9 ++
> >>>  cpukit/posix/src/mmap.c         |  26 ++++++
> >>>  cpukit/posix/src/mprotect.c     |  10 +--
> >>>  cpukit/posix/src/munmap.c       |  30 +++++++
> >>>  6 files changed, 261 insertions(+), 8 deletions(-)
> >>>  create mode 100644 cpukit/posix/include/sys/mman.h
> >>>  create mode 100644 cpukit/posix/src/mmap.c
> >>>  create mode 100644 cpukit/posix/src/munmap.c
> >>>
> >>> diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am
> >>> index 346b65a..b3be07c 100644
> >>> --- a/cpukit/posix/Makefile.am
> >>> +++ b/cpukit/posix/Makefile.am
> >>> @@ -21,6 +21,9 @@ include_rtems_posix_HEADERS +=
include/rtems/posix/keyimpl.h
> >>>  include_rtems_posix_HEADERS += include/rtems/posix/config.h
> >>>  include_rtems_posix_HEADERS += include/rtems/posix/posixapi.h
> >>>
> >>> +include_sysdir = $(includedir)/sys
> >>> +include_sys_HEADERS = include/sys/mman.h
> >>> +
> >>>  if HAS_PTHREADS
> >>>  # include
> >>>  include_HEADERS = include/aio.h
> >>> @@ -91,7 +94,9 @@ libposix_a_SOURCES += src/cond.c
src/condattrdestroy.c \
> >>>      src/condtimedwait.c src/condwait.c src/condwaitsupp.c
src/condget.c
> >>>
> >>>  ## MEMORY_C_FILES
> >>> +libposix_a_SOURCES += src/mmap.c
> >>>  libposix_a_SOURCES += src/mprotect.c
> >>> +libposix_a_SOURCES += src/munmap.c
> >>>
> >>>  ## MESSAGE_QUEUE_C_FILES
> >>>  libposix_a_SOURCES += src/mqueue.c src/mqueueclose.c \
> >>> diff --git a/cpukit/posix/include/sys/mman.h
b/cpukit/posix/include/sys/mman.h
> >>> new file mode 100644
> >>> index 0000000..ddf34cc
> >>> --- /dev/null
> >>> +++ b/cpukit/posix/include/sys/mman.h
> >>> @@ -0,0 +1,189 @@
> >>> +/*     $NetBSD: mman.h,v 1.36 2005/09/13 01:42:51 christos Exp $
   */
> >>> +
> >>> +/*-
> >>> + * Copyright (c) 1982, 1986, 1993
> >>> + *     The Regents of the University of California.  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. Redistributions in binary form must reproduce the above
copyright
> >>> + *    notice, this list of conditions and the following disclaimer
in the
> >>> + *    documentation and/or other materials provided with the
distribution.
> >>> + * 3. Neither the name of the University nor the names of its
contributors
> >>> + *    may be used to endorse or promote products derived from this
software
> >>> + *    without specific prior written permission.
> >>> + *
> >>> + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
> >>> + *
> >>> + *     @(#)mman.h      8.2 (Berkeley) 1/9/95
> >>> + */
> >>> +
> >>> +#ifndef _SYS_MMAN_H_
> >>> +#define _SYS_MMAN_H_
> >>> +
> >>> +#ifdef __rtems__
> >>> +
> >>> +#include <inttypes.h>
> >>> +#include <stddef.h>
> >>> +#include <sys/types.h>
> >>> +
> >>> +#else /* __rtems__ */
> >>> +#include <sys/featuretest.h>
> >>> +
> >>> +#include <machine/ansi.h>
> >>> +
> >>> +#ifdef _BSD_SIZE_T_
> >>> +typedef        _BSD_SIZE_T_    size_t;
> >>> +#undef _BSD_SIZE_T_
> >>> +#endif
> >>> +
> >>> +#include <sys/ansi.h>
> >>> +
> >>> +#ifndef        mode_t
> >>> +typedef        __mode_t        mode_t;
> >>> +#define        mode_t          __mode_t
> >>> +#endif
> >>> +
> >>> +#ifndef        off_t
> >>> +typedef        __off_t         off_t;          /* file offset */
> >>> +#define        off_t           __off_t
> >>> +#endif
> >>> +#endif /* __rtems__ */
> >>> +
> >>> +
> >>> +/*
> >>> + * Protections are chosen from these bits, or-ed together
> >>> + */
> >>> +#define        PROT_NONE       0x00    /* no permissions */
> >>> +#define        PROT_READ       0x01    /* pages can be read */
> >>> +#define        PROT_WRITE      0x02    /* pages can be written */
> >>> +#define        PROT_EXEC       0x04    /* pages can be executed */
> >>> +
> >>> +/*
> >>> + * Flags contain sharing type and options.
> >>> + * Sharing types; choose one.
> >>> + */
> >>> +#define        MAP_SHARED      0x0001  /* share changes */
> >>> +#define        MAP_PRIVATE     0x0002  /* changes are private */
> >>> +
> >>> +#ifdef _KERNEL
> >>> +/*
> >>> + * Deprecated flag; these are treated as MAP_PRIVATE internally by
> >>> + * the kernel.
> >>> + */
> >>> +#define        MAP_COPY        0x0004  /* "copy" region at mmap time
*/
> >>> +#endif
> >>> +
> >>> +/*
> >>> + * Other flags
> >>> + */
> >>> +#define        MAP_FIXED        0x0010 /* map addr must be exactly
as requested */
> >>> +#define        MAP_RENAME       0x0020 /* Sun: rename private pages
to file */
> >>> +#define        MAP_NORESERVE    0x0040 /* Sun: don't reserve needed
swap area */
> >>> +#define        MAP_INHERIT      0x0080 /* region is retained after
exec */
> >>> +#define        MAP_HASSEMAPHORE 0x0200 /* region may contain
semaphores */
> >>> +#define        MAP_TRYFIXED     0x0400 /* attempt hint address, even
within break */
> >>> +#define        MAP_WIRED        0x0800 /* mlock() mapping when it is
established */
> >>> +
> >>> +/*
> >>> + * Mapping type
> >>> + */
> >>> +#define        MAP_FILE        0x0000  /* map from file (default) */
> >>> +#define        MAP_ANON        0x1000  /* allocated from memory,
swap space */
> >>> +
> >>> +/*
> >>> + * Alignment (expressed in log2).  Must be >= log2(PAGE_SIZE) and
> >>> + * < # bits in a pointer (26 (acorn26), 32 or 64).
> >>> + */
> >>> +#define        MAP_ALIGNED(n)          ((n) << MAP_ALIGNMENT_SHIFT)
> >>> +#define        MAP_ALIGNMENT_SHIFT     24
> >>> +#define        MAP_ALIGNMENT_MASK      MAP_ALIGNED(0xff)
> >>> +#define        MAP_ALIGNMENT_64KB      MAP_ALIGNED(16) /* 2^16 */
> >>> +#define        MAP_ALIGNMENT_16MB      MAP_ALIGNED(24) /* 2^24 */
> >>> +#define        MAP_ALIGNMENT_4GB       MAP_ALIGNED(32) /* 2^32 */
> >>> +#define        MAP_ALIGNMENT_1TB       MAP_ALIGNED(40) /* 2^40 */
> >>> +#define        MAP_ALIGNMENT_256TB     MAP_ALIGNED(48) /* 2^48 */
> >>> +#define        MAP_ALIGNMENT_64PB      MAP_ALIGNED(56) /* 2^56 */
> >>> +
> >>> +/*
> >>> + * Error indicator returned by mmap(2)
> >>> + */
> >>> +#define        MAP_FAILED      ((void *) -1)   /* mmap() failed */
> >>> +
> >>> +/*
> >>> + * Flags to msync
> >>> + */
> >>> +#define        MS_ASYNC        0x01    /* perform asynchronous
writes */
> >>> +#define        MS_INVALIDATE   0x02    /* invalidate cached data */
> >>> +#define        MS_SYNC         0x04    /* perform synchronous writes
*/
> >>> +
> >>> +/*
> >>> + * Flags to mlockall
> >>> + */
> >>> +#define        MCL_CURRENT     0x01    /* lock all pages currently
mapped */
> >>> +#define        MCL_FUTURE      0x02    /* lock all pages mapped in
the future */
> >>> +
> >>> +#if defined(_NETBSD_SOURCE)
> >>> +/*
> >>> + * Advice to madvise
> >>> + */
> >>> +#define        MADV_NORMAL     0       /* no further special
treatment */
> >>> +#define        MADV_RANDOM     1       /* expect random page
references */
> >>> +#define        MADV_SEQUENTIAL 2       /* expect sequential page
references */
> >>> +#define        MADV_WILLNEED   3       /* will need these pages */
> >>> +#define        MADV_DONTNEED   4       /* dont need these pages */
> >>> +#define        MADV_SPACEAVAIL 5       /* insure that resources are
reserved */
> >>> +#define        MADV_FREE       6       /* pages are empty, free them
*/
> >>> +/*
> >>> + * Flags to minherit
> >>> + */
> >>> +#define        MAP_INHERIT_SHARE       0       /* share with child */
> >>> +#define        MAP_INHERIT_COPY        1       /* copy into child */
> >>> +#define        MAP_INHERIT_NONE        2       /* absent from child
*/
> >>> +#define        MAP_INHERIT_DONATE_COPY 3       /* copy and delete --
not
> >>> +                                          implemented in UVM */
> >>> +#define        MAP_INHERIT_DEFAULT     MAP_INHERIT_COPY
> >>> +#endif
> >>> +
> >>> +#ifndef _KERNEL
> >>> +
> >>> +#include <sys/cdefs.h>
> >>> +
> >>> +__BEGIN_DECLS
> >>> +void   *mmap(void *, size_t, int, int, int, off_t);
> >>> +int    munmap(void *, size_t);
> >>> +int    mprotect(void *, size_t, int);
> >>> +#ifndef __LIBC12_SOURCE__
> >>> +#if defined(__rtems__)
> >>> +int    msync(void *, size_t, int);
> >>> +#else
> >>> +int    msync(void *, size_t, int) __RENAME(__msync13);
> >>> +#endif
> >>> +#endif
> >>> +int    mlock(const void *, size_t);
> >>> +int    munlock(const void *, size_t);
> >>> +int    mlockall(int);
> >>> +int    munlockall(void);
> >>> +#if defined(_NETBSD_SOURCE)
> >>> +int    madvise(void *, size_t, int);
> >>> +int    mincore(void *, size_t, char *);
> >>> +int    minherit(void *, size_t, int);
> >>> +#endif
> >>> +__END_DECLS
> >>> +
> >>> +#endif /* !_KERNEL */
> >>> +
> >>> +#endif /* !_SYS_MMAN_H_ */
> >>> diff --git a/cpukit/posix/preinstall.am b/cpukit/posix/preinstall.am
> >>> index 6e3f2a2..1b65213 100644
> >>> --- a/cpukit/posix/preinstall.am
> >>> +++ b/cpukit/posix/preinstall.am
> >>> @@ -43,6 +43,15 @@ $(PROJECT_INCLUDE)/rtems/posix/posixapi.h:
include/rtems/posix/posixapi.h $(PROJ
> >>>         $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/posix/posixapi.h
> >>>  PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/posix/posixapi.h
> >>>
> >>> +$(PROJECT_INCLUDE)/sys/$(dirstamp):
> >>> +       @$(MKDIR_P) $(PROJECT_INCLUDE)/sys
> >>> +       @: > $(PROJECT_INCLUDE)/sys/$(dirstamp)
> >>> +PREINSTALL_DIRS += $(PROJECT_INCLUDE)/sys/$(dirstamp)
> >>> +
> >>> +$(PROJECT_INCLUDE)/sys/mman.h: include/sys/mman.h
$(PROJECT_INCLUDE)/sys/$(dirstamp)
> >>> +       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/sys/mman.h
> >>> +PREINSTALL_FILES += $(PROJECT_INCLUDE)/sys/mman.h
> >>> +
> >>>  if HAS_PTHREADS
> >>>  $(PROJECT_INCLUDE)/aio.h: include/aio.h
$(PROJECT_INCLUDE)/$(dirstamp)
> >>>         $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/aio.h
> >>> diff --git a/cpukit/posix/src/mmap.c b/cpukit/posix/src/mmap.c
> >>> new file mode 100644
> >>> index 0000000..2798326
> >>> --- /dev/null
> >>> +++ b/cpukit/posix/src/mmap.c
> >>> @@ -0,0 +1,26 @@
> >>> +/**
> >>> + * @file
> >>> + */
> >>> +
> >>> +/*
> >>> + *  COPYRIGHT (c) 2014.
> >>> + *  On-Line Applications Research Corporation (OAR).
> >>> + *
> >>> + *  The license and distribution terms for this file may be
> >>> + *  found in the file LICENSE in this distribution or at
> >>> + *  http://www.rtems.org/license/LICENSE.
> >>> + */
> >>> +
> >>> +#if HAVE_CONFIG_H
> >>> +#include "config.h"
> >>> +#endif
> >>> +
> >>> +#include <sys/mman.h>
> >>> +
> >>> +int munmap(
> >>> +  void   *addr __attribute__((unused)),
> >>> +  size_t  length __attribute__((unused))
> >>> +)
> >>> +{
> >>> +  return -1;
> >>> +}
> >>> diff --git a/cpukit/posix/src/mprotect.c b/cpukit/posix/src/mprotect.c
> >>> index 51b565e..94bd316 100644
> >>> --- a/cpukit/posix/src/mprotect.c
> >>> +++ b/cpukit/posix/src/mprotect.c
> >>> @@ -28,16 +28,10 @@
> >>>  #endif
> >>>
> >>>  #include <unistd.h>
> >>> -
> >>> -/*
> >>> - * RTEMS does not have <sys/mman.h> so we need a prototype here to
> >>> - * avoid warnings.
> >>> - */
> >>> -
> >>> -int mprotect( const void *, size_t, int );
> >>> +#include <sys/mman.h>
> >>>
> >>>  int mprotect(
> >>> -  const void *addr __attribute__((unused)),
> >>> +  void *addr __attribute__((unused)),
> >>>    size_t len __attribute__((unused)),
> >>>    int prot __attribute__((unused)) )
> >>>  {
> >>> diff --git a/cpukit/posix/src/munmap.c b/cpukit/posix/src/munmap.c
> >>> new file mode 100644
> >>> index 0000000..3ebb2f4
> >>> --- /dev/null
> >>> +++ b/cpukit/posix/src/munmap.c
> >>> @@ -0,0 +1,30 @@
> >>> +/**
> >>> + * @file
> >>> + */
> >>> +
> >>> +/*
> >>> + *  COPYRIGHT (c) 2014.
> >>> + *  On-Line Applications Research Corporation (OAR).
> >>> + *
> >>> + *  The license and distribution terms for this file may be
> >>> + *  found in the file LICENSE in this distribution or at
> >>> + *  http://www.rtems.org/license/LICENSE.
> >>> + */
> >>> +
> >>> +#if HAVE_CONFIG_H
> >>> +#include "config.h"
> >>> +#endif
> >>> +
> >>> +#include <sys/mman.h>
> >>> +
> >>> +void *mmap(
> >>> +  void   *addr __attribute__((unused)),
> >>> +  size_t  lenhth __attribute__((unused)),
> >>> +  int     prot __attribute__((unused)),
> >>> +  int     flags __attribute__((unused)),
> >>> +  int     fildes __attribute__((unused)),
> >>> +  off_t   off
> >>> +)
> >>> +{
> >>> +  return NULL;
> >>> +}
> >>> --
> >>> 1.9.3
> >>>
> >>> _______________________________________________
> >>> devel mailing list
> >>> devel at rtems.org
> >>> http://lists.rtems.org/mailman/listinfo/devel
> >
> > --
> > Joel Sherrill, Ph.D.             Director of Research & Development
> > joel.sherrill at OARcorp.com        On-Line Applications Research
> > Ask me about RTEMS: a free RTOS  Huntsville AL 35805
> > Support Available                (256) 722-9985
> >
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160730/d9c8d4ce/attachment-0001.html>


More information about the devel mailing list