2001-08-10 H.J. Lu <hjl@gnu.org>
[deliverable/binutils-gdb.git] / ld / ldint.texinfo
CommitLineData
252b5132
RH
1\input texinfo
2@setfilename ldint.info
a2b64bed
NC
3@c Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000
4@c Free Software Foundation, Inc.
252b5132
RH
5
6@ifinfo
7@format
8START-INFO-DIR-ENTRY
9* Ld-Internals: (ldint). The GNU linker internals.
10END-INFO-DIR-ENTRY
11@end format
12@end ifinfo
13
14@ifinfo
15This file documents the internals of the GNU linker ld.
16
a2b64bed
NC
17Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000
18Free Software Foundation, Inc.
252b5132
RH
19Contributed by Cygnus Support.
20
704c465c
NC
21 Permission is granted to copy, distribute and/or modify this document
22 under the terms of the GNU Free Documentation License, Version 1.1
23 or any later version published by the Free Software Foundation;
24 with no Invariant Sections, with no Front-Cover Texts, and with no
25 Back-Cover Texts. A copy of the license is included in the
26 section entitled "GNU Free Documentation License".
252b5132
RH
27
28@ignore
29Permission is granted to process this file through Tex and print the
30results, provided the printed document carries copying permission
31notice identical to this one except for the removal of this paragraph
32(this paragraph not being relevant to the printed manual).
33
34@end ignore
252b5132
RH
35@end ifinfo
36
37@iftex
38@finalout
39@setchapternewpage off
40@settitle GNU Linker Internals
41@titlepage
42@title{A guide to the internals of the GNU linker}
43@author Per Bothner, Steve Chamberlain, Ian Lance Taylor, DJ Delorie
44@author Cygnus Support
45@page
46
47@tex
48\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$
5b343f5a 49\xdef\manvers{2.10.91} % For use in headers, footers too
252b5132
RH
50{\parskip=0pt
51\hfill Cygnus Support\par
52\hfill \manvers\par
53\hfill \TeX{}info \texinfoversion\par
54}
55@end tex
56
57@vskip 0pt plus 1filll
704c465c 58Copyright @copyright{} 1992, 93, 94, 95, 96, 97, 1998, 2000
252b5132
RH
59Free Software Foundation, Inc.
60
704c465c
NC
61 Permission is granted to copy, distribute and/or modify this document
62 under the terms of the GNU Free Documentation License, Version 1.1
63 or any later version published by the Free Software Foundation;
64 with no Invariant Sections, with no Front-Cover Texts, and with no
65 Back-Cover Texts. A copy of the license is included in the
66 section entitled "GNU Free Documentation License".
252b5132
RH
67
68@end titlepage
69@end iftex
70
71@node Top
72@top
73
74This file documents the internals of the GNU linker @code{ld}. It is a
75collection of miscellaneous information with little form at this point.
76Mostly, it is a repository into which you can put information about
77GNU @code{ld} as you discover it (or as you design changes to @code{ld}).
78
cf055d54
NC
79This document is distributed under the terms of the GNU Free
80Documentation License. A copy of the license is included in the
81section entitled "GNU Free Documentation License".
82
252b5132
RH
83@menu
84* README:: The README File
85* Emulations:: How linker emulations are generated
86* Emulation Walkthrough:: A Walkthrough of a Typical Emulation
b044cda1 87* Architecture Specific:: Some Architecture Specific Notes
704c465c 88* GNU Free Documentation License:: GNU Free Documentation License
252b5132
RH
89@end menu
90
91@node README
92@chapter The @file{README} File
93
94Check the @file{README} file; it often has useful information that does not
95appear anywhere else in the directory.
96
97@node Emulations
98@chapter How linker emulations are generated
99
100Each linker target has an @dfn{emulation}. The emulation includes the
101default linker script, and certain emulations also modify certain types
102of linker behaviour.
103
104Emulations are created during the build process by the shell script
105@file{genscripts.sh}.
106
107The @file{genscripts.sh} script starts by reading a file in the
108@file{emulparams} directory. This is a shell script which sets various
109shell variables used by @file{genscripts.sh} and the other shell scripts
110it invokes.
111
112The @file{genscripts.sh} script will invoke a shell script in the
113@file{scripttempl} directory in order to create default linker scripts
114written in the linker command language. The @file{scripttempl} script
115will be invoked 5 (or, in some cases, 6) times, with different
116assignments to shell variables, to create different default scripts.
117The choice of script is made based on the command line options.
118
119After creating the scripts, @file{genscripts.sh} will invoke yet another
120shell script, this time in the @file{emultempl} directory. That shell
121script will create the emulation source file, which contains C code.
122This C code permits the linker emulation to override various linker
123behaviours. Most targets use the generic emulation code, which is in
124@file{emultempl/generic.em}.
125
126To summarize, @file{genscripts.sh} reads three shell scripts: an
127emulation parameters script in the @file{emulparams} directory, a linker
128script generation script in the @file{scripttempl} directory, and an
129emulation source file generation script in the @file{emultempl}
130directory.
131
132For example, the Sun 4 linker sets up variables in
133@file{emulparams/sun4.sh}, creates linker scripts using
134@file{scripttempl/aout.sc}, and creates the emulation code using
135@file{emultempl/sunos.em}.
136
137Note that the linker can support several emulations simultaneously,
138depending upon how it is configured. An emulation can be selected with
139the @code{-m} option. The @code{-V} option will list all supported
140emulations.
141
142@menu
143* emulation parameters:: @file{emulparams} scripts
144* linker scripts:: @file{scripttempl} scripts
145* linker emulations:: @file{emultempl} scripts
146@end menu
147
148@node emulation parameters
149@section @file{emulparams} scripts
150
151Each target selects a particular file in the @file{emulparams} directory
152by setting the shell variable @code{targ_emul} in @file{configure.tgt}.
153This shell variable is used by the @file{configure} script to control
154building an emulation source file.
155
156Certain conventions are enforced. Suppose the @code{targ_emul} variable
157is set to @var{emul} in @file{configure.tgt}. The name of the emulation
158shell script will be @file{emulparams/@var{emul}.sh}. The
159@file{Makefile} must have a target named @file{e@var{emul}.c}; this
160target must depend upon @file{emulparams/@var{emul}.sh}, as well as the
161appropriate scripts in the @file{scripttempl} and @file{emultempl}
162directories. The @file{Makefile} target must invoke @code{GENSCRIPTS}
163with two arguments: @var{emul}, and the value of the make variable
164@code{tdir_@var{emul}}. The value of the latter variable will be set by
165the @file{configure} script, and is used to set the default target
166directory to search.
167
168By convention, the @file{emulparams/@var{emul}.sh} shell script should
169only set shell variables. It may set shell variables which are to be
170interpreted by the @file{scripttempl} and the @file{emultempl} scripts.
171Certain shell variables are interpreted directly by the
172@file{genscripts.sh} script.
173
174Here is a list of shell variables interpreted by @file{genscripts.sh},
175as well as some conventional shell variables interpreted by the
176@file{scripttempl} and @file{emultempl} scripts.
177
178@table @code
179@item SCRIPT_NAME
180This is the name of the @file{scripttempl} script to use. If
181@code{SCRIPT_NAME} is set to @var{script}, @file{genscripts.sh} will use
182the script @file{scriptteml/@var{script}.sc}.
183
184@item TEMPLATE_NAME
185This is the name of the @file{emultemlp} script to use. If
186@code{TEMPLATE_NAME} is set to @var{template}, @file{genscripts.sh} will
187use the script @file{emultempl/@var{template}.em}. If this variable is
188not set, the default value is @samp{generic}.
189
190@item GENERATE_SHLIB_SCRIPT
191If this is set to a nonempty string, @file{genscripts.sh} will invoke
192the @file{scripttempl} script an extra time to create a shared library
193script. @ref{linker scripts}.
194
195@item OUTPUT_FORMAT
196This is normally set to indicate the BFD output format use (e.g.,
197@samp{"a.out-sunos-big"}. The @file{scripttempl} script will normally
198use it in an @code{OUTPUT_FORMAT} expression in the linker script.
199
200@item ARCH
201This is normally set to indicate the architecture to use (e.g.,
202@samp{sparc}). The @file{scripttempl} script will normally use it in an
203@code{OUTPUT_ARCH} expression in the linker script.
204
205@item ENTRY
206Some @file{scripttempl} scripts use this to set the entry address, in an
207@code{ENTRY} expression in the linker script.
208
209@item TEXT_START_ADDR
210Some @file{scripttempl} scripts use this to set the start address of the
211@samp{.text} section.
212
213@item NONPAGED_TEXT_START_ADDR
214If this is defined, the @file{genscripts.sh} script sets
215@code{TEXT_START_ADDR} to its value before running the
216@file{scripttempl} script for the @code{-n} and @code{-N} options
217(@pxref{linker scripts}).
218
219@item SEGMENT_SIZE
220The @file{genscripts.sh} script uses this to set the default value of
221@code{DATA_ALIGNMENT} when running the @file{scripttempl} script.
222
223@item TARGET_PAGE_SIZE
224If @code{SEGMENT_SIZE} is not defined, the @file{genscripts.sh} script
225uses this to define it.
226
227@item ALIGNMENT
228Some @file{scripttempl} scripts set this to a number to pass to
229@code{ALIGN} to set the required alignment for the @code{end} symbol.
230@end table
231
232@node linker scripts
233@section @file{scripttempl} scripts
234
235Each linker target uses a @file{scripttempl} script to generate the
236default linker scripts. The name of the @file{scripttempl} script is
237set by the @code{SCRIPT_NAME} variable in the @file{emulparams} script.
238If @code{SCRIPT_NAME} is set to @var{script}, @code{genscripts.sh} will
239invoke @file{scripttempl/@var{script}.sc}.
240
241The @file{genscripts.sh} script will invoke the @file{scripttempl}
242script 5 or 6 times. Each time it will set the shell variable
243@code{LD_FLAG} to a different value. When the linker is run, the
244options used will direct it to select a particular script. (Script
245selection is controlled by the @code{get_script} emulation entry point;
246this describes the conventional behaviour).
247
248The @file{scripttempl} script should just write a linker script, written
249in the linker command language, to standard output. If the emulation
250name--the name of the @file{emulparams} file without the @file{.sc}
251extension--is @var{emul}, then the output will be directed to
252@file{ldscripts/@var{emul}.@var{extension}} in the build directory,
253where @var{extension} changes each time the @file{scripttempl} script is
254invoked.
255
256Here is the list of values assigned to @code{LD_FLAG}.
257
258@table @code
259@item (empty)
260The script generated is used by default (when none of the following
261cases apply). The output has an extension of @file{.x}.
262@item n
263The script generated is used when the linker is invoked with the
264@code{-n} option. The output has an extension of @file{.xn}.
265@item N
266The script generated is used when the linker is invoked with the
267@code{-N} option. The output has an extension of @file{.xbn}.
268@item r
269The script generated is used when the linker is invoked with the
270@code{-r} option. The output has an extension of @file{.xr}.
271@item u
272The script generated is used when the linker is invoked with the
273@code{-Ur} option. The output has an extension of @file{.xu}.
274@item shared
275The @file{scripttempl} script is only invoked with @code{LD_FLAG} set to
276this value if @code{GENERATE_SHLIB_SCRIPT} is defined in the
277@file{emulparams} file. The @file{emultempl} script must arrange to use
278this script at the appropriate time, normally when the linker is invoked
279with the @code{-shared} option. The output has an extension of
280@file{.xs}.
281@end table
282
283Besides the shell variables set by the @file{emulparams} script, and the
284@code{LD_FLAG} variable, the @file{genscripts.sh} script will set
285certain variables for each run of the @file{scripttempl} script.
286
287@table @code
288@item RELOCATING
289This will be set to a non-empty string when the linker is doing a final
290relocation (e.g., all scripts other than @code{-r} and @code{-Ur}).
291
292@item CONSTRUCTING
293This will be set to a non-empty string when the linker is building
294global constructor and destructor tables (e.g., all scripts other than
295@code{-r}).
296
297@item DATA_ALIGNMENT
298This will be set to an @code{ALIGN} expression when the output should be
299page aligned, or to @samp{.} when generating the @code{-N} script.
300
301@item CREATE_SHLIB
302This will be set to a non-empty string when generating a @code{-shared}
303script.
304@end table
305
306The conventional way to write a @file{scripttempl} script is to first
307set a few shell variables, and then write out a linker script using
308@code{cat} with a here document. The linker script will use variable
309substitutions, based on the above variables and those set in the
310@file{emulparams} script, to control its behaviour.
311
312When there are parts of the @file{scripttempl} script which should only
313be run when doing a final relocation, they should be enclosed within a
314variable substitution based on @code{RELOCATING}. For example, on many
315targets special symbols such as @code{_end} should be defined when doing
316a final link. Naturally, those symbols should not be defined when doing
317a relocateable link using @code{-r}. The @file{scripttempl} script
318could use a construct like this to define those symbols:
319@smallexample
320 $@{RELOCATING+ _end = .;@}
321@end smallexample
322This will do the symbol assignment only if the @code{RELOCATING}
323variable is defined.
324
325The basic job of the linker script is to put the sections in the correct
326order, and at the correct memory addresses. For some targets, the
327linker script may have to do some other operations.
328
329For example, on most MIPS platforms, the linker is responsible for
330defining the special symbol @code{_gp}, used to initialize the
331@code{$gp} register. It must be set to the start of the small data
332section plus @code{0x8000}. Naturally, it should only be defined when
333doing a final relocation. This will typically be done like this:
334@smallexample
335 $@{RELOCATING+ _gp = ALIGN(16) + 0x8000;@}
336@end smallexample
337This line would appear just before the sections which compose the small
338data section (@samp{.sdata}, @samp{.sbss}). All those sections would be
339contiguous in memory.
340
341Many COFF systems build constructor tables in the linker script. The
342compiler will arrange to output the address of each global constructor
343in a @samp{.ctor} section, and the address of each global destructor in
344a @samp{.dtor} section (this is done by defining
345@code{ASM_OUTPUT_CONSTRUCTOR} and @code{ASM_OUTPUT_DESTRUCTOR} in the
346@code{gcc} configuration files). The @code{gcc} runtime support
347routines expect the constructor table to be named @code{__CTOR_LIST__}.
348They expect it to be a list of words, with the first word being the
349count of the number of entries. There should be a trailing zero word.
350(Actually, the count may be -1 if the trailing word is present, and the
351trailing word may be omitted if the count is correct, but, as the
352@code{gcc} behaviour has changed slightly over the years, it is safest
353to provide both). Here is a typical way that might be handled in a
354@file{scripttempl} file.
355@smallexample
356 $@{CONSTRUCTING+ __CTOR_LIST__ = .;@}
357 $@{CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)@}
358 $@{CONSTRUCTING+ *(.ctors)@}
359 $@{CONSTRUCTING+ LONG(0)@}
360 $@{CONSTRUCTING+ __CTOR_END__ = .;@}
361 $@{CONSTRUCTING+ __DTOR_LIST__ = .;@}
362 $@{CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)@}
363 $@{CONSTRUCTING+ *(.dtors)@}
364 $@{CONSTRUCTING+ LONG(0)@}
365 $@{CONSTRUCTING+ __DTOR_END__ = .;@}
366@end smallexample
367The use of @code{CONSTRUCTING} ensures that these linker script commands
368will only appear when the linker is supposed to be building the
369constructor and destructor tables. This example is written for a target
370which uses 4 byte pointers.
371
372Embedded systems often need to set a stack address. This is normally
373best done by using the @code{PROVIDE} construct with a default stack
374address. This permits the user to easily override the stack address
375using the @code{--defsym} option. Here is an example:
376@smallexample
377 $@{RELOCATING+ PROVIDE (__stack = 0x80000000);@}
378@end smallexample
379The value of the symbol @code{__stack} would then be used in the startup
380code to initialize the stack pointer.
381
382@node linker emulations
383@section @file{emultempl} scripts
384
385Each linker target uses an @file{emultempl} script to generate the
386emulation code. The name of the @file{emultempl} script is set by the
387@code{TEMPLATE_NAME} variable in the @file{emulparams} script. If the
388@code{TEMPLATE_NAME} variable is not set, the default is
389@samp{generic}. If the value of @code{TEMPLATE_NAME} is @var{template},
390@file{genscripts.sh} will use @file{emultempl/@var{template}.em}.
391
392Most targets use the generic @file{emultempl} script,
393@file{emultempl/generic.em}. A different @file{emultempl} script is
394only needed if the linker must support unusual actions, such as linking
395against shared libraries.
396
397The @file{emultempl} script is normally written as a simple invocation
398of @code{cat} with a here document. The document will use a few
399variable substitutions. Typically each function names uses a
400substitution involving @code{EMULATION_NAME}, for ease of debugging when
401the linker supports multiple emulations.
402
403Every function and variable in the emitted file should be static. The
404only globally visible object must be named
405@code{ld_@var{EMULATION_NAME}_emulation}, where @var{EMULATION_NAME} is
406the name of the emulation set in @file{configure.tgt} (this is also the
407name of the @file{emulparams} file without the @file{.sh} extension).
408The @file{genscripts.sh} script will set the shell variable
409@code{EMULATION_NAME} before invoking the @file{emultempl} script.
410
411The @code{ld_@var{EMULATION_NAME}_emulation} variable must be a
412@code{struct ld_emulation_xfer_struct}, as defined in @file{ldemul.h}.
413It defines a set of function pointers which are invoked by the linker,
414as well as strings for the emulation name (normally set from the shell
415variable @code{EMULATION_NAME} and the default BFD target name (normally
416set from the shell variable @code{OUTPUT_FORMAT} which is normally set
417by the @file{emulparams} file).
418
419The @file{genscripts.sh} script will set the shell variable
420@code{COMPILE_IN} when it invokes the @file{emultempl} script for the
421default emulation. In this case, the @file{emultempl} script should
422include the linker scripts directly, and return them from the
423@code{get_scripts} entry point. When the emulation is not the default,
424the @code{get_scripts} entry point should just return a file name. See
425@file{emultempl/generic.em} for an example of how this is done.
426
427At some point, the linker emulation entry points should be documented.
428
429@node Emulation Walkthrough
430@chapter A Walkthrough of a Typical Emulation
431
432This chapter is to help people who are new to the way emulations
433interact with the linker, or who are suddenly thrust into the position
434of having to work with existing emulations. It will discuss the files
435you need to be aware of. It will tell you when the given "hooks" in
436the emulation will be called. It will, hopefully, give you enough
437information about when and how things happen that you'll be able to
438get by. As always, the source is the definitive reference to this.
439
440The starting point for the linker is in @file{ldmain.c} where
441@code{main} is defined. The bulk of the code that's emulation
442specific will initially be in @code{emultempl/@var{emulation}.em} but
443will end up in @code{e@var{emulation}.c} when the build is done.
444Most of the work to select and interface with emulations is in
445@code{ldemul.h} and @code{ldemul.c}. Specifically, @code{ldemul.h}
446defines the @code{ld_emulation_xfer_struct} structure your emulation
447exports.
448
449Your emulation file exports a symbol
450@code{ld_@var{EMULATION_NAME}_emulation}. If your emulation is
451selected (it usually is, since usually there's only one),
452@code{ldemul.c} sets the variable @var{ld_emulation} to point to it.
453@code{ldemul.c} also defines a number of API functions that interface
454to your emulation, like @code{ldemul_after_parse} which simply calls
455your @code{ld_@var{EMULATION}_emulation.after_parse} function. For
456the rest of this section, the functions will be mentioned, but you
457should assume the indirect reference to your emulation also.
458
459We will also skip or gloss over parts of the link process that don't
460relate to emulations, like setting up internationalization.
461
462After initialization, @code{main} selects an emulation by pre-scanning
463the command line arguments. It calls @code{ldemul_choose_target} to
464choose a target. If you set @code{choose_target} to
465@code{ldemul_default_target}, it picks your @code{target_name} by
466default.
467
468@code{main} calls @code{ldemul_before_parse}, then @code{parse_args}.
469@code{parse_args} calls @code{ldemul_parse_args} for each arg, which
470must update the @code{getopt} globals if it recognizes the argument.
471If the emulation doesn't recognize it, then parse_args checks to see
472if it recognizes it.
473
474Now that the emulation has had access to all its command-line options,
475@code{main} calls @code{ldemul_set_symbols}. This can be used for any
476initialization that may be affected by options. It is also supposed
477to set up any variables needed by the emulation script.
478
479@code{main} now calls @code{ldemul_get_script} to get the emulation
480script to use (based on arguments, no doubt, @pxref{Emulations}) and
481runs it. While parsing, @code{ldgram.y} may call @code{ldemul_hll} or
482@code{ldemul_syslib} to handle the @code{HLL} or @code{SYSLIB}
483commands. It may call @code{ldemul_unrecognized_file} if you asked
484the linker to link a file it doesn't recognize. It will call
485@code{ldemul_recognized_file} for each file it does recognize, in case
486the emulation wants to handle some files specially. All the while,
487it's loading the files (possibly calling
488@code{ldemul_open_dynamic_archive}) and symbols and stuff. After it's
489done reading the script, @code{main} calls @code{ldemul_after_parse}.
490Use the after-parse hook to set up anything that depends on stuff the
491script might have set up, like the entry point.
492
493@code{main} next calls @code{lang_process} in @code{ldlang.c}. This
494appears to be the main core of the linking itself, as far as emulation
495hooks are concerned(*). It first opens the output file's BFD, calling
496@code{ldemul_set_output_arch}, and calls
497@code{ldemul_create_output_section_statements} in case you need to use
498other means to find or create object files (i.e. shared libraries
499found on a path, or fake stub objects). Despite the name, nobody
500creates output sections here.
501
502(*) In most cases, the BFD library does the bulk of the actual
503linking, handling symbol tables, symbol resolution, relocations, and
504building the final output file. See the BFD reference for all the
505details. Your emulation is usually concerned more with managing
506things at the file and section level, like "put this here, add this
507section", etc.
508
509Next, the objects to be linked are opened and BFDs created for them,
510and @code{ldemul_after_open} is called. At this point, you have all
511the objects and symbols loaded, but none of the data has been placed
512yet.
513
514Next comes the Big Linking Thingy (except for the parts BFD does).
515All input sections are mapped to output sections according to the
516script. If a section doesn't get mapped by default,
517@code{ldemul_place_orphan} will get called to figure out where it goes.
518Next it figures out the offsets for each section, calling
519@code{ldemul_before_allocation} before and
520@code{ldemul_after_allocation} after deciding where each input section
521ends up in the output sections.
522
523The last part of @code{lang_process} is to figure out all the symbols'
524values. After assigning final values to the symbols,
525@code{ldemul_finish} is called, and after that, any undefined symbols
526are turned into fatal errors.
527
528OK, back to @code{main}, which calls @code{ldwrite} in
529@file{ldwrite.c}. @code{ldwrite} calls BFD's final_link, which does
530all the relocation fixups and writes the output bfd to disk, and we're
531done.
532
533In summary,
534
535@itemize @bullet
536
537@item @code{main()} in @file{ldmain.c}
538@item @file{emultempl/@var{EMULATION}.em} has your code
539@item @code{ldemul_choose_target} (defaults to your @code{target_name})
540@item @code{ldemul_before_parse}
541@item Parse argv, calls @code{ldemul_parse_args} for each
542@item @code{ldemul_set_symbols}
543@item @code{ldemul_get_script}
544@item parse script
545
546@itemize @bullet
547@item may call @code{ldemul_hll} or @code{ldemul_syslib}
548@item may call @code{ldemul_open_dynamic_archive}
549@end itemize
550
551@item @code{ldemul_after_parse}
552@item @code{lang_process()} in @file{ldlang.c}
553
554@itemize @bullet
555@item create @code{output_bfd}
556@item @code{ldemul_set_output_arch}
557@item @code{ldemul_create_output_section_statements}
558@item read objects, create input bfds - all symbols exist, but have no values
559@item may call @code{ldemul_unrecognized_file}
560@item will call @code{ldemul_recognized_file}
561@item @code{ldemul_after_open}
562@item map input sections to output sections
563@item may call @code{ldemul_place_orphan} for remaining sections
564@item @code{ldemul_before_allocation}
565@item gives input sections offsets into output sections, places output sections
566@item @code{ldemul_after_allocation} - section addresses valid
567@item assigns values to symbols
568@item @code{ldemul_finish} - symbol values valid
569@end itemize
570
571@item output bfd is written to disk
572
573@end itemize
574
b044cda1
CW
575@node Architecture Specific
576@chapter Some Architecture Specific Notes
577
578This is the place for notes on the behavior of @code{ld} on
579specific platforms. Currently, only Intel x86 is documented (and
580of that, only the auto-import behavior for DLLs).
581
582@menu
583* ix86:: Intel x86
584@end menu
585
586@node ix86
587@section Intel x86
588
589@table @emph
590@code{ld} can create DLLs that operate with various runtimes available
591on a common x86 operating system. These runtimes include native (using
592the mingw "platform"), cygwin, and pw.
593
594@item auto-import from DLLs
595@enumerate
596@item
597With this feature on, DLL clients can import variables from DLL
598without any concern from their side (for example, without any source
599code modifications). Auto-import can be enabled using the
600@code{--enable-auto-import} flag, or disabled via the
601@code{--disable-auto-import} flag. Auto-import is disabled by default.
602
603@item
604This is done completely in bounds of the PE specification (to be fair,
605there's a minor violation of the spec at one point, but in practice
606auto-import works on all known variants of that common x86 operating
607system) So, the resulting DLL can be used with any other PE
608compiler/linker.
609
610@item
611Auto-import is fully compatible with standard import method, in which
612variables are decorated using attribute modifiers. Libraries of either
613type may be mixed together.
614
615@item
616Overhead (space): 8 bytes per imported symbol, plus 20 for each
617reference to it; Overhead (load time): negligible; Overhead
618(virtual/physical memory): should be less than effect of DLL
619relocation.
620@end enumerate
621
622Motivation
623
624The obvious and only way to get rid of dllimport insanity is
625to make client access variable directly in the DLL, bypassing
626the extra dereference imposed by ordinary DLL runtime linking.
627I.e., whenever client contains someting like
628
629@code{mov dll_var,%eax,}
630
631address of dll_var in the command should be relocated to point
632into loaded DLL. The aim is to make OS loader do so, and than
633make ld help with that. Import section of PE made following
634way: there's a vector of structures each describing imports
635from particular DLL. Each such structure points to two other
636parellel vectors: one holding imported names, and one which
637will hold address of corresponding imported name. So, the
638solution is de-vectorize these structures, making import
639locations be sparse and pointing directly into code.
640
641Implementation
642
643For each reference of data symbol to be imported from DLL (to
644set of which belong symbols with name <sym>, if __imp_<sym> is
645found in implib), the import fixup entry is generated. That
646entry is of type IMAGE_IMPORT_DESCRIPTOR and stored in .idata$3
647subsection. Each fixup entry contains pointer to symbol's address
648within .text section (marked with __fuN_<sym> symbol, where N is
649integer), pointer to DLL name (so, DLL name is referenced by
650multiple entries), and pointer to symbol name thunk. Symbol name
651thunk is singleton vector (__nm_th_<symbol>) pointing to
652IMAGE_IMPORT_BY_NAME structure (__nm_<symbol>) directly containing
653imported name. Here comes that "om the edge" problem mentioned above:
654PE specification rambles that name vector (OriginalFirstThunk) should
655run in parallel with addresses vector (FirstThunk), i.e. that they
656should have same number of elements and terminated with zero. We violate
657this, since FirstThunk points directly into machine code. But in
658practice, OS loader implemented the sane way: it goes thru
659OriginalFirstThunk and puts addresses to FirstThunk, not something
660else. It once again should be noted that dll and symbol name
661structures are reused across fixup entries and should be there
662anyway to support standard import stuff, so sustained overhead is
66320 bytes per reference. Other question is whether having several
664IMAGE_IMPORT_DESCRIPTORS for the same DLL is possible. Answer is yes,
665it is done even by native compiler/linker (libth32's functions are in
666fact resident in windows9x kernel32.dll, so if you use it, you have
667two IMAGE_IMPORT_DESCRIPTORS for kernel32.dll). Yet other question is
668whether referencing the same PE structures several times is valid.
669The answer is why not, prohibiting that (detecting violation) would
670require more work on behalf of loader than not doing it.
671
672@end table
673
704c465c
NC
674@node GNU Free Documentation License
675@chapter GNU Free Documentation License
676
677 GNU Free Documentation License
678
679 Version 1.1, March 2000
680
681 Copyright (C) 2000 Free Software Foundation, Inc.
682 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
683
684 Everyone is permitted to copy and distribute verbatim copies
685 of this license document, but changing it is not allowed.
686
687
6880. PREAMBLE
689
690The purpose of this License is to make a manual, textbook, or other
691written document "free" in the sense of freedom: to assure everyone
692the effective freedom to copy and redistribute it, with or without
693modifying it, either commercially or noncommercially. Secondarily,
694this License preserves for the author and publisher a way to get
695credit for their work, while not being considered responsible for
696modifications made by others.
697
698This License is a kind of "copyleft", which means that derivative
699works of the document must themselves be free in the same sense. It
700complements the GNU General Public License, which is a copyleft
701license designed for free software.
702
703We have designed this License in order to use it for manuals for free
704software, because free software needs free documentation: a free
705program should come with manuals providing the same freedoms that the
706software does. But this License is not limited to software manuals;
707it can be used for any textual work, regardless of subject matter or
708whether it is published as a printed book. We recommend this License
709principally for works whose purpose is instruction or reference.
710
711
7121. APPLICABILITY AND DEFINITIONS
713
714This License applies to any manual or other work that contains a
715notice placed by the copyright holder saying it can be distributed
716under the terms of this License. The "Document", below, refers to any
717such manual or work. Any member of the public is a licensee, and is
718addressed as "you".
719
720A "Modified Version" of the Document means any work containing the
721Document or a portion of it, either copied verbatim, or with
722modifications and/or translated into another language.
723
724A "Secondary Section" is a named appendix or a front-matter section of
725the Document that deals exclusively with the relationship of the
726publishers or authors of the Document to the Document's overall subject
727(or to related matters) and contains nothing that could fall directly
728within that overall subject. (For example, if the Document is in part a
729textbook of mathematics, a Secondary Section may not explain any
730mathematics.) The relationship could be a matter of historical
731connection with the subject or with related matters, or of legal,
732commercial, philosophical, ethical or political position regarding
733them.
734
735The "Invariant Sections" are certain Secondary Sections whose titles
736are designated, as being those of Invariant Sections, in the notice
737that says that the Document is released under this License.
738
739The "Cover Texts" are certain short passages of text that are listed,
740as Front-Cover Texts or Back-Cover Texts, in the notice that says that
741the Document is released under this License.
742
743A "Transparent" copy of the Document means a machine-readable copy,
744represented in a format whose specification is available to the
745general public, whose contents can be viewed and edited directly and
746straightforwardly with generic text editors or (for images composed of
747pixels) generic paint programs or (for drawings) some widely available
748drawing editor, and that is suitable for input to text formatters or
749for automatic translation to a variety of formats suitable for input
750to text formatters. A copy made in an otherwise Transparent file
751format whose markup has been designed to thwart or discourage
752subsequent modification by readers is not Transparent. A copy that is
753not "Transparent" is called "Opaque".
754
755Examples of suitable formats for Transparent copies include plain
756ASCII without markup, Texinfo input format, LaTeX input format, SGML
757or XML using a publicly available DTD, and standard-conforming simple
758HTML designed for human modification. Opaque formats include
759PostScript, PDF, proprietary formats that can be read and edited only
760by proprietary word processors, SGML or XML for which the DTD and/or
761processing tools are not generally available, and the
762machine-generated HTML produced by some word processors for output
763purposes only.
764
765The "Title Page" means, for a printed book, the title page itself,
766plus such following pages as are needed to hold, legibly, the material
767this License requires to appear in the title page. For works in
768formats which do not have any title page as such, "Title Page" means
769the text near the most prominent appearance of the work's title,
770preceding the beginning of the body of the text.
771
772
7732. VERBATIM COPYING
774
775You may copy and distribute the Document in any medium, either
776commercially or noncommercially, provided that this License, the
777copyright notices, and the license notice saying this License applies
778to the Document are reproduced in all copies, and that you add no other
779conditions whatsoever to those of this License. You may not use
780technical measures to obstruct or control the reading or further
781copying of the copies you make or distribute. However, you may accept
782compensation in exchange for copies. If you distribute a large enough
783number of copies you must also follow the conditions in section 3.
784
785You may also lend copies, under the same conditions stated above, and
786you may publicly display copies.
787
788
7893. COPYING IN QUANTITY
790
791If you publish printed copies of the Document numbering more than 100,
792and the Document's license notice requires Cover Texts, you must enclose
793the copies in covers that carry, clearly and legibly, all these Cover
794Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
795the back cover. Both covers must also clearly and legibly identify
796you as the publisher of these copies. The front cover must present
797the full title with all words of the title equally prominent and
798visible. You may add other material on the covers in addition.
799Copying with changes limited to the covers, as long as they preserve
800the title of the Document and satisfy these conditions, can be treated
801as verbatim copying in other respects.
802
803If the required texts for either cover are too voluminous to fit
804legibly, you should put the first ones listed (as many as fit
805reasonably) on the actual cover, and continue the rest onto adjacent
806pages.
807
808If you publish or distribute Opaque copies of the Document numbering
809more than 100, you must either include a machine-readable Transparent
810copy along with each Opaque copy, or state in or with each Opaque copy
811a publicly-accessible computer-network location containing a complete
812Transparent copy of the Document, free of added material, which the
813general network-using public has access to download anonymously at no
814charge using public-standard network protocols. If you use the latter
815option, you must take reasonably prudent steps, when you begin
816distribution of Opaque copies in quantity, to ensure that this
817Transparent copy will remain thus accessible at the stated location
818until at least one year after the last time you distribute an Opaque
819copy (directly or through your agents or retailers) of that edition to
820the public.
821
822It is requested, but not required, that you contact the authors of the
823Document well before redistributing any large number of copies, to give
824them a chance to provide you with an updated version of the Document.
825
826
8274. MODIFICATIONS
828
829You may copy and distribute a Modified Version of the Document under
830the conditions of sections 2 and 3 above, provided that you release
831the Modified Version under precisely this License, with the Modified
832Version filling the role of the Document, thus licensing distribution
833and modification of the Modified Version to whoever possesses a copy
834of it. In addition, you must do these things in the Modified Version:
835
836A. Use in the Title Page (and on the covers, if any) a title distinct
837 from that of the Document, and from those of previous versions
838 (which should, if there were any, be listed in the History section
839 of the Document). You may use the same title as a previous version
840 if the original publisher of that version gives permission.
841B. List on the Title Page, as authors, one or more persons or entities
842 responsible for authorship of the modifications in the Modified
843 Version, together with at least five of the principal authors of the
844 Document (all of its principal authors, if it has less than five).
845C. State on the Title page the name of the publisher of the
846 Modified Version, as the publisher.
847D. Preserve all the copyright notices of the Document.
848E. Add an appropriate copyright notice for your modifications
849 adjacent to the other copyright notices.
850F. Include, immediately after the copyright notices, a license notice
851 giving the public permission to use the Modified Version under the
852 terms of this License, in the form shown in the Addendum below.
853G. Preserve in that license notice the full lists of Invariant Sections
854 and required Cover Texts given in the Document's license notice.
855H. Include an unaltered copy of this License.
856I. Preserve the section entitled "History", and its title, and add to
857 it an item stating at least the title, year, new authors, and
858 publisher of the Modified Version as given on the Title Page. If
859 there is no section entitled "History" in the Document, create one
860 stating the title, year, authors, and publisher of the Document as
861 given on its Title Page, then add an item describing the Modified
862 Version as stated in the previous sentence.
863J. Preserve the network location, if any, given in the Document for
864 public access to a Transparent copy of the Document, and likewise
865 the network locations given in the Document for previous versions
866 it was based on. These may be placed in the "History" section.
867 You may omit a network location for a work that was published at
868 least four years before the Document itself, or if the original
869 publisher of the version it refers to gives permission.
870K. In any section entitled "Acknowledgements" or "Dedications",
871 preserve the section's title, and preserve in the section all the
872 substance and tone of each of the contributor acknowledgements
873 and/or dedications given therein.
874L. Preserve all the Invariant Sections of the Document,
875 unaltered in their text and in their titles. Section numbers
876 or the equivalent are not considered part of the section titles.
877M. Delete any section entitled "Endorsements". Such a section
878 may not be included in the Modified Version.
879N. Do not retitle any existing section as "Endorsements"
880 or to conflict in title with any Invariant Section.
881
882If the Modified Version includes new front-matter sections or
883appendices that qualify as Secondary Sections and contain no material
884copied from the Document, you may at your option designate some or all
885of these sections as invariant. To do this, add their titles to the
886list of Invariant Sections in the Modified Version's license notice.
887These titles must be distinct from any other section titles.
888
889You may add a section entitled "Endorsements", provided it contains
890nothing but endorsements of your Modified Version by various
891parties--for example, statements of peer review or that the text has
892been approved by an organization as the authoritative definition of a
893standard.
894
895You may add a passage of up to five words as a Front-Cover Text, and a
896passage of up to 25 words as a Back-Cover Text, to the end of the list
897of Cover Texts in the Modified Version. Only one passage of
898Front-Cover Text and one of Back-Cover Text may be added by (or
899through arrangements made by) any one entity. If the Document already
900includes a cover text for the same cover, previously added by you or
901by arrangement made by the same entity you are acting on behalf of,
902you may not add another; but you may replace the old one, on explicit
903permission from the previous publisher that added the old one.
904
905The author(s) and publisher(s) of the Document do not by this License
906give permission to use their names for publicity for or to assert or
907imply endorsement of any Modified Version.
908
909
9105. COMBINING DOCUMENTS
911
912You may combine the Document with other documents released under this
913License, under the terms defined in section 4 above for modified
914versions, provided that you include in the combination all of the
915Invariant Sections of all of the original documents, unmodified, and
916list them all as Invariant Sections of your combined work in its
917license notice.
918
919The combined work need only contain one copy of this License, and
920multiple identical Invariant Sections may be replaced with a single
921copy. If there are multiple Invariant Sections with the same name but
922different contents, make the title of each such section unique by
923adding at the end of it, in parentheses, the name of the original
924author or publisher of that section if known, or else a unique number.
925Make the same adjustment to the section titles in the list of
926Invariant Sections in the license notice of the combined work.
927
928In the combination, you must combine any sections entitled "History"
929in the various original documents, forming one section entitled
930"History"; likewise combine any sections entitled "Acknowledgements",
931and any sections entitled "Dedications". You must delete all sections
932entitled "Endorsements."
933
934
9356. COLLECTIONS OF DOCUMENTS
936
937You may make a collection consisting of the Document and other documents
938released under this License, and replace the individual copies of this
939License in the various documents with a single copy that is included in
940the collection, provided that you follow the rules of this License for
941verbatim copying of each of the documents in all other respects.
942
943You may extract a single document from such a collection, and distribute
944it individually under this License, provided you insert a copy of this
945License into the extracted document, and follow this License in all
946other respects regarding verbatim copying of that document.
947
948
9497. AGGREGATION WITH INDEPENDENT WORKS
950
951A compilation of the Document or its derivatives with other separate
952and independent documents or works, in or on a volume of a storage or
953distribution medium, does not as a whole count as a Modified Version
954of the Document, provided no compilation copyright is claimed for the
955compilation. Such a compilation is called an "aggregate", and this
956License does not apply to the other self-contained works thus compiled
957with the Document, on account of their being thus compiled, if they
958are not themselves derivative works of the Document.
959
960If the Cover Text requirement of section 3 is applicable to these
961copies of the Document, then if the Document is less than one quarter
962of the entire aggregate, the Document's Cover Texts may be placed on
963covers that surround only the Document within the aggregate.
964Otherwise they must appear on covers around the whole aggregate.
965
966
9678. TRANSLATION
968
969Translation is considered a kind of modification, so you may
970distribute translations of the Document under the terms of section 4.
971Replacing Invariant Sections with translations requires special
972permission from their copyright holders, but you may include
973translations of some or all Invariant Sections in addition to the
974original versions of these Invariant Sections. You may include a
975translation of this License provided that you also include the
976original English version of this License. In case of a disagreement
977between the translation and the original English version of this
978License, the original English version will prevail.
979
980
9819. TERMINATION
982
983You may not copy, modify, sublicense, or distribute the Document except
984as expressly provided for under this License. Any other attempt to
985copy, modify, sublicense or distribute the Document is void, and will
986automatically terminate your rights under this License. However,
987parties who have received copies, or rights, from you under this
988License will not have their licenses terminated so long as such
989parties remain in full compliance.
990
991
99210. FUTURE REVISIONS OF THIS LICENSE
993
994The Free Software Foundation may publish new, revised versions
995of the GNU Free Documentation License from time to time. Such new
996versions will be similar in spirit to the present version, but may
997differ in detail to address new problems or concerns. See
998http://www.gnu.org/copyleft/.
999
1000Each version of the License is given a distinguishing version number.
1001If the Document specifies that a particular numbered version of this
1002License "or any later version" applies to it, you have the option of
1003following the terms and conditions either of that specified version or
1004of any later version that has been published (not as a draft) by the
1005Free Software Foundation. If the Document does not specify a version
1006number of this License, you may choose any version ever published (not
1007as a draft) by the Free Software Foundation.
1008
1009
1010ADDENDUM: How to use this License for your documents
1011
1012To use this License in a document you have written, include a copy of
1013the License in the document and put the following copyright and
1014license notices just after the title page:
1015
1016@smallexample
1017 Copyright (c) YEAR YOUR NAME.
1018 Permission is granted to copy, distribute and/or modify this document
1019 under the terms of the GNU Free Documentation License, Version 1.1
1020 or any later version published by the Free Software Foundation;
1021 with the Invariant Sections being LIST THEIR TITLES, with the
1022 Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
1023 A copy of the license is included in the section entitled "GNU
1024 Free Documentation License".
1025@end smallexample
1026
1027If you have no Invariant Sections, write "with no Invariant Sections"
1028instead of saying which ones are invariant. If you have no
1029Front-Cover Texts, write "no Front-Cover Texts" instead of
1030"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
1031
1032If your document contains nontrivial examples of program code, we
1033recommend releasing these examples in parallel under your choice of
1034free software license, such as the GNU General Public License,
1035to permit their use in free software.
1036
252b5132
RH
1037@contents
1038@bye
This page took 0.114433 seconds and 4 git commands to generate.