mmapobj(2) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

mmapobj(2)

mmapobj(2)                       System Calls                       mmapobj(2)

NAME
       mmapobj - map a file object

SYNOPSIS
       #include <sys/mman.h>

       int mmapobj(int fd, uint_t flags, mmapobj_result_t *storage,
            uint_t *elements, void *arg);

PARAMETERS
       fd          The open file descriptor of the file to be mapped.


       flags       Modify  the  default  behavior  of mmapobj(). The following
                   flags are available.

                   MMOBJ_INTERPRET

                       Interpret the contents of the file  descriptor  instead
                       of  mapping  the  file as a single image. This flag can
                       only be used with ELF files.


                   MMOBJ_PADDING

                       Add an additional mapping before the lowest mapping and
                       after the highest mapping. The size of  each  of  these
                       padding  areas  is  at  least  as  large  as the amount
                       pointed to by arg, which must be a pointer to an  inte‐
                       ger  of  type  size_t containing the number of bytes of
                       padding requested. These padding areas are  private  to
                       the process, do not reserve any swap space, and have no
                       protections.  To  use  these padding areas, the protec‐
                       tions for the underlying mappings must be changed.  See
                       mprotect(2).



       storage     A  pointer  to the mmapobj_result_t array where the mapping
                   data is copied out after a successful mapping of fd. A seg‐
                   ment is represented by one or more adjacent  VM  page  map‐
                   pings.


       elements    A  pointer  to  the  number  of  mmapobj_result_t  elements
                   pointed to by storage. On  return,  elements  contains  the
                   number  of  storage  elements that are required to describe
                   the mappings of the requested object. If the value of  ele‐
                   ments is too small, E2BIG is returned and elements is modi‐
                   fied to contain the number of storage elements necessary.


       arg         A  pointer  to additional information that might be associ‐
                   ated with the specific request. Only the MMOBJ_PADDING  re‐
                   quest  uses  this  argument. If MMOBJ_PADDING is not speci‐
                   fied, arg must be NULL.


DESCRIPTION
       The mmapobj() function establishes a set of  segment  mappings  between
       the  address space of a process and the file provided by the descriptor
       fd. Each segment is represented by one or more adjacent  VM  page  map‐
       pings.  On  return  from  mmapobj(), data describing the mapping of the
       file is copied out to the area defined by storage and elements.


       By default, mmapobj() maps the whole file as a single,  private,  read-
       only mapping. In this case, only one storage element is required to de‐
       scribe the mapped file.


       The  MMOBJ_INTERPRET  flag  instructs mmapobj() to attempt to interpret
       the file and map the file according to the rules for that file  format.
       ELF  objects  define  their  mapping requirements in terms of segments.
       Typically, such objects define a text and data segment, as  defined  by
       the  file's program header information. These segments are created from
       mappings of the file, and can be augmented with mappings  that  provide
       zero-filled  memory. In this typical case, two storage elements are re‐
       quired to describe the segments of the mapped file.


       The following ELF formats are supported.

       ET_EXEC executables

           This format results in the file being mapped into one or more  seg‐
           ments  whose  size,  alignment, and protections are as described by
           the file's program header information. The address of each  segment
           is explicitly defined by the file's program headers.


       ET_DYN shared objects

           This  format results in the file being mapped into one or more seg‐
           ments whose size, alignment, and protections are  as  described  by
           the file's program header information. The base address of the ini‐
           tial segment is chosen by mmapobj(). The addresses of adjacent seg‐
           ments  are  based off of this base address as defined by the file's
           program headers.


       ET_REL and ET_CORE

           This format results in a single, read-only mapping that covers  the
           whole  file.  The  base  address  of  this  mapping  is  chosen  by
           mmapobj().



       The mmapobj() function will not map over any  currently  used  mappings
       within  the  process,  except  for  the case of an ELF ET_EXEC file for
       which a previous reservation has been made via /dev/null. The most com‐
       mon way to make such a reservation is an mmap() of /dev/null.


       Mapped segments created with mmapobj() can be processed individually by
       other system calls such as munmap(2). Even if a segment is  represented
       by several underlying VM page mappings, it is possible to process it at
       once.


       The mmapobj_result structure contains the following members.

         typedef struct mmapobj_result {
               caddr_t     mr_addr;     /* mapping address */
               size_t      mr_msize;    /* mapping size */
               size_t      mr_fsize;    /* file size */
               size_t      mr_offset;   /* offset into mapping */
               uint_t      mr_prot;     /* protections provided */
               uint_t      mr_flags;    /* info on the mapping */
         } mmapobj_result_t;



       The  MR_GET_TYPE()  macro  must  be used to interpret any mr_flags. The
       following mr_flags are available.

         MR_PADDING   0x1  /* mapping provides padding */
         MR_HDR_ELF   0x2  /* ELF header is mapped at mr_addr */




       When MR_PADDING is set, mr_fsize and mr_offset are both 0.


       The mr_fsize member represents the amount of the file  that  is  mapped
       into memory with this segment.


       The  mr_offset  member  is the offset into the segment where valid data
       begins.


       The mr_msize member represents the size of the memory segment  starting
       at  mr_addr. This size may include unused data prior to mr_offset. This
       data can exist to satisfy the alignment requirements of segments within
       an interpreted ELF file. This size may also include any  non-file  data
       that  is  required  to  provide  zero-filled, or NOBITS data (typically
       .bss). The system reserves the right to map more than mr_msize bytes of
       memory but only mr_msize bytes is available to the caller of mmapobj().

