10.5.5.1 Input Section Description
The most common output section command is an input section description.
The input section description is the most basic linker script operation. Output sections tell the linker how to lay out the program in memory. Input section descriptions tell the linker how to map the input files into the memory layout.
An input section description consists of a file name optionally followed by a list of section names in parentheses.
The file name and the section name may be wildcard patterns, which are described further below.
The most common input section description is to include all input sections with a particular name in the output section. For example, to include all input .text
sections, one would write:
*(.text)
Here the *
is a wildcard which matches any file name. To exclude a list of files from matching the file name wildcard, EXCLUDE_FILE
may be used to match all files except the ones specified in the EXCLUDE_FILE
list. For example:
*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)
will cause all .ctors
sections from all files except crtend.o
and otherfile.o
to be included.
There are two ways to include more than one section:
*(.text .rdata)
*(.text) *(.rdata)
The difference between these is the order in which the .text
and .rdata
input sections will appear in the output section. In the first example, they will be intermingled. In the second example, all .text
input sections will appear first, followed by all .rdata
input sections.
A file name can be specified to include sections from a particular file. This would be useful if one of the files contain special data that needs to be at a particular location in memory. For example:
data.o(.data)
If a file name is specified without a list of sections, then all sections in the input file will be included in the output section. This is not commonly done, but it may be useful on occasion. For example:
data.o
When a file name is specified which does not contain any wild card characters, the linker will first see if the file name was also specified on the linker command line or in an INPUT
command. If not, the linker will attempt to open the file as an input file, as though it appeared on the command line. This differs from an INPUT
command because the linker will not search for the file in the archive search path.