mmapobj man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

MMAPOBJ(2)							    MMAPOBJ(2)

NAME
       mmapobj - map a file object in the appropriate manner

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 for the file to be mapped.

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

		   MMOBJ_INTERPRET

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

		   MMOBJ_PADDING

		       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  protections.  To  use this address
		       space, the protections for it will need to be  changed.
		       This  padding request will be ignored for the AOUT for‐
		       mat.

       storage
		   A pointer to the mmapobj_result_t array where  the  mapping
		   data will be copied out after a successful mapping of fd.

       elements
		   A  pointer  to  the	number	of  mmapobj_result_t  elements
		   pointed to by storage.  On return,  elements	 contains  the
		   number  of  mappings	 required  to  fully map the requested
		   object.  If the 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  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  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 MMOBJ_INTER‐
       PRET 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:

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

       ET_DYN 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 initial 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.

       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  would  be  with	an  mmap()  of
       /dev/null.

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

       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 file */
	       uint_t	       mr_prot;		/* the protections provided */
	       uint_t	       mr_flags;	/* info on the mapping */
	 } mmapobj_result_t;

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

       Values for mr_flags include:

	 MR_PADDING   0x1  /* this mapping represents requested padding */
	 MR_HDR_ELF   0x2  /* the ELF header is mapped at mr_addr */
	 MR_HDR_AOU   0x3  /* the AOUT header is mapped at mr_addr */

       When MR_PADDING is set, mr_fsize and mr_offset will both be 0.

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

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

       The  mr_msize member represents the size of the memory mapping starting
       at mr_addr. This size may include unused data prior to  mr_offset  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  (typically	 .bss). The system reserves the right to map more than
       mr_msize bytes of memory but only mr_msize bytes will be	 available  to
       the caller of mmapobj().

RETURN VALUES
       Upon  successful	 completion,  0	 is returned and elements contains the
       number of program headers that are mapped for fd. The  data  describing
       these  elements are copied to storage such that the first elements mem‐
       bers 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.

ERRORS
       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  contain  the  number  of segments
		     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.

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

       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 ENOT‐
		     SUP.

		     The  fd  argument	is a file whose type can not be inter‐
		     preted and MMOBJ_INTERPRET was specified in flags.

		     The ELF header contains an unaligned e_phentsize value.

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

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

       ┌────────────────────┬───────────────────┐
       │  ATTRIBUTE TYPE    │  ATTRIBUTE VALUE	│
       ├────────────────────┼───────────────────┤
       │Interface Stability │ Private		│
       ├────────────────────┼───────────────────┤
       │MT-Level	    │ Async-Signal-Safe │
       └────────────────────┴───────────────────┘

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

       Linker and Libraries Guide

				  Dec 1, 2008			    MMAPOBJ(2)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net