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