MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


System Calls                                           mmapobj(2)



NAME
     mmapobj - map a file object in the appropriate manner

SYNOPSIS
     #include 

     int mmapobj(int fd, uintt flags, mmapobjresultt *storage,
          uintt *elements, void *arg);


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


     flags       Indicates that the default behavior of mmapobj()
                 should  be modified accordingly. Available flags
                 are:

                 MOBJINTERPRET

                     Interpret the contents of the file  descrip-
                     tor  instead  of just mapping it as a single
                     image. This flag can be used only  with  ELF
                     and AOUT files.


                 MOBJPADING

                     When mapping in the file descriptor, add  an
                     additional mapping before the lowest mapping
                     and after the highest mapping. The  size  of
                     this  padding  is  at  least as large as the
                     amount pointed to  by  arg.  These  mappings
                     will  be  private  to  the process, will not
                     reserve any swap space and will have no pro-
                     tections.  To  use  this  address space, the
                     protections for it will need to be  changed.
                     This padding request will be ignored for the
                     AOUT format.



     storage     A pointer to the  mmapobjresultt  array  where
                 the mapping data will be copied out after a suc-
                 cessful mapping of fd.


     elements    A pointer to the number of mmapobjresultt ele-
                 ments  pointed  to  by storage.  On return, ele-
                 ments contains the number of  mappings  required
                 to  fully  map  the  requested  object.   If the



SunOS 5.11           Last change: 1 Dec 2008                    1






System Calls                                           mmapobj(2)



                 original value of elements is too  small,  E2BIG
                 is  returned and elements is modified to contain
                 the number of mappings necessary.


     arg         A pointer to additional information  that  might
                 be  associated  with  the specific request. Only
                 the MOBJPADING request uses this argument. If
                 MOBJPADING  is  not  specified,  arg  must be
                 NUL.


DESCRIPTION
     The mmapobj() function establishes a set of mappings between
     a process's address space and a file.  By default, mmapobj()
     maps the whole file as a single, private, read-only mapping.
     The  MOBJINTERPRET  flag instructs mmapobj() to attempt to
     interpret the file and map the file according to  the  rules
     for  that  file  format.  The following ELF and AOUT formats
     are supported:

     ETEXEC and AOUT executables

         This format results in one or more mappings whose  size,
         alignment and protections are as described by the file's
         program header information. The address of each  mapping
         is explicitly defined by the file's program headers.


     ETDYN and AOUT shared objects

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


     ETREL and ETCORE

         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
     ETEXEC file for which a previous reservation has been  made
     via  /dev/null.  The most common way to make such a reserva-
     tion would be with an mmap() of /dev/null.



SunOS 5.11           Last change: 1 Dec 2008                    2






System Calls                                           mmapobj(2)



     Mappings created with mmapobj() can be  processed  individu-
     ally by other system calls such as munmap(2).


     The mmapobjresult structure contains the following members:

       typedef struct mmapobjresult {
             caddrt         mraddr;         /* mapping address */
             sizet          mrmsize;        /* mapping size */
             sizet          mrfsize;        /* file size */
             sizet          mroffset;       /* offset into file */
             uintt          mrprot;         /* the protections provided */
             uintt          mrflags;        /* info on the mapping */
       } mmapobjresultt;



     The macro MRGETYPE(mrflags) must be  used  when  looking
     for the above flags in the value of mrflags.


     Values for mrflags include:

       MRPADING   0x1  /* this mapping represents requested padding */
       MRHDRELF   0x2  /* the ELF header is mapped at mraddr */
       MRHDRAOU   0x3  /* the AOUT header is mapped at mraddr */



     When MRPADING is set, mrfsize and mroffset will both  be
     0.


     The mrfsize member represents the amount of the  file  that
     is mapped into memory with this mapping.


     The mroffset member is the offset into  the  mapping  where
     valid data begins.


     The mrmsize member represents the size of the  memory  map-
     ping  starting at mraddr. This size may include unused data
     prior to mroffset that  exists  to  satisfy  the  alignment
     requirements of this segment. This size may also include any
     non-file data that are required to provide NOBITS data (typ-
     ically .bss). The system reserves the right to map more than
     mrmsize bytes of memory but only  mrmsize  bytes  will  be
     available to the caller of mmapobj().

RETURN VALUES




SunOS 5.11           Last change: 1 Dec 2008                    3






System Calls                                           mmapobj(2)



     Upon successful completion, 0 is returned and elements  con-
     tains  the number of program headers that are mapped for fd.
     The data describing these elements  are  copied  to  storage
     such  that  the  first elements members of the storage array
     contain valid mapping data.


     On failure, -1 is returned and errno is set to indicate  the
     error. No data is copied to storage.

ERORS
     The mmapobj() function will fail if:

     E2BIG         The elements argument was not large enough  to
                   hold  the  number  of loadable segments in fd.
                   The elements argument will be modified to con-
                   tain the number of segments required.


     EACES        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.


     EADRINUSE    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.

                   MOBJPADING was not  specified  in  flagsand
                   arg was non-null.






SunOS 5.11           Last change: 1 Dec 2008                    4






System Calls                                           mmapobj(2)



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


     ENOMEM        Insufficient memory is available to  hold  the
                   program headers.

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


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

                   The fd argument is a file whose type  can  not
                   be  interpreted and MOBJINTERPRET was speci-
                   fied in flags.

                   The   ELF   header   contains   an   unaligned
                   ephentsize value.


     ENOSYS        An  unsupported   filesystem   operation   was
                   attempted while trying to map in the object.


ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     Interface Stability          Private                     
    
     MT-Level                     Async-Signal-Safe           
    


SEE ALSO
     ld.so.1(1), fcntl(2), memcntl(2), mmap(2), mprotect(2), mun-
     map(2),  elf(3ELF),  madvise(3C),  mlockall(3C),  msync(3C),
     a.out(4), attributes(5)


     Linker and Libraries Guide





SunOS 5.11           Last change: 1 Dec 2008                    5



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™