| Skip Navigation Links | |
| Exit Print View | |
![]() | man pages section 2: System Calls Oracle Solaris 11 Information Library |
- map a file object in the appropriate manner
#include <sys/mman.h>intmmapobj(intfd,uint_tflags,mmapobj_result_t *storage,uint_t *elements,void *arg);
The open file descriptor for the file to be mapped.
Indicates that the default behavior ofmmapobj() should be modified accordingly. Available flags are:
Interpret the contents of the file descriptor instead of just mapping it as a single image. This flag can be used only withELF andAOUT files.
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 byarg. 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 theAOUT format.
A pointer to themmapobj_result_t array where the mapping data will be copied out after a successful mapping offd.
A pointer to the number ofmmapobj_result_t elements pointed to bystorage. On return,elements contains the number of mappings required to fully map the requested object. If the original value ofelements is too small,E2BIG is returned andelements is modified to contain the number of mappings necessary.
A pointer to additional information that might be associated with the specific request. Only theMMOBJ_PADDING request uses this argument. IfMMOBJ_PADDING is not specified,arg must beNULL.
Themmapobj() function establishes a set of mappings between a process's addressspace and a file. By default,mmapobj() maps the whole fileas a single, private, read-only mapping. TheMMOBJ_INTERPRET flag instructsmmapobj()to attempt to interpret the file and map the file according to therules for that file format. The followingELF andAOUT formatsare supported:
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.
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 bymmapobj(). The addresses of adjacent mappings are based off of this base address as defined by the file's program headers.
This format results in a single, read-only mapping that covers the whole file. The base address of this mapping is chosen bymmapobj().
Themmapobj() function will not map over any currently used mappings withinthe process, except for the case of anELF ET_EXEC file for whicha previous reservation has been made via/dev/null. The most common wayto make such a reservation would be with anmmap() of/dev/null.
Mappings created withmmapobj() can be processed individually by other system callssuch asmunmap(2).
Themmapobj_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 macroMR_GET_TYPE(mr_flags) must be used when looking for the above flagsin the value ofmr_flags.
Values formr_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 */
WhenMR_PADDING is set,mr_fsize andmr_offset will both be 0.
Themr_fsize member represents the amount of the file that is mappedinto memory with this mapping.
Themr_offset member is the offset into the mapping where valid databegins.
Themr_msize member represents the size of the memory mapping starting atmr_addr. This size may include unused data prior tomr_offset that existsto satisfy the alignment requirements of this segment. This size may also includeany non-file data that are required to provideNOBITS data (typically .bss).The system reserves the right to map more thanmr_msize bytes ofmemory but onlymr_msize bytes will be available to the caller ofmmapobj().
Upon successful completion, 0 is returned andelements contains the number ofprogram headers that are mapped forfd. The data describing these elementsare copied to storage such that the firstelements members of the storagearray contain valid mapping data.
On failure, -1 is returned anderrno is set to indicate theerror. No data is copied to storage.
Themmapobj() function will fail if:
Theelements argument was not large enough to hold the number of loadable segments infd. Theelements argument will be modified to contain the number of segments required.
The file system containing thefd to be mapped does not allow execute access, or the file descriptor pointed to byfd is not open for reading.
The mapping requirements overlap an object that is already used by the process.
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. Seefcntl(2).
Thefd argument is not a valid open file descriptor.
Thestorage,arg, orelements argument points to an invalid address.
Theflags argument contains an invalid flag.
MMOBJ_PADDING was not specified inflagsandarg was non-null.
The file to be mapped has a length of 0.
Thefd argument refers to an object for whichmmapobj() is meaningless, such as a terminal.
Insufficient memory is available to hold the program headers.
Insufficient memory is available in the address space to create the mapping.
The current user data model does not match thefd to be interpreted; thus, a 32-bit process that tried to usemmapobj() to interpret a 64-bit object would returnENOTSUP.
Thefd argument is a file whose type can not be interpreted andMMOBJ_INTERPRET was specified inflags.
TheELF header contains an unalignede_phentsize value.
An unsupported filesystem operation was attempted while trying to map in the object.
Seeattributes(5) for descriptions of the following attributes:
|
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)
Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Legal Notices | ![]() ![]() |