source: trunk/src/binutils/ld/ld.info-3@ 1372

Last change on this file since 1372 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 48.8 KB
RevLine 
[609]1This is ld.info, produced by makeinfo version 4.3 from ./ld.texinfo.
[10]2
3START-INFO-DIR-ENTRY
4* Ld: (ld). The GNU linker.
5END-INFO-DIR-ENTRY
6
[609]7 This file documents the GNU linker LD version 2.14.
[10]8
[609]9 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
102002, 2003 Free Software Foundation, Inc.
[10]11
12
13File: ld.info, Node: Environment, Prev: Options, Up: Invocation
14
15Environment Variables
16=====================
17
18 You can change the behavior of `ld' with the environment variables
[609]19`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'.
[10]20
21 `GNUTARGET' determines the input-file object format if you don't use
22`-b' (or its synonym `--format'). Its value should be one of the BFD
23names for an input format (*note BFD::). If there is no `GNUTARGET' in
24the environment, `ld' uses the natural format of the target. If
25`GNUTARGET' is set to `default' then BFD attempts to discover the input
26format by examining binary input files; this method often succeeds, but
27there are potential ambiguities, since there is no method of ensuring
28that the magic number used to specify object-file formats is unique.
29However, the configuration procedure for BFD on each system places the
30conventional format for that system first in the search-list, so
31ambiguities are resolved in favor of convention.
32
33 `LDEMULATION' determines the default emulation if you don't use the
34`-m' option. The emulation can affect various aspects of linker
35behaviour, particularly the default linker script. You can list the
36available emulations with the `--verbose' or `-V' options. If the `-m'
37option is not used, and the `LDEMULATION' environment variable is not
38defined, the default emulation depends upon how the linker was
39configured.
40
41 Normally, the linker will default to demangling symbols. However, if
42`COLLECT_NO_DEMANGLE' is set in the environment, then it will default
43to not demangling symbols. This environment variable is used in a
44similar fashion by the `gcc' linker wrapper program. The default may
45be overridden by the `--demangle' and `--no-demangle' options.
46
47
48File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top
49
50Linker Scripts
51**************
52
53 Every link is controlled by a "linker script". This script is
54written in the linker command language.
55
56 The main purpose of the linker script is to describe how the
57sections in the input files should be mapped into the output file, and
58to control the memory layout of the output file. Most linker scripts
59do nothing more than this. However, when necessary, the linker script
60can also direct the linker to perform many other operations, using the
61commands described below.
62
63 The linker always uses a linker script. If you do not supply one
64yourself, the linker will use a default script that is compiled into the
65linker executable. You can use the `--verbose' command line option to
66display the default linker script. Certain command line options, such
67as `-r' or `-N', will affect the default linker script.
68
69 You may supply your own linker script by using the `-T' command line
70option. When you do this, your linker script will replace the default
71linker script.
72
73 You may also use linker scripts implicitly by naming them as input
74files to the linker, as though they were files to be linked. *Note
75Implicit Linker Scripts::.
76
77* Menu:
78
79* Basic Script Concepts:: Basic Linker Script Concepts
80* Script Format:: Linker Script Format
81* Simple Example:: Simple Linker Script Example
82* Simple Commands:: Simple Linker Script Commands
83* Assignments:: Assigning Values to Symbols
84* SECTIONS:: SECTIONS Command
85* MEMORY:: MEMORY Command
86* PHDRS:: PHDRS Command
87* VERSION:: VERSION Command
88* Expressions:: Expressions in Linker Scripts
89* Implicit Linker Scripts:: Implicit Linker Scripts
90
91
92File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts
93
94Basic Linker Script Concepts
95============================
96
97 We need to define some basic concepts and vocabulary in order to
98describe the linker script language.
99
100 The linker combines input files into a single output file. The
101output file and each input file are in a special data format known as an
102"object file format". Each file is called an "object file". The
103output file is often called an "executable", but for our purposes we
104will also call it an object file. Each object file has, among other
105things, a list of "sections". We sometimes refer to a section in an
106input file as an "input section"; similarly, a section in the output
107file is an "output section".
108
109 Each section in an object file has a name and a size. Most sections
110also have an associated block of data, known as the "section contents".
111A section may be marked as "loadable", which mean that the contents
112should be loaded into memory when the output file is run. A section
113with no contents may be "allocatable", which means that an area in
114memory should be set aside, but nothing in particular should be loaded
115there (in some cases this memory must be zeroed out). A section which
116is neither loadable nor allocatable typically contains some sort of
117debugging information.
118
119 Every loadable or allocatable output section has two addresses. The
120first is the "VMA", or virtual memory address. This is the address the
121section will have when the output file is run. The second is the
122"LMA", or load memory address. This is the address at which the
123section will be loaded. In most cases the two addresses will be the
124same. An example of when they might be different is when a data section
125is loaded into ROM, and then copied into RAM when the program starts up
126(this technique is often used to initialize global variables in a ROM
127based system). In this case the ROM address would be the LMA, and the
128RAM address would be the VMA.
129
130 You can see the sections in an object file by using the `objdump'
131program with the `-h' option.
132
133 Every object file also has a list of "symbols", known as the "symbol
134table". A symbol may be defined or undefined. Each symbol has a name,
135and each defined symbol has an address, among other information. If
136you compile a C or C++ program into an object file, you will get a
137defined symbol for every defined function and global or static
138variable. Every undefined function or global variable which is
139referenced in the input file will become an undefined symbol.
140
141 You can see the symbols in an object file by using the `nm' program,
142or by using the `objdump' program with the `-t' option.
143
144
145File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts
146
147Linker Script Format
148====================
149
150 Linker scripts are text files.
151
152 You write a linker script as a series of commands. Each command is
153either a keyword, possibly followed by arguments, or an assignment to a
154symbol. You may separate commands using semicolons. Whitespace is
155generally ignored.
156
157 Strings such as file or format names can normally be entered
158directly. If the file name contains a character such as a comma which
159would otherwise serve to separate file names, you may put the file name
160in double quotes. There is no way to use a double quote character in a
161file name.
162
163 You may include comments in linker scripts just as in C, delimited by
164`/*' and `*/'. As in C, comments are syntactically equivalent to
165whitespace.
166
167
168File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts
169
170Simple Linker Script Example
171============================
172
173 Many linker scripts are fairly simple.
174
175 The simplest possible linker script has just one command:
176`SECTIONS'. You use the `SECTIONS' command to describe the memory
177layout of the output file.
178
179 The `SECTIONS' command is a powerful command. Here we will describe
180a simple use of it. Let's assume your program consists only of code,
181initialized data, and uninitialized data. These will be in the
182`.text', `.data', and `.bss' sections, respectively. Let's assume
183further that these are the only sections which appear in your input
184files.
185
186 For this example, let's say that the code should be loaded at address
1870x10000, and that the data should start at address 0x8000000. Here is a
188linker script which will do that:
189 SECTIONS
190 {
191 . = 0x10000;
192 .text : { *(.text) }
193 . = 0x8000000;
194 .data : { *(.data) }
195 .bss : { *(.bss) }
196 }
197
198 You write the `SECTIONS' command as the keyword `SECTIONS', followed
199by a series of symbol assignments and output section descriptions
200enclosed in curly braces.
201
202 The first line inside the `SECTIONS' command of the above example
203sets the value of the special symbol `.', which is the location
204counter. If you do not specify the address of an output section in some
205other way (other ways are described later), the address is set from the
206current value of the location counter. The location counter is then
207incremented by the size of the output section. At the start of the
208`SECTIONS' command, the location counter has the value `0'.
209
210 The second line defines an output section, `.text'. The colon is
211required syntax which may be ignored for now. Within the curly braces
212after the output section name, you list the names of the input sections
213which should be placed into this output section. The `*' is a wildcard
214which matches any file name. The expression `*(.text)' means all
215`.text' input sections in all input files.
216
217 Since the location counter is `0x10000' when the output section
218`.text' is defined, the linker will set the address of the `.text'
219section in the output file to be `0x10000'.
220
221 The remaining lines define the `.data' and `.bss' sections in the
222output file. The linker will place the `.data' output section at
223address `0x8000000'. After the linker places the `.data' output
224section, the value of the location counter will be `0x8000000' plus the
225size of the `.data' output section. The effect is that the linker will
226place the `.bss' output section immediately after the `.data' output
227section in memory
228
229 The linker will ensure that each output section has the required
230alignment, by increasing the location counter if necessary. In this
231example, the specified addresses for the `.text' and `.data' sections
232will probably satisfy any alignment constraints, but the linker may
233have to create a small gap between the `.data' and `.bss' sections.
234
235 That's it! That's a simple and complete linker script.
236
237
238File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts
239
240Simple Linker Script Commands
241=============================
242
243 In this section we describe the simple linker script commands.
244
245* Menu:
246
247* Entry Point:: Setting the entry point
248* File Commands:: Commands dealing with files
249
250* Format Commands:: Commands dealing with object file formats
251
252* Miscellaneous Commands:: Other linker script commands
253
254
255File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands
256
[609]257Setting the Entry Point
[10]258-----------------------
259
260 The first instruction to execute in a program is called the "entry
261point". You can use the `ENTRY' linker script command to set the entry
262point. The argument is a symbol name:
263 ENTRY(SYMBOL)
264
265 There are several ways to set the entry point. The linker will set
266the entry point by trying each of the following methods in order, and
267stopping when one of them succeeds:
268 * the `-e' ENTRY command-line option;
269
270 * the `ENTRY(SYMBOL)' command in a linker script;
271
272 * the value of the symbol `start', if defined;
273
274 * the address of the first byte of the `.text' section, if present;
275
276 * The address `0'.
277
278
279File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands
280
[609]281Commands Dealing with Files
[10]282---------------------------
283
284 Several linker script commands deal with files.
285
286`INCLUDE FILENAME'
287 Include the linker script FILENAME at this point. The file will
288 be searched for in the current directory, and in any directory
289 specified with the `-L' option. You can nest calls to `INCLUDE'
290 up to 10 levels deep.
291
292`INPUT(FILE, FILE, ...)'
293`INPUT(FILE FILE ...)'
294 The `INPUT' command directs the linker to include the named files
295 in the link, as though they were named on the command line.
296
297 For example, if you always want to include `subr.o' any time you do
298 a link, but you can't be bothered to put it on every link command
299 line, then you can put `INPUT (subr.o)' in your linker script.
300
301 In fact, if you like, you can list all of your input files in the
302 linker script, and then invoke the linker with nothing but a `-T'
303 option.
304
[609]305 In case a "sysroot prefix" is configured, and the filename starts
306 with the `/' character, and the script being processed was located
307 inside the "sysroot prefix", the filename will be looked for in
308 the "sysroot prefix". Otherwise, the linker will try to open the
309 file in the current directory. If it is not found, the linker
310 will search through the archive library search path. See the
311 description of `-L' in *Note Command Line Options: Options.
[10]312
313 If you use `INPUT (-lFILE)', `ld' will transform the name to
314 `libFILE.a', as with the command line argument `-l'.
315
316 When you use the `INPUT' command in an implicit linker script, the
317 files will be included in the link at the point at which the linker