This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [PATCH 1/2] rtems: add sys/mman.h
- From: Joel Sherrill <joel dot sherrill at oarcorp dot com>
- To: Gedare Bloom <gedare at rtems dot org>,"devel at rtems dot org" <devel at rtems dot org>,"newlib at sourceware dot org" <newlib at sourceware dot org>
- Date: Mon, 1 Aug 2016 16:02:44 -0400
- Subject: Re: [PATCH 1/2] rtems: add sys/mman.h
- Authentication-results: sourceware.org; auth=none
- References: <1470081358-5624-1-git-send-email-gedare@rtems.org> <CAC82fA3tMp2j+OkTTMzmbhri=606mcJT6Wq=pyN8pMJ3LW-q7w@mail.gmail.com>
I am ok merging with merging this.
--joel
On August 1, 2016 4:00:53 PM EDT, Gedare Bloom <gedare@rtems.org> wrote:
>This mman.h is copied verbatim from the upstream freebsd sources
>pulled from the freebsd-org submodule used by rtems for the
>rtems-libbsd project: https://git.rtems.org/rtems-libbsd/tree/
>
>On Mon, Aug 1, 2016 at 3:55 PM, Gedare Bloom <gedare@rtems.org> wrote:
>> ---
>> newlib/libc/sys/rtems/include/sys/mman.h | 263
>+++++++++++++++++++++++++++++++
>> 1 file changed, 263 insertions(+)
>> create mode 100644 newlib/libc/sys/rtems/include/sys/mman.h
>>
>> diff --git a/newlib/libc/sys/rtems/include/sys/mman.h
>b/newlib/libc/sys/rtems/include/sys/mman.h
>> new file mode 100644
>> index 0000000..e7e5cf4
>> --- /dev/null
>> +++ b/newlib/libc/sys/rtems/include/sys/mman.h
>> @@ -0,0 +1,263 @@
>> +/*-
>> + * 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.
>> + * 4. 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
>> + * $FreeBSD$
>> + */
>> +
>> +#ifndef _SYS_MMAN_H_
>> +#define _SYS_MMAN_H_
>> +
>> +#include <sys/cdefs.h>
>> +#include <sys/_types.h>
>> +
>> +#if __BSD_VISIBLE
>> +/*
>> + * Inheritance for minherit()
>> + */
>> +#define INHERIT_SHARE 0
>> +#define INHERIT_COPY 1
>> +#define INHERIT_NONE 2
>> +#endif
>> +
>> +/*
>> + * 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 */
>> +#if __BSD_VISIBLE
>> +#define MAP_COPY MAP_PRIVATE /* Obsolete */
>> +#endif
>> +
>> +/*
>> + * Other flags
>> + */
>> +#define MAP_FIXED 0x0010 /* map addr must be exactly
>as requested */
>> +
>> +#if __BSD_VISIBLE
>> +#define MAP_RENAME 0x0020 /* Sun: rename private pages
>to file */
>> +#define MAP_NORESERVE 0x0040 /* Sun: don't reserve needed
>swap area */
>> +#define MAP_RESERVED0080 0x0080 /* previously misimplemented
>MAP_INHERIT */
>> +#define MAP_RESERVED0100 0x0100 /* previously unimplemented
>MAP_NOEXTEND */
>> +#define MAP_HASSEMAPHORE 0x0200 /* region may contain
>semaphores */
>> +#define MAP_STACK 0x0400 /* region grows down, like a
>stack */
>> +#define MAP_NOSYNC 0x0800 /* page to but do not sync
>underlying file */
>> +
>> +/*
>> + * Mapping type
>> + */
>> +#define MAP_FILE 0x0000 /* map from file (default) */
>> +#define MAP_ANON 0x1000 /* allocated from memory,
>swap space */
>> +#ifndef _KERNEL
>> +#define MAP_ANONYMOUS MAP_ANON /* For compatibility. */
>> +#endif /* !_KERNEL */
>> +
>> +/*
>> + * Extended flags
>> + */
>> +#define MAP_NOCORE 0x00020000 /* dont include these
>pages in a coredump */
>> +#define MAP_PREFAULT_READ 0x00040000 /* prefault mapping for
>reading */
>> +
>> +/*
>> + * Request specific alignment (n == log2 of the desired alignment).
>> + *
>> + * MAP_ALIGNED_SUPER requests optimal superpage alignment, but does
>> + * not enforce a specific alignment.
>> + */
>> +#define MAP_ALIGNED(n) ((n) << MAP_ALIGNMENT_SHIFT)
>> +#define MAP_ALIGNMENT_SHIFT 24
>> +#define MAP_ALIGNMENT_MASK MAP_ALIGNED(0xff)
>> +#define MAP_ALIGNED_SUPER MAP_ALIGNED(1) /* align on a
>superpage */
>> +#endif /* __BSD_VISIBLE */
>> +
>> +#if __POSIX_VISIBLE >= 199309
>> +/*
>> + * Process memory locking
>> + */
>> +#define MCL_CURRENT 0x0001 /* Lock only current memory */
>> +#define MCL_FUTURE 0x0002 /* Lock all future memory as well */
>> +#endif
>> +
>> +/*
>> + * Error return from mmap()
>> + */
>> +#define MAP_FAILED ((void *)-1)
>> +
>> +/*
>> + * msync() flags
>> + */
>> +#define MS_SYNC 0x0000 /* msync synchronously */
>> +#define MS_ASYNC 0x0001 /* return immediately */
>> +#define MS_INVALIDATE 0x0002 /* invalidate all cached data */
>> +
>> +/*
>> + * 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 */
>> +
>> +#if __BSD_VISIBLE
>> +#define MADV_NORMAL _MADV_NORMAL
>> +#define MADV_RANDOM _MADV_RANDOM
>> +#define MADV_SEQUENTIAL _MADV_SEQUENTIAL
>> +#define MADV_WILLNEED _MADV_WILLNEED
>> +#define MADV_DONTNEED _MADV_DONTNEED
>> +#define MADV_FREE 5 /* dont need these pages, and
>junk contents */
>> +#define MADV_NOSYNC 6 /* try to avoid flushes to
>physical media */
>> +#define MADV_AUTOSYNC 7 /* revert to default flushing
>strategy */
>> +#define MADV_NOCORE 8 /* do not include these pages
>in a core file */
>> +#define MADV_CORE 9 /* revert to including pages
>in a core file */
>> +#define MADV_PROTECT 10 /* protect process from
>pageout kill */
>> +
>> +/*
>> + * Return bits from mincore
>> + */
>> +#define MINCORE_INCORE 0x1 /* Page is incore */
>> +#define MINCORE_REFERENCED 0x2 /* Page has been
>referenced by us */
>> +#define MINCORE_MODIFIED 0x4 /* Page has been
>modified by us */
>> +#define MINCORE_REFERENCED_OTHER 0x8 /* Page has been
>referenced */
>> +#define MINCORE_MODIFIED_OTHER 0x10 /* Page has been
>modified */
>> +#define MINCORE_SUPER 0x20 /* Page is a "super"
>page */
>> +
>> +/*
>> + * Anonymous object constant for shm_open().
>> + */
>> +#define SHM_ANON ((char *)1)
>> +#endif /* __BSD_VISIBLE */
>> +
>> +/*
>> + * XXX missing POSIX_TYPED_MEM_* macros and
>> + * posix_typed_mem_info structure.
>> + */
>> +#if __POSIX_VISIBLE >= 200112
>> +#define POSIX_MADV_NORMAL _MADV_NORMAL
>> +#define POSIX_MADV_RANDOM _MADV_RANDOM
>> +#define POSIX_MADV_SEQUENTIAL _MADV_SEQUENTIAL
>> +#define POSIX_MADV_WILLNEED _MADV_WILLNEED
>> +#define POSIX_MADV_DONTNEED _MADV_DONTNEED
>> +#endif
>> +
>> +#ifndef _MODE_T_DECLARED
>> +typedef __mode_t mode_t;
>> +#define _MODE_T_DECLARED
>> +#endif
>> +
>> +#ifndef _OFF_T_DECLARED
>> +typedef __off_t off_t;
>> +#define _OFF_T_DECLARED
>> +#endif
>> +
>> +#ifndef _SIZE_T_DECLARED
>> +typedef __size_t size_t;
>> +#define _SIZE_T_DECLARED
>> +#endif
>> +
>> +#if defined(_KERNEL) || defined(_WANT_FILE)
>> +#include <vm/vm.h>
>> +
>> +struct file;
>> +
>> +struct shmfd {
>> + size_t shm_size;
>> + vm_object_t shm_object;
>> + int shm_refs;
>> + uid_t shm_uid;
>> + gid_t shm_gid;
>> + mode_t shm_mode;
>> + int shm_kmappings;
>> +
>> + /*
>> + * Values maintained solely to make this a better-behaved
>file
>> + * descriptor for fstat() to run on.
>> + */
>> + struct timespec shm_atime;
>> + struct timespec shm_mtime;
>> + struct timespec shm_ctime;
>> + struct timespec shm_birthtime;
>> + ino_t shm_ino;
>> +
>> + struct label *shm_label; /* MAC label */
>> + const char *shm_path;
>> +};
>> +#endif
>> +
>> +#ifdef _KERNEL
>> +int shm_mmap(struct shmfd *shmfd, vm_size_t objsize, vm_ooffset_t
>foff,
>> + vm_object_t *obj);
>> +int shm_map(struct file *fp, size_t size, off_t offset, void
>**memp);
>> +int shm_unmap(struct file *fp, void *mem, size_t size);
>> +void shm_path(struct shmfd *shmfd, char *path, size_t size);
>> +
>> +#else /* !_KERNEL */
>> +
>> +__BEGIN_DECLS
>> +/*
>> + * XXX not yet implemented: posix_mem_offset(),
>posix_typed_mem_get_info(),
>> + * posix_typed_mem_open().
>> + */
>> +#if __BSD_VISIBLE
>> +int getpagesizes(size_t *, int);
>> +int madvise(void *, size_t, int);
>> +int mincore(const void *, size_t, char *);
>> +int minherit(void *, size_t, int);
>> +#endif
>> +int mlock(const void *, size_t);
>> +#ifndef _MMAP_DECLARED
>> +#define _MMAP_DECLARED
>> +void * mmap(void *, size_t, int, int, int, off_t);
>> +#endif
>> +int mprotect(const void *, size_t, int);
>> +int msync(void *, size_t, int);
>> +int munlock(const void *, size_t);
>> +int munmap(void *, size_t);
>> +#if __POSIX_VISIBLE >= 200112
>> +int posix_madvise(void *, size_t, int);
>> +#endif
>> +#if __POSIX_VISIBLE >= 199309
>> +int mlockall(int);
>> +int munlockall(void);
>> +int shm_open(const char *, int, mode_t);
>> +int shm_unlink(const char *);
>> +#endif
>> +__END_DECLS
>> +
>> +#endif /* !_KERNEL */
>> +
>> +#endif /* !_SYS_MMAN_H_ */
>> --
>> 1.9.1
>>
--joel