RETURN VALUES
       Upon successful completion, 0 is returned  and  elements  contains  the
       number  of  valid entries in the storage array that are required to de‐
       scribe the mapping for fd.  The  data  describing  these  elements  are
       copied  to  storage such that the first elements members of the storage
       array contain valid segment data.


       On failure, -1 is returned and errno is set to indicate the  error.  No
       data is copied to storage, however, elements can be updated in some er‐
       ror cases.

ERRORS
       The mmapobj() function will fail if:

       E2BIG         The elements argument is not large enough to describe the
                     number of mappings for fd. The elements argument is modi‐
                     fied to contain the number of mappings required.


       EACCES        The  file  system containing the fd to be mapped does not
                     allow execute access, or the file descriptor  pointed  to
                     by fd is not open for reading.


       EADDRINUSE    The  mapping  requirements  overlap an object that is al‐
                     ready used by the process.


       EAGAIN        There is insufficient room to reserve swap space for  the
                     mapping.

                     The file to be mapped is already locked using advisory or
                     mandatory record locking. See fcntl(2).


       EBADF         The fd argument is not a valid open file descriptor.


       EFAULT        The  storage,  arg, or elements argument points to an in‐
                     valid address.


       EINVAL        The flags argument contains an invalid flag.

                     The flags argument does not contain MMOBJ_PADDING and arg
                     is non-null.

                     The file to be mapped has a length of 0.


       ENODEV        The fd argument refers to an object for  which  mmapobj()
                     is meaningless, such as a terminal.


       ENOMEM        Insufficient  memory is available in the address space to
                     create the mapping.

                     The flags argument contains MMOBJ_INTERPRET and there  is
                     insufficient memory available to hold the program headers
                     for the ELF file.


       ENOTSUP       The  current  user data model does not match the fd to be
                     interpreted. For example, a 32-bit process that tried  to
                     use  mmapobj()  to interpret a 64-bit object would return
                     ENOTSUP.

                     The flags argument contains MMOBJ_INTERPRET  and  the  fd
                     argument is a file whose type can not be interpreted.

                     The ELF header contains an unaligned e_phentsize value.


       ENOSYS        An  unsupported  file system operation is attempted while
                     trying to map in the object.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityPrivate _ MT-LevelAsync-Signal-Safe


SEE ALSO
       ld.so.1(1), fcntl(2), memcntl(2), mmap(2), mprotect(2), munmap(2), mad‐
       vise(3C), mlockall(3C), msync(3C), elf(3ELF), a.out(5), attributes(7)


       Oracle Solaris 11.4 Linkers and Libraries Guide

Oracle Solaris 11.4              26 April 2020                      mmapobj(2)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3