Mapping directives
A
mapping directive
tells
ld
how to map input sections to segments.
Basically, you name the segment that you are mapping to
and indicate what the attributes of a section must be in order to map into
the named segment.
The set of section_attribute_values
that a section must have to map into a specific
segment is called the entrance criteria for that segment.
In order to
be placed in a specified segment of the
a.out,
a section must meet the entrance criteria for a segment exactly.
A mapping directive has the following syntax:
segment_name : {section_attribute_value} [: {file_name}+];
For a segment_name, you specify any number of
section_attribute_values in
any order, each separated by a space.
(At most one section attribute value is allowed for each section attribute.)
You can also specify that the section must come from a certain .o
file(s) via the file_name substitutable.
The section attributes and their valid values are as follows:
section_name:-
any valid section name
section_type:-
$PROGBITS
$SYMTAB
$STRTAB
$REL
$RELA
$NOTE
$NOBITS
section_flags:-
?[[!]A][[!]W][[!]X]
Note the following when entering mapping directives:
-
You must choose at most one section_type from
the section_types listed above.
The section_types listed above are built-in types.
For more information on section_types, see
``Object files''.
-
The section_flags values are A for allocatable, W
for writable, or X for executable.
If an individual flag is preceded by an exclamation mark (``!''),
the linker checks to make sure that the flag is not set.
No spaces are allowed between the question mark, exclamation point(s),
and the individual flags that make up the
section_flags value.
-
file_name may be any valid file name and can be of the form
archive_name(component_name), for example,
/usr/lib/usr/libc.a(printf.o).
A file name may be of the form
file_name (see next bullet item).
Note that
ld
does not check the syntax of file names.
-
If a file_name is of the form file_name,
ld
simulates a
basename
(see
basename(1))
on the file name from the command line and uses that to match against
the mapfile file_name.
In other words, the file_name from the mapfile only needs to match the
last part of the file name from the command line.
(See ``Mapping Example'' below.)
-
If you use the -l option on the cc or ld
command line, and the library
after the -l option is in the current directory, you must precede the
library with ./ (or the entire path name) in the mapfile in order
to create a match.
-
More than one directive line may appear for a particular output
segment,
for example, the following set of directives is valid:
S1 : $PROGBITS;
S1 : $NOBITS;
Entering more than one mapping directive line for a segment is the only way to
specify multiple values of a section attribute.
-
A section can match more than one entrance criteria.
In this case, the
first segment
encountered in the mapfile with that entrance criteria is used,
for example, if a mapfile reads:
S1 : $PROGBITS;
S2 : $PROGBITS;
the
$PROGBITS
sections are mapped to segment
S1.
Next topic:
Size-symbol declarations
Previous topic:
Segment declarations
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 27 April 2004