hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
<!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
(GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))
version 2.36.1.
 
Copyright (C) 1991-2021 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.1, 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="previous" 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="previous">Input Section Basics</a>, Up: <a href="Input-Section.html#Input-Section" accesskey="u" rel="up">Input Section</a> &nbsp; [<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 &lsquo;<samp>*</samp>&rsquo; 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>&lsquo;<samp>*</samp>&rsquo;</dt>
<dd><p>matches any number of characters
</p></dd>
<dt>&lsquo;<samp>?</samp>&rsquo;</dt>
<dd><p>matches any single character
</p></dd>
<dt>&lsquo;<samp>[<var>chars</var>]</samp>&rsquo;</dt>
<dd><p>matches a single instance of any of the <var>chars</var>; the &lsquo;<samp>-</samp>&rsquo;
character may be used to specify a range of characters, as in
&lsquo;<samp>[a-z]</samp>&rsquo; to match any lower case letter
</p></dd>
<dt>&lsquo;<samp>\</samp>&rsquo;</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 &lsquo;<samp>/</samp>&rsquo; character (used to separate directory names on
Unix).  A pattern consisting of a single &lsquo;<samp>*</samp>&rsquo; character is an
exception; it will always match any file name, whether it contains a
&lsquo;<samp>/</samp>&rsquo; or not.  In a section name, the wildcard characters will match
a &lsquo;<samp>/</samp>&rsquo; 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 similar to <code>SORT_BY_NAME</code>.
<code>SORT_BY_ALIGNMENT</code> will sort sections into descending order of
alignment before placing them in the output file.  Placing larger
alignments before smaller alignments can reduce the amount of padding
needed.
</p>
<a name="index-SORT_005fBY_005fINIT_005fPRIORITY"></a>
<p><code>SORT_BY_INIT_PRIORITY</code> is also similar to <code>SORT_BY_NAME</code>.
<code>SORT_BY_INIT_PRIORITY</code> will sort sections into ascending
numerical order of the GCC init_priority attribute encoded in the
section name before placing them in the output file.  In
<code>.init_array.NNNNN</code> and <code>.fini_array.NNNNN</code>, <code>NNNNN</code> is
the init_priority.  In <code>.ctors.NNNNN</code> and <code>.dtors.NNNNN</code>,
<code>NNNNN</code> is 65535 minus the init_priority.
</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&rsquo;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
&lsquo;<samp>-M</samp>&rsquo; 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 &lsquo;<samp>.text</samp>&rsquo;
sections in &lsquo;<samp>.text</samp>&rsquo; and all &lsquo;<samp>.bss</samp>&rsquo; sections in &lsquo;<samp>.bss</samp>&rsquo;.
The linker will place the &lsquo;<samp>.data</samp>&rsquo; section from all files beginning
with an upper case character in &lsquo;<samp>.DATA</samp>&rsquo;; for all other files, the
linker will place the &lsquo;<samp>.data</samp>&rsquo; section in &lsquo;<samp>.data</samp>&rsquo;.
</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="previous">Input Section Basics</a>, Up: <a href="Input-Section.html#Input-Section" accesskey="u" rel="up">Input Section</a> &nbsp; [<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>