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
                   request  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
       describe 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
       required 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
       describe 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
       error 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
                     already 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
                     invalid 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