Linker and Libraries Guide

Mapping Directives

A mapping directive tells the link-editor how to map input sections to output 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:

Table 8-2 Section Attributes

Section Attribute 

Value 

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:


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.


S1 : $PROGBITS; 
S2 : $PROGBITS; 

the $PROGBITS sections are mapped to segment S1.

Section-within-Segment Ordering

By using the following notation it is possible to specify the order that sections will be placed within a segment:


segment_name | section_name1;
segment_name | section_name2;
segment_name | section_name3;

The sections that are named in the above form will be placed before any unnamed sections, and in the order they are listed in the mapfile.