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
|