216 lines
10 KiB
HTML
216 lines
10 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<!-- This file documents the GNU linker LD
|
|
(Linaro_Binutils-2017.02)
|
|
version 2.27.0.
|
|
|
|
Copyright (C) 1991-2016 Free Software Foundation, Inc.
|
|
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the GNU Free Documentation License, Version 1.3
|
|
or any later version published by the Free Software Foundation;
|
|
with no Invariant Sections, with no Front-Cover Texts, and with no
|
|
Back-Cover Texts. A copy of the license is included in the
|
|
section entitled "GNU Free Documentation License". -->
|
|
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
|
|
<head>
|
|
<title>LD: Input Section Wildcards</title>
|
|
|
|
<meta name="description" content="LD: Input Section Wildcards">
|
|
<meta name="keywords" content="LD: Input Section Wildcards">
|
|
<meta name="resource-type" content="document">
|
|
<meta name="distribution" content="global">
|
|
<meta name="Generator" content="makeinfo">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<link href="index.html#Top" rel="start" title="Top">
|
|
<link href="LD-Index.html#LD-Index" rel="index" title="LD Index">
|
|
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
|
|
<link href="Input-Section.html#Input-Section" rel="up" title="Input Section">
|
|
<link href="Input-Section-Common.html#Input-Section-Common" rel="next" title="Input Section Common">
|
|
<link href="Input-Section-Basics.html#Input-Section-Basics" rel="prev" title="Input Section Basics">
|
|
<style type="text/css">
|
|
<!--
|
|
a.summary-letter {text-decoration: none}
|
|
blockquote.smallquotation {font-size: smaller}
|
|
div.display {margin-left: 3.2em}
|
|
div.example {margin-left: 3.2em}
|
|
div.indentedblock {margin-left: 3.2em}
|
|
div.lisp {margin-left: 3.2em}
|
|
div.smalldisplay {margin-left: 3.2em}
|
|
div.smallexample {margin-left: 3.2em}
|
|
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
|
|
div.smalllisp {margin-left: 3.2em}
|
|
kbd {font-style:oblique}
|
|
pre.display {font-family: inherit}
|
|
pre.format {font-family: inherit}
|
|
pre.menu-comment {font-family: serif}
|
|
pre.menu-preformatted {font-family: serif}
|
|
pre.smalldisplay {font-family: inherit; font-size: smaller}
|
|
pre.smallexample {font-size: smaller}
|
|
pre.smallformat {font-family: inherit; font-size: smaller}
|
|
pre.smalllisp {font-size: smaller}
|
|
span.nocodebreak {white-space:nowrap}
|
|
span.nolinebreak {white-space:nowrap}
|
|
span.roman {font-family:serif; font-weight:normal}
|
|
span.sansserif {font-family:sans-serif; font-weight:normal}
|
|
ul.no-bullet {list-style: none}
|
|
-->
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
|
|
<a name="Input-Section-Wildcards"></a>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Input-Section-Common.html#Input-Section-Common" accesskey="n" rel="next">Input Section Common</a>, Previous: <a href="Input-Section-Basics.html#Input-Section-Basics" accesskey="p" rel="prev">Input Section Basics</a>, Up: <a href="Input-Section.html#Input-Section" accesskey="u" rel="up">Input Section</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="LD-Index.html#LD-Index" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<hr>
|
|
<a name="Input-Section-Wildcard-Patterns"></a>
|
|
<h4 class="subsubsection">3.6.4.2 Input Section Wildcard Patterns</h4>
|
|
<a name="index-input-section-wildcards"></a>
|
|
<a name="index-wildcard-file-name-patterns"></a>
|
|
<a name="index-file-name-wildcard-patterns"></a>
|
|
<a name="index-section-name-wildcard-patterns"></a>
|
|
<p>In an input section description, either the file name or the section
|
|
name or both may be wildcard patterns.
|
|
</p>
|
|
<p>The file name of ‘<samp>*</samp>’ seen in many examples is a simple wildcard
|
|
pattern for the file name.
|
|
</p>
|
|
<p>The wildcard patterns are like those used by the Unix shell.
|
|
</p>
|
|
<dl compact="compact">
|
|
<dt>‘<samp>*</samp>’</dt>
|
|
<dd><p>matches any number of characters
|
|
</p></dd>
|
|
<dt>‘<samp>?</samp>’</dt>
|
|
<dd><p>matches any single character
|
|
</p></dd>
|
|
<dt>‘<samp>[<var>chars</var>]</samp>’</dt>
|
|
<dd><p>matches a single instance of any of the <var>chars</var>; the ‘<samp>-</samp>’
|
|
character may be used to specify a range of characters, as in
|
|
‘<samp>[a-z]</samp>’ to match any lower case letter
|
|
</p></dd>
|
|
<dt>‘<samp>\</samp>’</dt>
|
|
<dd><p>quotes the following character
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<p>When a file name is matched with a wildcard, the wildcard characters
|
|
will not match a ‘<samp>/</samp>’ character (used to separate directory names on
|
|
Unix). A pattern consisting of a single ‘<samp>*</samp>’ character is an
|
|
exception; it will always match any file name, whether it contains a
|
|
‘<samp>/</samp>’ or not. In a section name, the wildcard characters will match
|
|
a ‘<samp>/</samp>’ character.
|
|
</p>
|
|
<p>File name wildcard patterns only match files which are explicitly
|
|
specified on the command line or in an <code>INPUT</code> command. The linker
|
|
does not search directories to expand wildcards.
|
|
</p>
|
|
<p>If a file name matches more than one wildcard pattern, or if a file name
|
|
appears explicitly and is also matched by a wildcard pattern, the linker
|
|
will use the first match in the linker script. For example, this
|
|
sequence of input section descriptions is probably in error, because the
|
|
<samp>data.o</samp> rule will not be used:
|
|
</p><div class="smallexample">
|
|
<pre class="smallexample">.data : { *(.data) }
|
|
.data1 : { data.o(.data) }
|
|
</pre></div>
|
|
|
|
<a name="index-SORT_005fBY_005fNAME"></a>
|
|
<p>Normally, the linker will place files and sections matched by wildcards
|
|
in the order in which they are seen during the link. You can change
|
|
this by using the <code>SORT_BY_NAME</code> keyword, which appears before a wildcard
|
|
pattern in parentheses (e.g., <code>SORT_BY_NAME(.text*)</code>). When the
|
|
<code>SORT_BY_NAME</code> keyword is used, the linker will sort the files or sections
|
|
into ascending order by name before placing them in the output file.
|
|
</p>
|
|
<a name="index-SORT_005fBY_005fALIGNMENT"></a>
|
|
<p><code>SORT_BY_ALIGNMENT</code> is very similar to <code>SORT_BY_NAME</code>. The
|
|
difference is <code>SORT_BY_ALIGNMENT</code> will sort sections into
|
|
descending order by alignment before placing them in the output file.
|
|
Larger alignments are placed before smaller alignments in order to
|
|
reduce the amount of padding necessary.
|
|
</p>
|
|
<a name="index-SORT_005fBY_005fINIT_005fPRIORITY"></a>
|
|
<p><code>SORT_BY_INIT_PRIORITY</code> is very similar to <code>SORT_BY_NAME</code>. The
|
|
difference is <code>SORT_BY_INIT_PRIORITY</code> will sort sections into
|
|
ascending order by numerical value of the GCC init_priority attribute
|
|
encoded in the section name before placing them in the output file.
|
|
</p>
|
|
<a name="index-SORT"></a>
|
|
<p><code>SORT</code> is an alias for <code>SORT_BY_NAME</code>.
|
|
</p>
|
|
<p>When there are nested section sorting commands in linker script, there
|
|
can be at most 1 level of nesting for section sorting commands.
|
|
</p>
|
|
<ol>
|
|
<li> <code>SORT_BY_NAME</code> (<code>SORT_BY_ALIGNMENT</code> (wildcard section pattern)).
|
|
It will sort the input sections by name first, then by alignment if two
|
|
sections have the same name.
|
|
</li><li> <code>SORT_BY_ALIGNMENT</code> (<code>SORT_BY_NAME</code> (wildcard section pattern)).
|
|
It will sort the input sections by alignment first, then by name if two
|
|
sections have the same alignment.
|
|
</li><li> <code>SORT_BY_NAME</code> (<code>SORT_BY_NAME</code> (wildcard section pattern)) is
|
|
treated the same as <code>SORT_BY_NAME</code> (wildcard section pattern).
|
|
</li><li> <code>SORT_BY_ALIGNMENT</code> (<code>SORT_BY_ALIGNMENT</code> (wildcard section pattern))
|
|
is treated the same as <code>SORT_BY_ALIGNMENT</code> (wildcard section pattern).
|
|
</li><li> All other nested section sorting commands are invalid.
|
|
</li></ol>
|
|
|
|
<p>When both command line section sorting option and linker script
|
|
section sorting command are used, section sorting command always
|
|
takes precedence over the command line option.
|
|
</p>
|
|
<p>If the section sorting command in linker script isn’t nested, the
|
|
command line option will make the section sorting command to be
|
|
treated as nested sorting command.
|
|
</p>
|
|
<ol>
|
|
<li> <code>SORT_BY_NAME</code> (wildcard section pattern ) with
|
|
<samp>--sort-sections alignment</samp> is equivalent to
|
|
<code>SORT_BY_NAME</code> (<code>SORT_BY_ALIGNMENT</code> (wildcard section pattern)).
|
|
</li><li> <code>SORT_BY_ALIGNMENT</code> (wildcard section pattern) with
|
|
<samp>--sort-section name</samp> is equivalent to
|
|
<code>SORT_BY_ALIGNMENT</code> (<code>SORT_BY_NAME</code> (wildcard section pattern)).
|
|
</li></ol>
|
|
|
|
<p>If the section sorting command in linker script is nested, the
|
|
command line option will be ignored.
|
|
</p>
|
|
<a name="index-SORT_005fNONE"></a>
|
|
<p><code>SORT_NONE</code> disables section sorting by ignoring the command line
|
|
section sorting option.
|
|
</p>
|
|
<p>If you ever get confused about where input sections are going, use the
|
|
‘<samp>-M</samp>’ linker option to generate a map file. The map file shows
|
|
precisely how input sections are mapped to output sections.
|
|
</p>
|
|
<p>This example shows how wildcard patterns might be used to partition
|
|
files. This linker script directs the linker to place all ‘<samp>.text</samp>’
|
|
sections in ‘<samp>.text</samp>’ and all ‘<samp>.bss</samp>’ sections in ‘<samp>.bss</samp>’.
|
|
The linker will place the ‘<samp>.data</samp>’ section from all files beginning
|
|
with an upper case character in ‘<samp>.DATA</samp>’; for all other files, the
|
|
linker will place the ‘<samp>.data</samp>’ section in ‘<samp>.data</samp>’.
|
|
</p><div class="smallexample">
|
|
<pre class="smallexample">SECTIONS {
|
|
.text : { *(.text) }
|
|
.DATA : { [A-Z]*(.data) }
|
|
.data : { *(.data) }
|
|
.bss : { *(.bss) }
|
|
}
|
|
</pre></div>
|
|
|
|
<hr>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Input-Section-Common.html#Input-Section-Common" accesskey="n" rel="next">Input Section Common</a>, Previous: <a href="Input-Section-Basics.html#Input-Section-Basics" accesskey="p" rel="prev">Input Section Basics</a>, Up: <a href="Input-Section.html#Input-Section" accesskey="u" rel="up">Input Section</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="LD-Index.html#LD-Index" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|