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