1\input texinfo 2@setfilename ld.info 3@c Copyright (C) 1991-2020 Free Software Foundation, Inc. 4@syncodeindex ky cp 5@c man begin INCLUDE 6@include configdoc.texi 7@c (configdoc.texi is generated by the Makefile) 8@include bfdver.texi 9@c man end 10 11@c @smallbook 12 13@macro gcctabopt{body} 14@code{\body\} 15@end macro 16 17@c man begin NAME 18@ifset man 19@c Configure for the generation of man pages 20@set UsesEnvVars 21@set GENERIC 22@set ARM 23@set C6X 24@set CSKY 25@set H8300 26@set HPPA 27@set M68HC11 28@set M68K 29@set MIPS 30@set MMIX 31@set MSP430 32@set NDS32 33@set NIOSII 34@set POWERPC 35@set POWERPC64 36@set Renesas 37@set S/390 38@set SPU 39@set TICOFF 40@set WIN32 41@set XTENSA 42@end ifset 43@c man end 44 45@ifnottex 46@dircategory Software development 47@direntry 48* Ld: (ld). The GNU linker. 49@end direntry 50@end ifnottex 51 52@copying 53This file documents the @sc{gnu} linker LD 54@ifset VERSION_PACKAGE 55@value{VERSION_PACKAGE} 56@end ifset 57version @value{VERSION}. 58 59Copyright @copyright{} 1991-2020 Free Software Foundation, Inc. 60 61Permission is granted to copy, distribute and/or modify this document 62under the terms of the GNU Free Documentation License, Version 1.3 63or any later version published by the Free Software Foundation; 64with no Invariant Sections, with no Front-Cover Texts, and with no 65Back-Cover Texts. A copy of the license is included in the 66section entitled ``GNU Free Documentation License''. 67@end copying 68@iftex 69@finalout 70@setchapternewpage odd 71@settitle The GNU linker 72@titlepage 73@title The GNU linker 74@sp 1 75@subtitle @code{ld} 76@ifset VERSION_PACKAGE 77@subtitle @value{VERSION_PACKAGE} 78@end ifset 79@subtitle Version @value{VERSION} 80@author Steve Chamberlain 81@author Ian Lance Taylor 82@page 83 84@tex 85{\parskip=0pt 86\hfill Red Hat Inc\par 87\hfill nickc\@credhat.com, doc\@redhat.com\par 88\hfill {\it The GNU linker}\par 89\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par 90} 91\global\parindent=0pt % Steve likes it this way. 92@end tex 93 94@vskip 0pt plus 1filll 95@c man begin COPYRIGHT 96Copyright @copyright{} 1991-2020 Free Software Foundation, Inc. 97 98Permission is granted to copy, distribute and/or modify this document 99under the terms of the GNU Free Documentation License, Version 1.3 100or any later version published by the Free Software Foundation; 101with no Invariant Sections, with no Front-Cover Texts, and with no 102Back-Cover Texts. A copy of the license is included in the 103section entitled ``GNU Free Documentation License''. 104@c man end 105 106@end titlepage 107@end iftex 108@contents 109@c FIXME: Talk about importance of *order* of args, cmds to linker! 110 111@ifnottex 112@node Top 113@top LD 114This file documents the @sc{gnu} linker ld 115@ifset VERSION_PACKAGE 116@value{VERSION_PACKAGE} 117@end ifset 118version @value{VERSION}. 119 120This document is distributed under the terms of the GNU Free 121Documentation License version 1.3. A copy of the license is included 122in the section entitled ``GNU Free Documentation License''. 123 124@menu 125* Overview:: Overview 126* Invocation:: Invocation 127* Scripts:: Linker Scripts 128@ifset GENERIC 129* Machine Dependent:: Machine Dependent Features 130@end ifset 131@ifclear GENERIC 132@ifset H8300 133* H8/300:: ld and the H8/300 134@end ifset 135@ifset Renesas 136* Renesas:: ld and other Renesas micros 137@end ifset 138@ifset ARM 139* ARM:: ld and the ARM family 140@end ifset 141@ifset M68HC11 142* M68HC11/68HC12:: ld and the Motorola 68HC11 and 68HC12 families 143@end ifset 144@ifset HPPA 145* HPPA ELF32:: ld and HPPA 32-bit ELF 146@end ifset 147@ifset M68K 148* M68K:: ld and Motorola 68K family 149@end ifset 150@ifset MIPS 151* MIPS:: ld and MIPS family 152@end ifset 153@ifset POWERPC 154* PowerPC ELF32:: ld and PowerPC 32-bit ELF Support 155@end ifset 156@ifset POWERPC64 157* PowerPC64 ELF64:: ld and PowerPC64 64-bit ELF Support 158@end ifset 159@ifset S/390 160* S/390 ELF:: ld and S/390 ELF Support 161@end ifset 162@ifset SPU 163* SPU ELF:: ld and SPU ELF Support 164@end ifset 165@ifset TICOFF 166* TI COFF:: ld and the TI COFF 167@end ifset 168@ifset WIN32 169* Win32:: ld and WIN32 (cygwin/mingw) 170@end ifset 171@ifset XTENSA 172* Xtensa:: ld and Xtensa Processors 173@end ifset 174@end ifclear 175@ifclear SingleFormat 176* BFD:: BFD 177@end ifclear 178@c Following blank line required for remaining bug in makeinfo conds/menus 179 180* Reporting Bugs:: Reporting Bugs 181* MRI:: MRI Compatible Script Files 182* GNU Free Documentation License:: GNU Free Documentation License 183* LD Index:: LD Index 184@end menu 185@end ifnottex 186 187@node Overview 188@chapter Overview 189 190@cindex @sc{gnu} linker 191@cindex what is this? 192 193@ifset man 194@c man begin SYNOPSIS 195ld [@b{options}] @var{objfile} @dots{} 196@c man end 197 198@c man begin SEEALSO 199ar(1), nm(1), objcopy(1), objdump(1), readelf(1) and 200the Info entries for @file{binutils} and 201@file{ld}. 202@c man end 203@end ifset 204 205@c man begin DESCRIPTION 206 207@command{ld} combines a number of object and archive files, relocates 208their data and ties up symbol references. Usually the last step in 209compiling a program is to run @command{ld}. 210 211@command{ld} accepts Linker Command Language files written in 212a superset of AT&T's Link Editor Command Language syntax, 213to provide explicit and total control over the linking process. 214 215@ifset man 216@c For the man only 217This man page does not describe the command language; see the 218@command{ld} entry in @code{info} for full details on the command 219language and on other aspects of the GNU linker. 220@end ifset 221 222@ifclear SingleFormat 223This version of @command{ld} uses the general purpose BFD libraries 224to operate on object files. This allows @command{ld} to read, combine, and 225write object files in many different formats---for example, COFF or 226@code{a.out}. Different formats may be linked together to produce any 227available kind of object file. @xref{BFD}, for more information. 228@end ifclear 229 230Aside from its flexibility, the @sc{gnu} linker is more helpful than other 231linkers in providing diagnostic information. Many linkers abandon 232execution immediately upon encountering an error; whenever possible, 233@command{ld} continues executing, allowing you to identify other errors 234(or, in some cases, to get an output file in spite of the error). 235 236@c man end 237 238@node Invocation 239@chapter Invocation 240 241@c man begin DESCRIPTION 242 243The @sc{gnu} linker @command{ld} is meant to cover a broad range of situations, 244and to be as compatible as possible with other linkers. As a result, 245you have many choices to control its behavior. 246 247@c man end 248 249@ifset UsesEnvVars 250@menu 251* Options:: Command-line Options 252* Environment:: Environment Variables 253@end menu 254 255@node Options 256@section Command-line Options 257@end ifset 258 259@cindex command line 260@cindex options 261 262@c man begin OPTIONS 263 264The linker supports a plethora of command-line options, but in actual 265practice few of them are used in any particular context. 266@cindex standard Unix system 267For instance, a frequent use of @command{ld} is to link standard Unix 268object files on a standard, supported Unix system. On such a system, to 269link a file @code{hello.o}: 270 271@smallexample 272ld -o @var{output} /lib/crt0.o hello.o -lc 273@end smallexample 274 275This tells @command{ld} to produce a file called @var{output} as the 276result of linking the file @code{/lib/crt0.o} with @code{hello.o} and 277the library @code{libc.a}, which will come from the standard search 278directories. (See the discussion of the @samp{-l} option below.) 279 280Some of the command-line options to @command{ld} may be specified at any 281point in the command line. However, options which refer to files, such 282as @samp{-l} or @samp{-T}, cause the file to be read at the point at 283which the option appears in the command line, relative to the object 284files and other file options. Repeating non-file options with a 285different argument will either have no further effect, or override prior 286occurrences (those further to the left on the command line) of that 287option. Options which may be meaningfully specified more than once are 288noted in the descriptions below. 289 290@cindex object files 291Non-option arguments are object files or archives which are to be linked 292together. They may follow, precede, or be mixed in with command-line 293options, except that an object file argument may not be placed between 294an option and its argument. 295 296Usually the linker is invoked with at least one object file, but you can 297specify other forms of binary input files using @samp{-l}, @samp{-R}, 298and the script command language. If @emph{no} binary input files at all 299are specified, the linker does not produce any output, and issues the 300message @samp{No input files}. 301 302If the linker cannot recognize the format of an object file, it will 303assume that it is a linker script. A script specified in this way 304augments the main linker script used for the link (either the default 305linker script or the one specified by using @samp{-T}). This feature 306permits the linker to link against a file which appears to be an object 307or an archive, but actually merely defines some symbol values, or uses 308@code{INPUT} or @code{GROUP} to load other objects. Specifying a 309script in this way merely augments the main linker script, with the 310extra commands placed after the main script; use the @samp{-T} option 311to replace the default linker script entirely, but note the effect of 312the @code{INSERT} command. @xref{Scripts}. 313 314For options whose names are a single letter, 315option arguments must either follow the option letter without intervening 316whitespace, or be given as separate arguments immediately following the 317option that requires them. 318 319For options whose names are multiple letters, either one dash or two can 320precede the option name; for example, @samp{-trace-symbol} and 321@samp{--trace-symbol} are equivalent. Note---there is one exception to 322this rule. Multiple letter options that start with a lower case 'o' can 323only be preceded by two dashes. This is to reduce confusion with the 324@samp{-o} option. So for example @samp{-omagic} sets the output file 325name to @samp{magic} whereas @samp{--omagic} sets the NMAGIC flag on the 326output. 327 328Arguments to multiple-letter options must either be separated from the 329option name by an equals sign, or be given as separate arguments 330immediately following the option that requires them. For example, 331@samp{--trace-symbol foo} and @samp{--trace-symbol=foo} are equivalent. 332Unique abbreviations of the names of multiple-letter options are 333accepted. 334 335Note---if the linker is being invoked indirectly, via a compiler driver 336(e.g. @samp{gcc}) then all the linker command-line options should be 337prefixed by @samp{-Wl,} (or whatever is appropriate for the particular 338compiler driver) like this: 339 340@smallexample 341 gcc -Wl,--start-group foo.o bar.o -Wl,--end-group 342@end smallexample 343 344This is important, because otherwise the compiler driver program may 345silently drop the linker options, resulting in a bad link. Confusion 346may also arise when passing options that require values through a 347driver, as the use of a space between option and argument acts as 348a separator, and causes the driver to pass only the option to the linker 349and the argument to the compiler. In this case, it is simplest to use 350the joined forms of both single- and multiple-letter options, such as: 351 352@smallexample 353 gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map 354@end smallexample 355 356Here is a table of the generic command-line switches accepted by the GNU 357linker: 358 359@table @gcctabopt 360@include at-file.texi 361 362@kindex -a @var{keyword} 363@item -a @var{keyword} 364This option is supported for HP/UX compatibility. The @var{keyword} 365argument must be one of the strings @samp{archive}, @samp{shared}, or 366@samp{default}. @samp{-aarchive} is functionally equivalent to 367@samp{-Bstatic}, and the other two keywords are functionally equivalent 368to @samp{-Bdynamic}. This option may be used any number of times. 369 370@kindex --audit @var{AUDITLIB} 371@item --audit @var{AUDITLIB} 372Adds @var{AUDITLIB} to the @code{DT_AUDIT} entry of the dynamic section. 373@var{AUDITLIB} is not checked for existence, nor will it use the DT_SONAME 374specified in the library. If specified multiple times @code{DT_AUDIT} 375will contain a colon separated list of audit interfaces to use. If the linker 376finds an object with an audit entry while searching for shared libraries, 377it will add a corresponding @code{DT_DEPAUDIT} entry in the output file. 378This option is only meaningful on ELF platforms supporting the rtld-audit 379interface. 380 381@ifclear SingleFormat 382@cindex binary input format 383@kindex -b @var{format} 384@kindex --format=@var{format} 385@cindex input format 386@cindex input format 387@item -b @var{input-format} 388@itemx --format=@var{input-format} 389@command{ld} may be configured to support more than one kind of object 390file. If your @command{ld} is configured this way, you can use the 391@samp{-b} option to specify the binary format for input object files 392that follow this option on the command line. Even when @command{ld} is 393configured to support alternative object formats, you don't usually need 394to specify this, as @command{ld} should be configured to expect as a 395default input format the most usual format on each machine. 396@var{input-format} is a text string, the name of a particular format 397supported by the BFD libraries. (You can list the available binary 398formats with @samp{objdump -i}.) 399@xref{BFD}. 400 401You may want to use this option if you are linking files with an unusual 402binary format. You can also use @samp{-b} to switch formats explicitly (when 403linking object files of different formats), by including 404@samp{-b @var{input-format}} before each group of object files in a 405particular format. 406 407The default format is taken from the environment variable 408@code{GNUTARGET}. 409@ifset UsesEnvVars 410@xref{Environment}. 411@end ifset 412You can also define the input format from a script, using the command 413@code{TARGET}; 414@ifclear man 415see @ref{Format Commands}. 416@end ifclear 417@end ifclear 418 419@kindex -c @var{MRI-cmdfile} 420@kindex --mri-script=@var{MRI-cmdfile} 421@cindex compatibility, MRI 422@item -c @var{MRI-commandfile} 423@itemx --mri-script=@var{MRI-commandfile} 424For compatibility with linkers produced by MRI, @command{ld} accepts script 425files written in an alternate, restricted command language, described in 426@ifclear man 427@ref{MRI,,MRI Compatible Script Files}. 428@end ifclear 429@ifset man 430the MRI Compatible Script Files section of GNU ld documentation. 431@end ifset 432Introduce MRI script files with 433the option @samp{-c}; use the @samp{-T} option to run linker 434scripts written in the general-purpose @command{ld} scripting language. 435If @var{MRI-cmdfile} does not exist, @command{ld} looks for it in the directories 436specified by any @samp{-L} options. 437 438@cindex common allocation 439@kindex -d 440@kindex -dc 441@kindex -dp 442@item -d 443@itemx -dc 444@itemx -dp 445These three options are equivalent; multiple forms are supported for 446compatibility with other linkers. They assign space to common symbols 447even if a relocatable output file is specified (with @samp{-r}). The 448script command @code{FORCE_COMMON_ALLOCATION} has the same effect. 449@xref{Miscellaneous Commands}. 450 451@kindex --depaudit @var{AUDITLIB} 452@kindex -P @var{AUDITLIB} 453@item --depaudit @var{AUDITLIB} 454@itemx -P @var{AUDITLIB} 455Adds @var{AUDITLIB} to the @code{DT_DEPAUDIT} entry of the dynamic section. 456@var{AUDITLIB} is not checked for existence, nor will it use the DT_SONAME 457specified in the library. If specified multiple times @code{DT_DEPAUDIT} 458will contain a colon separated list of audit interfaces to use. This 459option is only meaningful on ELF platforms supporting the rtld-audit interface. 460The -P option is provided for Solaris compatibility. 461 462@cindex entry point, from command line 463@kindex -e @var{entry} 464@kindex --entry=@var{entry} 465@item -e @var{entry} 466@itemx --entry=@var{entry} 467Use @var{entry} as the explicit symbol for beginning execution of your 468program, rather than the default entry point. If there is no symbol 469named @var{entry}, the linker will try to parse @var{entry} as a number, 470and use that as the entry address (the number will be interpreted in 471base 10; you may use a leading @samp{0x} for base 16, or a leading 472@samp{0} for base 8). @xref{Entry Point}, for a discussion of defaults 473and other ways of specifying the entry point. 474 475@kindex --exclude-libs 476@item --exclude-libs @var{lib},@var{lib},... 477Specifies a list of archive libraries from which symbols should not be automatically 478exported. The library names may be delimited by commas or colons. Specifying 479@code{--exclude-libs ALL} excludes symbols in all archive libraries from 480automatic export. This option is available only for the i386 PE targeted 481port of the linker and for ELF targeted ports. For i386 PE, symbols 482explicitly listed in a .def file are still exported, regardless of this 483option. For ELF targeted ports, symbols affected by this option will 484be treated as hidden. 485 486@kindex --exclude-modules-for-implib 487@item --exclude-modules-for-implib @var{module},@var{module},... 488Specifies a list of object files or archive members, from which symbols 489should not be automatically exported, but which should be copied wholesale 490into the import library being generated during the link. The module names 491may be delimited by commas or colons, and must match exactly the filenames 492used by @command{ld} to open the files; for archive members, this is simply 493the member name, but for object files the name listed must include and 494match precisely any path used to specify the input file on the linker's 495command-line. This option is available only for the i386 PE targeted port 496of the linker. Symbols explicitly listed in a .def file are still exported, 497regardless of this option. 498 499@cindex dynamic symbol table 500@kindex -E 501@kindex --export-dynamic 502@kindex --no-export-dynamic 503@item -E 504@itemx --export-dynamic 505@itemx --no-export-dynamic 506When creating a dynamically linked executable, using the @option{-E} 507option or the @option{--export-dynamic} option causes the linker to add 508all symbols to the dynamic symbol table. The dynamic symbol table is the 509set of symbols which are visible from dynamic objects at run time. 510 511If you do not use either of these options (or use the 512@option{--no-export-dynamic} option to restore the default behavior), the 513dynamic symbol table will normally contain only those symbols which are 514referenced by some dynamic object mentioned in the link. 515 516If you use @code{dlopen} to load a dynamic object which needs to refer 517back to the symbols defined by the program, rather than some other 518dynamic object, then you will probably need to use this option when 519linking the program itself. 520 521You can also use the dynamic list to control what symbols should 522be added to the dynamic symbol table if the output format supports it. 523See the description of @samp{--dynamic-list}. 524 525Note that this option is specific to ELF targeted ports. PE targets 526support a similar function to export all symbols from a DLL or EXE; see 527the description of @samp{--export-all-symbols} below. 528 529@ifclear SingleFormat 530@cindex big-endian objects 531@cindex endianness 532@kindex -EB 533@item -EB 534Link big-endian objects. This affects the default output format. 535 536@cindex little-endian objects 537@kindex -EL 538@item -EL 539Link little-endian objects. This affects the default output format. 540@end ifclear 541 542@kindex -f @var{name} 543@kindex --auxiliary=@var{name} 544@item -f @var{name} 545@itemx --auxiliary=@var{name} 546When creating an ELF shared object, set the internal DT_AUXILIARY field 547to the specified name. This tells the dynamic linker that the symbol 548table of the shared object should be used as an auxiliary filter on the 549symbol table of the shared object @var{name}. 550 551If you later link a program against this filter object, then, when you 552run the program, the dynamic linker will see the DT_AUXILIARY field. If 553the dynamic linker resolves any symbols from the filter object, it will 554first check whether there is a definition in the shared object 555@var{name}. If there is one, it will be used instead of the definition 556in the filter object. The shared object @var{name} need not exist. 557Thus the shared object @var{name} may be used to provide an alternative 558implementation of certain functions, perhaps for debugging or for 559machine-specific performance. 560 561This option may be specified more than once. The DT_AUXILIARY entries 562will be created in the order in which they appear on the command line. 563 564@kindex -F @var{name} 565@kindex --filter=@var{name} 566@item -F @var{name} 567@itemx --filter=@var{name} 568When creating an ELF shared object, set the internal DT_FILTER field to 569the specified name. This tells the dynamic linker that the symbol table 570of the shared object which is being created should be used as a filter 571on the symbol table of the shared object @var{name}. 572 573If you later link a program against this filter object, then, when you 574run the program, the dynamic linker will see the DT_FILTER field. The 575dynamic linker will resolve symbols according to the symbol table of the 576filter object as usual, but it will actually link to the definitions 577found in the shared object @var{name}. Thus the filter object can be 578used to select a subset of the symbols provided by the object 579@var{name}. 580 581Some older linkers used the @option{-F} option throughout a compilation 582toolchain for specifying object-file format for both input and output 583object files. 584@ifclear SingleFormat 585The @sc{gnu} linker uses other mechanisms for this purpose: the 586@option{-b}, @option{--format}, @option{--oformat} options, the 587@code{TARGET} command in linker scripts, and the @code{GNUTARGET} 588environment variable. 589@end ifclear 590The @sc{gnu} linker will ignore the @option{-F} option when not 591creating an ELF shared object. 592 593@cindex finalization function 594@kindex -fini=@var{name} 595@item -fini=@var{name} 596When creating an ELF executable or shared object, call NAME when the 597executable or shared object is unloaded, by setting DT_FINI to the 598address of the function. By default, the linker uses @code{_fini} as 599the function to call. 600 601@kindex -g 602@item -g 603Ignored. Provided for compatibility with other tools. 604 605@kindex -G @var{value} 606@kindex --gpsize=@var{value} 607@cindex object size 608@item -G @var{value} 609@itemx --gpsize=@var{value} 610Set the maximum size of objects to be optimized using the GP register to 611@var{size}. This is only meaningful for object file formats such as 612MIPS ELF that support putting large and small objects into different 613sections. This is ignored for other object file formats. 614 615@cindex runtime library name 616@kindex -h @var{name} 617@kindex -soname=@var{name} 618@item -h @var{name} 619@itemx -soname=@var{name} 620When creating an ELF shared object, set the internal DT_SONAME field to 621the specified name. When an executable is linked with a shared object 622which has a DT_SONAME field, then when the executable is run the dynamic 623linker will attempt to load the shared object specified by the DT_SONAME 624field rather than the using the file name given to the linker. 625 626@kindex -i 627@cindex incremental link 628@item -i 629Perform an incremental link (same as option @samp{-r}). 630 631@cindex initialization function 632@kindex -init=@var{name} 633@item -init=@var{name} 634When creating an ELF executable or shared object, call NAME when the 635executable or shared object is loaded, by setting DT_INIT to the address 636of the function. By default, the linker uses @code{_init} as the 637function to call. 638 639@cindex archive files, from cmd line 640@kindex -l @var{namespec} 641@kindex --library=@var{namespec} 642@item -l @var{namespec} 643@itemx --library=@var{namespec} 644Add the archive or object file specified by @var{namespec} to the 645list of files to link. This option may be used any number of times. 646If @var{namespec} is of the form @file{:@var{filename}}, @command{ld} 647will search the library path for a file called @var{filename}, otherwise it 648will search the library path for a file called @file{lib@var{namespec}.a}. 649 650On systems which support shared libraries, @command{ld} may also search for 651files other than @file{lib@var{namespec}.a}. Specifically, on ELF 652and SunOS systems, @command{ld} will search a directory for a library 653called @file{lib@var{namespec}.so} before searching for one called 654@file{lib@var{namespec}.a}. (By convention, a @code{.so} extension 655indicates a shared library.) Note that this behavior does not apply 656to @file{:@var{filename}}, which always specifies a file called 657@var{filename}. 658 659The linker will search an archive only once, at the location where it is 660specified on the command line. If the archive defines a symbol which 661was undefined in some object which appeared before the archive on the 662command line, the linker will include the appropriate file(s) from the 663archive. However, an undefined symbol in an object appearing later on 664the command line will not cause the linker to search the archive again. 665 666See the @option{-(} option for a way to force the linker to search 667archives multiple times. 668 669You may list the same archive multiple times on the command line. 670 671@ifset GENERIC 672This type of archive searching is standard for Unix linkers. However, 673if you are using @command{ld} on AIX, note that it is different from the 674behaviour of the AIX linker. 675@end ifset 676 677@cindex search directory, from cmd line 678@kindex -L @var{dir} 679@kindex --library-path=@var{dir} 680@item -L @var{searchdir} 681@itemx --library-path=@var{searchdir} 682Add path @var{searchdir} to the list of paths that @command{ld} will search 683for archive libraries and @command{ld} control scripts. You may use this 684option any number of times. The directories are searched in the order 685in which they are specified on the command line. Directories specified 686on the command line are searched before the default directories. All 687@option{-L} options apply to all @option{-l} options, regardless of the 688order in which the options appear. @option{-L} options do not affect 689how @command{ld} searches for a linker script unless @option{-T} 690option is specified. 691 692If @var{searchdir} begins with @code{=} or @code{$SYSROOT}, then this 693prefix will be replaced by the @dfn{sysroot prefix}, controlled by the 694@samp{--sysroot} option, or specified when the linker is configured. 695 696@ifset UsesEnvVars 697The default set of paths searched (without being specified with 698@samp{-L}) depends on which emulation mode @command{ld} is using, and in 699some cases also on how it was configured. @xref{Environment}. 700@end ifset 701 702The paths can also be specified in a link script with the 703@code{SEARCH_DIR} command. Directories specified this way are searched 704at the point in which the linker script appears in the command line. 705 706@cindex emulation 707@kindex -m @var{emulation} 708@item -m @var{emulation} 709Emulate the @var{emulation} linker. You can list the available 710emulations with the @samp{--verbose} or @samp{-V} options. 711 712If the @samp{-m} option is not used, the emulation is taken from the 713@code{LDEMULATION} environment variable, if that is defined. 714 715Otherwise, the default emulation depends upon how the linker was 716configured. 717 718@cindex link map 719@kindex -M 720@kindex --print-map 721@item -M 722@itemx --print-map 723Print a link map to the standard output. A link map provides 724information about the link, including the following: 725 726@itemize @bullet 727@item 728Where object files are mapped into memory. 729@item 730How common symbols are allocated. 731@item 732All archive members included in the link, with a mention of the symbol 733which caused the archive member to be brought in. 734@item 735The values assigned to symbols. 736 737Note - symbols whose values are computed by an expression which 738involves a reference to a previous value of the same symbol may not 739have correct result displayed in the link map. This is because the 740linker discards intermediate results and only retains the final value 741of an expression. Under such circumstances the linker will display 742the final value enclosed by square brackets. Thus for example a 743linker script containing: 744 745@smallexample 746 foo = 1 747 foo = foo * 4 748 foo = foo + 8 749@end smallexample 750 751will produce the following output in the link map if the @option{-M} 752option is used: 753 754@smallexample 755 0x00000001 foo = 0x1 756 [0x0000000c] foo = (foo * 0x4) 757 [0x0000000c] foo = (foo + 0x8) 758@end smallexample 759 760See @ref{Expressions} for more information about expressions in linker 761scripts. 762 763@item 764How GNU properties are merged. 765 766When the linker merges input .note.gnu.property sections into one output 767.note.gnu.property section, some properties are removed or updated. 768These actions are reported in the link map. For example: 769 770@smallexample 771Removed property 0xc0000002 to merge foo.o (0x1) and bar.o (not found) 772@end smallexample 773 774This indicates that property 0xc0000002 is removed from output when 775merging properties in @file{foo.o}, whose property 0xc0000002 value 776is 0x1, and @file{bar.o}, which doesn't have property 0xc0000002. 777 778@smallexample 779Updated property 0xc0010001 (0x1) to merge foo.o (0x1) and bar.o (0x1) 780@end smallexample 781 782This indicates that property 0xc0010001 value is updated to 0x1 in output 783when merging properties in @file{foo.o}, whose 0xc0010001 property value 784is 0x1, and @file{bar.o}, whose 0xc0010001 property value is 0x1. 785@end itemize 786 787@cindex link map discarded 788@kindex --print-map-discarded 789@kindex --no-print-map-discarded 790@item --print-map-discarded 791@itemx --no-print-map-discarded 792Print (or do not print) the list of discarded and garbage collected sections 793in the link map. Enabled by default. 794 795@kindex -n 796@cindex read-only text 797@cindex NMAGIC 798@kindex --nmagic 799@item -n 800@itemx --nmagic 801Turn off page alignment of sections, and disable linking against shared 802libraries. If the output format supports Unix style magic numbers, 803mark the output as @code{NMAGIC}. 804 805@kindex -N 806@kindex --omagic 807@cindex read/write from cmd line 808@cindex OMAGIC 809@item -N 810@itemx --omagic 811Set the text and data sections to be readable and writable. Also, do 812not page-align the data segment, and disable linking against shared 813libraries. If the output format supports Unix style magic numbers, 814mark the output as @code{OMAGIC}. Note: Although a writable text section 815is allowed for PE-COFF targets, it does not conform to the format 816specification published by Microsoft. 817 818@kindex --no-omagic 819@cindex OMAGIC 820@item --no-omagic 821This option negates most of the effects of the @option{-N} option. It 822sets the text section to be read-only, and forces the data segment to 823be page-aligned. Note - this option does not enable linking against 824shared libraries. Use @option{-Bdynamic} for this. 825 826@kindex -o @var{output} 827@kindex --output=@var{output} 828@cindex naming the output file 829@item -o @var{output} 830@itemx --output=@var{output} 831Use @var{output} as the name for the program produced by @command{ld}; if this 832option is not specified, the name @file{a.out} is used by default. The 833script command @code{OUTPUT} can also specify the output file name. 834 835@kindex -O @var{level} 836@cindex generating optimized output 837@item -O @var{level} 838If @var{level} is a numeric values greater than zero @command{ld} optimizes 839the output. This might take significantly longer and therefore probably 840should only be enabled for the final binary. At the moment this 841option only affects ELF shared library generation. Future releases of 842the linker may make more use of this option. Also currently there is 843no difference in the linker's behaviour for different non-zero values 844of this option. Again this may change with future releases. 845 846@kindex -plugin @var{name} 847@item -plugin @var{name} 848Involve a plugin in the linking process. The @var{name} parameter is 849the absolute filename of the plugin. Usually this parameter is 850automatically added by the complier, when using link time 851optimization, but users can also add their own plugins if they so 852wish. 853 854Note that the location of the compiler originated plugins is different 855from the place where the @command{ar}, @command{nm} and 856@command{ranlib} programs search for their plugins. In order for 857those commands to make use of a compiler based plugin it must first be 858copied into the @file{$@{libdir@}/bfd-plugins} directory. All gcc 859based linker plugins are backward compatible, so it is sufficient to 860just copy in the newest one. 861 862@kindex --push-state 863@cindex push state governing input file handling 864@item --push-state 865The @option{--push-state} allows to preserve the current state of the 866flags which govern the input file handling so that they can all be 867restored with one corresponding @option{--pop-state} option. 868 869The option which are covered are: @option{-Bdynamic}, @option{-Bstatic}, 870@option{-dn}, @option{-dy}, @option{-call_shared}, @option{-non_shared}, 871@option{-static}, @option{-N}, @option{-n}, @option{--whole-archive}, 872@option{--no-whole-archive}, @option{-r}, @option{-Ur}, 873@option{--copy-dt-needed-entries}, @option{--no-copy-dt-needed-entries}, 874@option{--as-needed}, @option{--no-as-needed}, and @option{-a}. 875 876One target for this option are specifications for @file{pkg-config}. When 877used with the @option{--libs} option all possibly needed libraries are 878listed and then possibly linked with all the time. It is better to return 879something as follows: 880 881@smallexample 882-Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state 883@end smallexample 884 885@kindex --pop-state 886@cindex pop state governing input file handling 887@item --pop-state 888Undoes the effect of --push-state, restores the previous values of the 889flags governing input file handling. 890 891@kindex -q 892@kindex --emit-relocs 893@cindex retain relocations in final executable 894@item -q 895@itemx --emit-relocs 896Leave relocation sections and contents in fully linked executables. 897Post link analysis and optimization tools may need this information in 898order to perform correct modifications of executables. This results 899in larger executables. 900 901This option is currently only supported on ELF platforms. 902 903@kindex --force-dynamic 904@cindex forcing the creation of dynamic sections 905@item --force-dynamic 906Force the output file to have dynamic sections. This option is specific 907to VxWorks targets. 908 909@cindex partial link 910@cindex relocatable output 911@kindex -r 912@kindex --relocatable 913@item -r 914@itemx --relocatable 915Generate relocatable output---i.e., generate an output file that can in 916turn serve as input to @command{ld}. This is often called @dfn{partial 917linking}. As a side effect, in environments that support standard Unix 918magic numbers, this option also sets the output file's magic number to 919@code{OMAGIC}. 920@c ; see @option{-N}. 921If this option is not specified, an absolute file is produced. When 922linking C++ programs, this option @emph{will not} resolve references to 923constructors; to do that, use @samp{-Ur}. 924 925When an input file does not have the same format as the output file, 926partial linking is only supported if that input file does not contain any 927relocations. Different output formats can have further restrictions; for 928example some @code{a.out}-based formats do not support partial linking 929with input files in other formats at all. 930 931This option does the same thing as @samp{-i}. 932 933@kindex -R @var{file} 934@kindex --just-symbols=@var{file} 935@cindex symbol-only input 936@item -R @var{filename} 937@itemx --just-symbols=@var{filename} 938Read symbol names and their addresses from @var{filename}, but do not 939relocate it or include it in the output. This allows your output file 940to refer symbolically to absolute locations of memory defined in other 941programs. You may use this option more than once. 942 943For compatibility with other ELF linkers, if the @option{-R} option is 944followed by a directory name, rather than a file name, it is treated as 945the @option{-rpath} option. 946 947@kindex -s 948@kindex --strip-all 949@cindex strip all symbols 950@item -s 951@itemx --strip-all 952Omit all symbol information from the output file. 953 954@kindex -S 955@kindex --strip-debug 956@cindex strip debugger symbols 957@item -S 958@itemx --strip-debug 959Omit debugger symbol information (but not all symbols) from the output file. 960 961@kindex --strip-discarded 962@kindex --no-strip-discarded 963@item --strip-discarded 964@itemx --no-strip-discarded 965Omit (or do not omit) global symbols defined in discarded sections. 966Enabled by default. 967 968@kindex -t 969@kindex --trace 970@cindex input files, displaying 971@item -t 972@itemx --trace 973Print the names of the input files as @command{ld} processes them. If 974@samp{-t} is given twice then members within archives are also printed. 975@samp{-t} output is useful to generate a list of all the object files 976and scripts involved in linking, for example, when packaging files for 977a linker bug report. 978 979@kindex -T @var{script} 980@kindex --script=@var{script} 981@cindex script files 982@item -T @var{scriptfile} 983@itemx --script=@var{scriptfile} 984Use @var{scriptfile} as the linker script. This script replaces 985@command{ld}'s default linker script (rather than adding to it), so 986@var{commandfile} must specify everything necessary to describe the 987output file. @xref{Scripts}. If @var{scriptfile} does not exist in 988the current directory, @code{ld} looks for it in the directories 989specified by any preceding @samp{-L} options. Multiple @samp{-T} 990options accumulate. 991 992@kindex -dT @var{script} 993@kindex --default-script=@var{script} 994@cindex script files 995@item -dT @var{scriptfile} 996@itemx --default-script=@var{scriptfile} 997Use @var{scriptfile} as the default linker script. @xref{Scripts}. 998 999This option is similar to the @option{--script} option except that 1000processing of the script is delayed until after the rest of the 1001command line has been processed. This allows options placed after the 1002@option{--default-script} option on the command line to affect the 1003behaviour of the linker script, which can be important when the linker 1004command line cannot be directly controlled by the user. (eg because 1005the command line is being constructed by another tool, such as 1006@samp{gcc}). 1007 1008@kindex -u @var{symbol} 1009@kindex --undefined=@var{symbol} 1010@cindex undefined symbol 1011@item -u @var{symbol} 1012@itemx --undefined=@var{symbol} 1013Force @var{symbol} to be entered in the output file as an undefined 1014symbol. Doing this may, for example, trigger linking of additional 1015modules from standard libraries. @samp{-u} may be repeated with 1016different option arguments to enter additional undefined symbols. This 1017option is equivalent to the @code{EXTERN} linker script command. 1018 1019If this option is being used to force additional modules to be pulled 1020into the link, and if it is an error for the symbol to remain 1021undefined, then the option @option{--require-defined} should be used 1022instead. 1023 1024@kindex --require-defined=@var{symbol} 1025@cindex symbols, require defined 1026@cindex defined symbol 1027@item --require-defined=@var{symbol} 1028Require that @var{symbol} is defined in the output file. This option 1029is the same as option @option{--undefined} except that if @var{symbol} 1030is not defined in the output file then the linker will issue an error 1031and exit. The same effect can be achieved in a linker script by using 1032@code{EXTERN}, @code{ASSERT} and @code{DEFINED} together. This option 1033can be used multiple times to require additional symbols. 1034 1035@kindex -Ur 1036@cindex constructors 1037@item -Ur 1038For anything other than C++ programs, this option is equivalent to 1039@samp{-r}: it generates relocatable output---i.e., an output file that can in 1040turn serve as input to @command{ld}. When linking C++ programs, @samp{-Ur} 1041@emph{does} resolve references to constructors, unlike @samp{-r}. 1042It does not work to use @samp{-Ur} on files that were themselves linked 1043with @samp{-Ur}; once the constructor table has been built, it cannot 1044be added to. Use @samp{-Ur} only for the last partial link, and 1045@samp{-r} for the others. 1046 1047@kindex --orphan-handling=@var{MODE} 1048@cindex orphan sections 1049@cindex sections, orphan 1050@item --orphan-handling=@var{MODE} 1051Control how orphan sections are handled. An orphan section is one not 1052specifically mentioned in a linker script. @xref{Orphan Sections}. 1053 1054@var{MODE} can have any of the following values: 1055 1056@table @code 1057@item place 1058Orphan sections are placed into a suitable output section following 1059the strategy described in @ref{Orphan Sections}. The option 1060@samp{--unique} also affects how sections are placed. 1061 1062@item discard 1063All orphan sections are discarded, by placing them in the 1064@samp{/DISCARD/} section (@pxref{Output Section Discarding}). 1065 1066@item warn 1067The linker will place the orphan section as for @code{place} and also 1068issue a warning. 1069 1070@item error 1071The linker will exit with an error if any orphan section is found. 1072@end table 1073 1074The default if @samp{--orphan-handling} is not given is @code{place}. 1075 1076@kindex --unique[=@var{SECTION}] 1077@item --unique[=@var{SECTION}] 1078Creates a separate output section for every input section matching 1079@var{SECTION}, or if the optional wildcard @var{SECTION} argument is 1080missing, for every orphan input section. An orphan section is one not 1081specifically mentioned in a linker script. You may use this option 1082multiple times on the command line; It prevents the normal merging of 1083input sections with the same name, overriding output section assignments 1084in a linker script. 1085 1086@kindex -v 1087@kindex -V 1088@kindex --version 1089@cindex version 1090@item -v 1091@itemx --version 1092@itemx -V 1093Display the version number for @command{ld}. The @option{-V} option also 1094lists the supported emulations. 1095 1096@kindex -x 1097@kindex --discard-all 1098@cindex deleting local symbols 1099@item -x 1100@itemx --discard-all 1101Delete all local symbols. 1102 1103@kindex -X 1104@kindex --discard-locals 1105@cindex local symbols, deleting 1106@item -X 1107@itemx --discard-locals 1108Delete all temporary local symbols. (These symbols start with 1109system-specific local label prefixes, typically @samp{.L} for ELF systems 1110or @samp{L} for traditional a.out systems.) 1111 1112@kindex -y @var{symbol} 1113@kindex --trace-symbol=@var{symbol} 1114@cindex symbol tracing 1115@item -y @var{symbol} 1116@itemx --trace-symbol=@var{symbol} 1117Print the name of each linked file in which @var{symbol} appears. This 1118option may be given any number of times. On many systems it is necessary 1119to prepend an underscore. 1120 1121This option is useful when you have an undefined symbol in your link but 1122don't know where the reference is coming from. 1123 1124@kindex -Y @var{path} 1125@item -Y @var{path} 1126Add @var{path} to the default library search path. This option exists 1127for Solaris compatibility. 1128 1129@kindex -z @var{keyword} 1130@item -z @var{keyword} 1131The recognized keywords are: 1132@table @samp 1133 1134@item bndplt 1135Always generate BND prefix in PLT entries. Supported for Linux/x86_64. 1136 1137@item call-nop=prefix-addr 1138@itemx call-nop=suffix-nop 1139@itemx call-nop=prefix-@var{byte} 1140@itemx call-nop=suffix-@var{byte} 1141Specify the 1-byte @code{NOP} padding when transforming indirect call 1142to a locally defined function, foo, via its GOT slot. 1143@option{call-nop=prefix-addr} generates @code{0x67 call foo}. 1144@option{call-nop=suffix-nop} generates @code{call foo 0x90}. 1145@option{call-nop=prefix-@var{byte}} generates @code{@var{byte} call foo}. 1146@option{call-nop=suffix-@var{byte}} generates @code{call foo @var{byte}}. 1147Supported for i386 and x86_64. 1148 1149@item cet-report=none 1150@itemx cet-report=warning 1151@itemx cet-report=error 1152Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_IBT and 1153GNU_PROPERTY_X86_FEATURE_1_SHSTK properties in input .note.gnu.property 1154section. @option{cet-report=none}, which is the default, will make the 1155linker not report missing properties in input files. 1156@option{cet-report=warning} will make the linker issue a warning for 1157missing properties in input files. @option{cet-report=error} will make 1158the linker issue an error for missing properties in input files. 1159Note that @option{ibt} will turn off the missing 1160GNU_PROPERTY_X86_FEATURE_1_IBT property report and @option{shstk} will 1161turn off the missing GNU_PROPERTY_X86_FEATURE_1_SHSTK property report. 1162Supported for Linux/i386 and Linux/x86_64. 1163 1164@item combreloc 1165@itemx nocombreloc 1166Combine multiple dynamic relocation sections and sort to improve 1167dynamic symbol lookup caching. Do not do this if @samp{nocombreloc}. 1168 1169@item common 1170@itemx nocommon 1171Generate common symbols with STT_COMMON type during a relocatable 1172link. Use STT_OBJECT type if @samp{nocommon}. 1173 1174@item common-page-size=@var{value} 1175Set the page size most commonly used to @var{value}. Memory image 1176layout will be optimized to minimize memory pages if the system is 1177using pages of this size. 1178 1179@item defs 1180Report unresolved symbol references from regular object files. This 1181is done even if the linker is creating a non-symbolic shared library. 1182This option is the inverse of @samp{-z undefs}. 1183 1184@item dynamic-undefined-weak 1185@itemx nodynamic-undefined-weak 1186Make undefined weak symbols dynamic when building a dynamic object, 1187if they are referenced from a regular object file and not forced local 1188by symbol visibility or versioning. Do not make them dynamic if 1189@samp{nodynamic-undefined-weak}. If neither option is given, a target 1190may default to either option being in force, or make some other 1191selection of undefined weak symbols dynamic. Not all targets support 1192these options. 1193 1194@item execstack 1195Marks the object as requiring executable stack. 1196 1197@item global 1198This option is only meaningful when building a shared object. It makes 1199the symbols defined by this shared object available for symbol resolution 1200of subsequently loaded libraries. 1201 1202@item globalaudit 1203This option is only meaningful when building a dynamic executable. 1204This option marks the executable as requiring global auditing by 1205setting the @code{DF_1_GLOBAUDIT} bit in the @code{DT_FLAGS_1} dynamic 1206tag. Global auditing requires that any auditing library defined via 1207the @option{--depaudit} or @option{-P} command-line options be run for 1208all dynamic objects loaded by the application. 1209 1210@item ibtplt 1211Generate Intel Indirect Branch Tracking (IBT) enabled PLT entries. 1212Supported for Linux/i386 and Linux/x86_64. 1213 1214@item ibt 1215Generate GNU_PROPERTY_X86_FEATURE_1_IBT in .note.gnu.property section 1216to indicate compatibility with IBT. This also implies @option{ibtplt}. 1217Supported for Linux/i386 and Linux/x86_64. 1218 1219@item initfirst 1220This option is only meaningful when building a shared object. 1221It marks the object so that its runtime initialization will occur 1222before the runtime initialization of any other objects brought into 1223the process at the same time. Similarly the runtime finalization of 1224the object will occur after the runtime finalization of any other 1225objects. 1226 1227@item interpose 1228Specify that the dynamic loader should modify its symbol search order 1229so that symbols in this shared library interpose all other shared 1230libraries not so marked. 1231 1232@item lazy 1233When generating an executable or shared library, mark it to tell the 1234dynamic linker to defer function call resolution to the point when 1235the function is called (lazy binding), rather than at load time. 1236Lazy binding is the default. 1237 1238@item loadfltr 1239Specify that the object's filters be processed immediately at runtime. 1240 1241@item max-page-size=@var{value} 1242Set the maximum memory page size supported to @var{value}. 1243 1244@item muldefs 1245Allow multiple definitions. 1246 1247@item nocopyreloc 1248Disable linker generated .dynbss variables used in place of variables 1249defined in shared libraries. May result in dynamic text relocations. 1250 1251@item nodefaultlib 1252Specify that the dynamic loader search for dependencies of this object 1253should ignore any default library search paths. 1254 1255@item nodelete 1256Specify that the object shouldn't be unloaded at runtime. 1257 1258@item nodlopen 1259Specify that the object is not available to @code{dlopen}. 1260 1261@item nodump 1262Specify that the object can not be dumped by @code{dldump}. 1263 1264@item noexecstack 1265Marks the object as not requiring executable stack. 1266 1267@item noextern-protected-data 1268Don't treat protected data symbols as external when building a shared 1269library. This option overrides the linker backend default. It can be 1270used to work around incorrect relocations against protected data symbols 1271generated by compiler. Updates on protected data symbols by another 1272module aren't visible to the resulting shared library. Supported for 1273i386 and x86-64. 1274 1275@item noreloc-overflow 1276Disable relocation overflow check. This can be used to disable 1277relocation overflow check if there will be no dynamic relocation 1278overflow at run-time. Supported for x86_64. 1279 1280@item now 1281When generating an executable or shared library, mark it to tell the 1282dynamic linker to resolve all symbols when the program is started, or 1283when the shared library is loaded by dlopen, instead of deferring 1284function call resolution to the point when the function is first 1285called. 1286 1287@item origin 1288Specify that the object requires @samp{$ORIGIN} handling in paths. 1289 1290@item relro 1291@itemx norelro 1292Create an ELF @code{PT_GNU_RELRO} segment header in the object. This 1293specifies a memory segment that should be made read-only after 1294relocation, if supported. Specifying @samp{common-page-size} smaller 1295than the system page size will render this protection ineffective. 1296Don't create an ELF @code{PT_GNU_RELRO} segment if @samp{norelro}. 1297 1298@item separate-code 1299@itemx noseparate-code 1300Create separate code @code{PT_LOAD} segment header in the object. This 1301specifies a memory segment that should contain only instructions and must 1302be in wholly disjoint pages from any other data. Don't create separate 1303code @code{PT_LOAD} segment if @samp{noseparate-code} is used. 1304 1305@item shstk 1306Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK in .note.gnu.property section 1307to indicate compatibility with Intel Shadow Stack. Supported for 1308Linux/i386 and Linux/x86_64. 1309 1310@item stack-size=@var{value} 1311Specify a stack size for an ELF @code{PT_GNU_STACK} segment. 1312Specifying zero will override any default non-zero sized 1313@code{PT_GNU_STACK} segment creation. 1314 1315@item text 1316@itemx notext 1317@itemx textoff 1318Report an error if DT_TEXTREL is set, i.e., if the binary has dynamic 1319relocations in read-only sections. Don't report an error if 1320@samp{notext} or @samp{textoff}. 1321 1322@item undefs 1323Do not report unresolved symbol references from regular object files, 1324either when creating an executable, or when creating a shared library. 1325This option is the inverse of @samp{-z defs}. 1326 1327@end table 1328 1329Other keywords are ignored for Solaris compatibility. 1330 1331@kindex -( 1332@cindex groups of archives 1333@item -( @var{archives} -) 1334@itemx --start-group @var{archives} --end-group 1335The @var{archives} should be a list of archive files. They may be 1336either explicit file names, or @samp{-l} options. 1337 1338The specified archives are searched repeatedly until no new undefined 1339references are created. Normally, an archive is searched only once in 1340the order that it is specified on the command line. If a symbol in that 1341archive is needed to resolve an undefined symbol referred to by an 1342object in an archive that appears later on the command line, the linker 1343would not be able to resolve that reference. By grouping the archives, 1344they will all be searched repeatedly until all possible references are 1345resolved. 1346 1347Using this option has a significant performance cost. It is best to use 1348it only when there are unavoidable circular references between two or 1349more archives. 1350 1351@kindex --accept-unknown-input-arch 1352@kindex --no-accept-unknown-input-arch 1353@item --accept-unknown-input-arch 1354@itemx --no-accept-unknown-input-arch 1355Tells the linker to accept input files whose architecture cannot be 1356recognised. The assumption is that the user knows what they are doing 1357and deliberately wants to link in these unknown input files. This was 1358the default behaviour of the linker, before release 2.14. The default 1359behaviour from release 2.14 onwards is to reject such input files, and 1360so the @samp{--accept-unknown-input-arch} option has been added to 1361restore the old behaviour. 1362 1363@kindex --as-needed 1364@kindex --no-as-needed 1365@item --as-needed 1366@itemx --no-as-needed 1367This option affects ELF DT_NEEDED tags for dynamic libraries mentioned 1368on the command line after the @option{--as-needed} option. Normally 1369the linker will add a DT_NEEDED tag for each dynamic library mentioned 1370on the command line, regardless of whether the library is actually 1371needed or not. @option{--as-needed} causes a DT_NEEDED tag to only be 1372emitted for a library that @emph{at that point in the link} satisfies a 1373non-weak undefined symbol reference from a regular object file or, if 1374the library is not found in the DT_NEEDED lists of other needed libraries, a 1375non-weak undefined symbol reference from another needed dynamic library. 1376Object files or libraries appearing on the command line @emph{after} 1377the library in question do not affect whether the library is seen as 1378needed. This is similar to the rules for extraction of object files 1379from archives. @option{--no-as-needed} restores the default behaviour. 1380 1381@kindex --add-needed 1382@kindex --no-add-needed 1383@item --add-needed 1384@itemx --no-add-needed 1385These two options have been deprecated because of the similarity of 1386their names to the @option{--as-needed} and @option{--no-as-needed} 1387options. They have been replaced by @option{--copy-dt-needed-entries} 1388and @option{--no-copy-dt-needed-entries}. 1389 1390@kindex -assert @var{keyword} 1391@item -assert @var{keyword} 1392This option is ignored for SunOS compatibility. 1393 1394@kindex -Bdynamic 1395@kindex -dy 1396@kindex -call_shared 1397@item -Bdynamic 1398@itemx -dy 1399@itemx -call_shared 1400Link against dynamic libraries. This is only meaningful on platforms 1401for which shared libraries are supported. This option is normally the 1402default on such platforms. The different variants of this option are 1403for compatibility with various systems. You may use this option 1404multiple times on the command line: it affects library searching for 1405@option{-l} options which follow it. 1406 1407@kindex -Bgroup 1408@item -Bgroup 1409Set the @code{DF_1_GROUP} flag in the @code{DT_FLAGS_1} entry in the dynamic 1410section. This causes the runtime linker to handle lookups in this 1411object and its dependencies to be performed only inside the group. 1412@option{--unresolved-symbols=report-all} is implied. This option is 1413only meaningful on ELF platforms which support shared libraries. 1414 1415@kindex -Bstatic 1416@kindex -dn 1417@kindex -non_shared 1418@kindex -static 1419@item -Bstatic 1420@itemx -dn 1421@itemx -non_shared 1422@itemx -static 1423Do not link against shared libraries. This is only meaningful on 1424platforms for which shared libraries are supported. The different 1425variants of this option are for compatibility with various systems. You 1426may use this option multiple times on the command line: it affects 1427library searching for @option{-l} options which follow it. This 1428option also implies @option{--unresolved-symbols=report-all}. This 1429option can be used with @option{-shared}. Doing so means that a 1430shared library is being created but that all of the library's external 1431references must be resolved by pulling in entries from static 1432libraries. 1433 1434@kindex -Bsymbolic 1435@item -Bsymbolic 1436When creating a shared library, bind references to global symbols to the 1437definition within the shared library, if any. Normally, it is possible 1438for a program linked against a shared library to override the definition 1439within the shared library. This option is only meaningful on ELF 1440platforms which support shared libraries. 1441 1442@kindex -Bsymbolic-functions 1443@item -Bsymbolic-functions 1444When creating a shared library, bind references to global function 1445symbols to the definition within the shared library, if any. 1446This option is only meaningful on ELF platforms which support shared 1447libraries. 1448 1449@kindex --dynamic-list=@var{dynamic-list-file} 1450@item --dynamic-list=@var{dynamic-list-file} 1451Specify the name of a dynamic list file to the linker. This is 1452typically used when creating shared libraries to specify a list of 1453global symbols whose references shouldn't be bound to the definition 1454within the shared library, or creating dynamically linked executables 1455to specify a list of symbols which should be added to the symbol table 1456in the executable. This option is only meaningful on ELF platforms 1457which support shared libraries. 1458 1459The format of the dynamic list is the same as the version node without 1460scope and node name. See @ref{VERSION} for more information. 1461 1462@kindex --dynamic-list-data 1463@item --dynamic-list-data 1464Include all global data symbols to the dynamic list. 1465 1466@kindex --dynamic-list-cpp-new 1467@item --dynamic-list-cpp-new 1468Provide the builtin dynamic list for C++ operator new and delete. It 1469is mainly useful for building shared libstdc++. 1470 1471@kindex --dynamic-list-cpp-typeinfo 1472@item --dynamic-list-cpp-typeinfo 1473Provide the builtin dynamic list for C++ runtime type identification. 1474 1475@kindex --check-sections 1476@kindex --no-check-sections 1477@item --check-sections 1478@itemx --no-check-sections 1479Asks the linker @emph{not} to check section addresses after they have 1480been assigned to see if there are any overlaps. Normally the linker will 1481perform this check, and if it finds any overlaps it will produce 1482suitable error messages. The linker does know about, and does make 1483allowances for sections in overlays. The default behaviour can be 1484restored by using the command-line switch @option{--check-sections}. 1485Section overlap is not usually checked for relocatable links. You can 1486force checking in that case by using the @option{--check-sections} 1487option. 1488 1489@kindex --copy-dt-needed-entries 1490@kindex --no-copy-dt-needed-entries 1491@item --copy-dt-needed-entries 1492@itemx --no-copy-dt-needed-entries 1493This option affects the treatment of dynamic libraries referred to 1494by DT_NEEDED tags @emph{inside} ELF dynamic libraries mentioned on the 1495command line. Normally the linker won't add a DT_NEEDED tag to the 1496output binary for each library mentioned in a DT_NEEDED tag in an 1497input dynamic library. With @option{--copy-dt-needed-entries} 1498specified on the command line however any dynamic libraries that 1499follow it will have their DT_NEEDED entries added. The default 1500behaviour can be restored with @option{--no-copy-dt-needed-entries}. 1501 1502This option also has an effect on the resolution of symbols in dynamic 1503libraries. With @option{--copy-dt-needed-entries} dynamic libraries 1504mentioned on the command line will be recursively searched, following 1505their DT_NEEDED tags to other libraries, in order to resolve symbols 1506required by the output binary. With the default setting however 1507the searching of dynamic libraries that follow it will stop with the 1508dynamic library itself. No DT_NEEDED links will be traversed to resolve 1509symbols. 1510 1511@cindex cross reference table 1512@kindex --cref 1513@item --cref 1514Output a cross reference table. If a linker map file is being 1515generated, the cross reference table is printed to the map file. 1516Otherwise, it is printed on the standard output. 1517 1518The format of the table is intentionally simple, so that it may be 1519easily processed by a script if necessary. The symbols are printed out, 1520sorted by name. For each symbol, a list of file names is given. If the 1521symbol is defined, the first file listed is the location of the 1522definition. If the symbol is defined as a common value then any files 1523where this happens appear next. Finally any files that reference the 1524symbol are listed. 1525 1526@cindex common allocation 1527@kindex --no-define-common 1528@item --no-define-common 1529This option inhibits the assignment of addresses to common symbols. 1530The script command @code{INHIBIT_COMMON_ALLOCATION} has the same effect. 1531@xref{Miscellaneous Commands}. 1532 1533The @samp{--no-define-common} option allows decoupling 1534the decision to assign addresses to Common symbols from the choice 1535of the output file type; otherwise a non-Relocatable output type 1536forces assigning addresses to Common symbols. 1537Using @samp{--no-define-common} allows Common symbols that are referenced 1538from a shared library to be assigned addresses only in the main program. 1539This eliminates the unused duplicate space in the shared library, 1540and also prevents any possible confusion over resolving to the wrong 1541duplicate when there are many dynamic modules with specialized search 1542paths for runtime symbol resolution. 1543 1544@cindex group allocation in linker script 1545@cindex section groups 1546@cindex COMDAT 1547@kindex --force-group-allocation 1548@item --force-group-allocation 1549This option causes the linker to place section group members like 1550normal input sections, and to delete the section groups. This is the 1551default behaviour for a final link but this option can be used to 1552change the behaviour of a relocatable link (@samp{-r}). The script 1553command @code{FORCE_GROUP_ALLOCATION} has the same 1554effect. @xref{Miscellaneous Commands}. 1555 1556@cindex symbols, from command line 1557@kindex --defsym=@var{symbol}=@var{exp} 1558@item --defsym=@var{symbol}=@var{expression} 1559Create a global symbol in the output file, containing the absolute 1560address given by @var{expression}. You may use this option as many 1561times as necessary to define multiple symbols in the command line. A 1562limited form of arithmetic is supported for the @var{expression} in this 1563context: you may give a hexadecimal constant or the name of an existing 1564symbol, or use @code{+} and @code{-} to add or subtract hexadecimal 1565constants or symbols. If you need more elaborate expressions, consider 1566using the linker command language from a script (@pxref{Assignments}). 1567@emph{Note:} there should be no white space between @var{symbol}, the 1568equals sign (``@key{=}''), and @var{expression}. 1569 1570@cindex demangling, from command line 1571@kindex --demangle[=@var{style}] 1572@kindex --no-demangle 1573@item --demangle[=@var{style}] 1574@itemx --no-demangle 1575These options control whether to demangle symbol names in error messages 1576and other output. When the linker is told to demangle, it tries to 1577present symbol names in a readable fashion: it strips leading 1578underscores if they are used by the object file format, and converts C++ 1579mangled symbol names into user readable names. Different compilers have 1580different mangling styles. The optional demangling style argument can be used 1581to choose an appropriate demangling style for your compiler. The linker will 1582demangle by default unless the environment variable @samp{COLLECT_NO_DEMANGLE} 1583is set. These options may be used to override the default. 1584 1585@cindex dynamic linker, from command line 1586@kindex -I@var{file} 1587@kindex --dynamic-linker=@var{file} 1588@item -I@var{file} 1589@itemx --dynamic-linker=@var{file} 1590Set the name of the dynamic linker. This is only meaningful when 1591generating dynamically linked ELF executables. The default dynamic 1592linker is normally correct; don't use this unless you know what you are 1593doing. 1594 1595@kindex --no-dynamic-linker 1596@item --no-dynamic-linker 1597When producing an executable file, omit the request for a dynamic 1598linker to be used at load-time. This is only meaningful for ELF 1599executables that contain dynamic relocations, and usually requires 1600entry point code that is capable of processing these relocations. 1601 1602@kindex --embedded-relocs 1603@item --embedded-relocs 1604This option is similar to the @option{--emit-relocs} option except 1605that the relocs are stored in a target-specific section. This option 1606is only supported by the @samp{BFIN}, @samp{CR16} and @emph{M68K} 1607targets. 1608 1609@kindex --disable-multiple-abs-defs 1610@item --disable-multiple-abs-defs 1611Do not allow multiple definitions with symbols included 1612in filename invoked by -R or --just-symbols 1613 1614@kindex --fatal-warnings 1615@kindex --no-fatal-warnings 1616@item --fatal-warnings 1617@itemx --no-fatal-warnings 1618Treat all warnings as errors. The default behaviour can be restored 1619with the option @option{--no-fatal-warnings}. 1620 1621@kindex --force-exe-suffix 1622@item --force-exe-suffix 1623Make sure that an output file has a .exe suffix. 1624 1625If a successfully built fully linked output file does not have a 1626@code{.exe} or @code{.dll} suffix, this option forces the linker to copy 1627the output file to one of the same name with a @code{.exe} suffix. This 1628option is useful when using unmodified Unix makefiles on a Microsoft 1629Windows host, since some versions of Windows won't run an image unless 1630it ends in a @code{.exe} suffix. 1631 1632@kindex --gc-sections 1633@kindex --no-gc-sections 1634@cindex garbage collection 1635@item --gc-sections 1636@itemx --no-gc-sections 1637Enable garbage collection of unused input sections. It is ignored on 1638targets that do not support this option. The default behaviour (of not 1639performing this garbage collection) can be restored by specifying 1640@samp{--no-gc-sections} on the command line. Note that garbage 1641collection for COFF and PE format targets is supported, but the 1642implementation is currently considered to be experimental. 1643 1644@samp{--gc-sections} decides which input sections are used by 1645examining symbols and relocations. The section containing the entry 1646symbol and all sections containing symbols undefined on the 1647command-line will be kept, as will sections containing symbols 1648referenced by dynamic objects. Note that when building shared 1649libraries, the linker must assume that any visible symbol is 1650referenced. Once this initial set of sections has been determined, 1651the linker recursively marks as used any section referenced by their 1652relocations. See @samp{--entry}, @samp{--undefined}, and 1653@samp{--gc-keep-exported}. 1654 1655This option can be set when doing a partial link (enabled with option 1656@samp{-r}). In this case the root of symbols kept must be explicitly 1657specified either by one of the options @samp{--entry}, 1658@samp{--undefined}, or @samp{--gc-keep-exported} or by a @code{ENTRY} 1659command in the linker script. 1660 1661@kindex --print-gc-sections 1662@kindex --no-print-gc-sections 1663@cindex garbage collection 1664@item --print-gc-sections 1665@itemx --no-print-gc-sections 1666List all sections removed by garbage collection. The listing is 1667printed on stderr. This option is only effective if garbage 1668collection has been enabled via the @samp{--gc-sections}) option. The 1669default behaviour (of not listing the sections that are removed) can 1670be restored by specifying @samp{--no-print-gc-sections} on the command 1671line. 1672 1673@kindex --gc-keep-exported 1674@cindex garbage collection 1675@item --gc-keep-exported 1676When @samp{--gc-sections} is enabled, this option prevents garbage 1677collection of unused input sections that contain global symbols having 1678default or protected visibility. This option is intended to be used for 1679executables where unreferenced sections would otherwise be garbage 1680collected regardless of the external visibility of contained symbols. 1681Note that this option has no effect when linking shared objects since 1682it is already the default behaviour. This option is only supported for 1683ELF format targets. 1684 1685@kindex --print-output-format 1686@cindex output format 1687@item --print-output-format 1688Print the name of the default output format (perhaps influenced by 1689other command-line options). This is the string that would appear 1690in an @code{OUTPUT_FORMAT} linker script command (@pxref{File Commands}). 1691 1692@kindex --print-memory-usage 1693@cindex memory usage 1694@item --print-memory-usage 1695Print used size, total size and used size of memory regions created with 1696the @ref{MEMORY} command. This is useful on embedded targets to have a 1697quick view of amount of free memory. The format of the output has one 1698headline and one line per region. It is both human readable and easily 1699parsable by tools. Here is an example of an output: 1700 1701@smallexample 1702Memory region Used Size Region Size %age Used 1703 ROM: 256 KB 1 MB 25.00% 1704 RAM: 32 B 2 GB 0.00% 1705@end smallexample 1706 1707@cindex help 1708@cindex usage 1709@kindex --help 1710@item --help 1711Print a summary of the command-line options on the standard output and exit. 1712 1713@kindex --target-help 1714@item --target-help 1715Print a summary of all target-specific options on the standard output and exit. 1716 1717@kindex -Map=@var{mapfile} 1718@item -Map=@var{mapfile} 1719Print a link map to the file @var{mapfile}. See the description of the 1720@option{-M} option, above. 1721 1722@cindex memory usage 1723@kindex --no-keep-memory 1724@item --no-keep-memory 1725@command{ld} normally optimizes for speed over memory usage by caching the 1726symbol tables of input files in memory. This option tells @command{ld} to 1727instead optimize for memory usage, by rereading the symbol tables as 1728necessary. This may be required if @command{ld} runs out of memory space 1729while linking a large executable. 1730 1731@kindex --no-undefined 1732@kindex -z defs 1733@kindex -z undefs 1734@item --no-undefined 1735@itemx -z defs 1736Report unresolved symbol references from regular object files. This 1737is done even if the linker is creating a non-symbolic shared library. 1738The switch @option{--[no-]allow-shlib-undefined} controls the 1739behaviour for reporting unresolved references found in shared 1740libraries being linked in. 1741 1742The effects of this option can be reverted by using @code{-z undefs}. 1743 1744@kindex --allow-multiple-definition 1745@kindex -z muldefs 1746@item --allow-multiple-definition 1747@itemx -z muldefs 1748Normally when a symbol is defined multiple times, the linker will 1749report a fatal error. These options allow multiple definitions and the 1750first definition will be used. 1751 1752@kindex --allow-shlib-undefined 1753@kindex --no-allow-shlib-undefined 1754@item --allow-shlib-undefined 1755@itemx --no-allow-shlib-undefined 1756Allows or disallows undefined symbols in shared libraries. 1757This switch is similar to @option{--no-undefined} except that it 1758determines the behaviour when the undefined symbols are in a 1759shared library rather than a regular object file. It does not affect 1760how undefined symbols in regular object files are handled. 1761 1762The default behaviour is to report errors for any undefined symbols 1763referenced in shared libraries if the linker is being used to create 1764an executable, but to allow them if the linker is being used to create 1765a shared library. 1766 1767The reasons for allowing undefined symbol references in shared 1768libraries specified at link time are that: 1769 1770@itemize @bullet 1771@item 1772A shared library specified at link time may not be the same as the one 1773that is available at load time, so the symbol might actually be 1774resolvable at load time. 1775@item 1776There are some operating systems, eg BeOS and HPPA, where undefined 1777symbols in shared libraries are normal. 1778 1779The BeOS kernel for example patches shared libraries at load time to 1780select whichever function is most appropriate for the current 1781architecture. This is used, for example, to dynamically select an 1782appropriate memset function. 1783@end itemize 1784 1785@kindex --no-undefined-version 1786@item --no-undefined-version 1787Normally when a symbol has an undefined version, the linker will ignore 1788it. This option disallows symbols with undefined version and a fatal error 1789will be issued instead. 1790 1791@kindex --default-symver 1792@item --default-symver 1793Create and use a default symbol version (the soname) for unversioned 1794exported symbols. 1795 1796@kindex --default-imported-symver 1797@item --default-imported-symver 1798Create and use a default symbol version (the soname) for unversioned 1799imported symbols. 1800 1801@kindex --no-warn-mismatch 1802@item --no-warn-mismatch 1803Normally @command{ld} will give an error if you try to link together input 1804files that are mismatched for some reason, perhaps because they have 1805been compiled for different processors or for different endiannesses. 1806This option tells @command{ld} that it should silently permit such possible 1807errors. This option should only be used with care, in cases when you 1808have taken some special action that ensures that the linker errors are 1809inappropriate. 1810 1811@kindex --no-warn-search-mismatch 1812@item --no-warn-search-mismatch 1813Normally @command{ld} will give a warning if it finds an incompatible 1814library during a library search. This option silences the warning. 1815 1816@kindex --no-whole-archive 1817@item --no-whole-archive 1818Turn off the effect of the @option{--whole-archive} option for subsequent 1819archive files. 1820 1821@cindex output file after errors 1822@kindex --noinhibit-exec 1823@item --noinhibit-exec 1824Retain the executable output file whenever it is still usable. 1825Normally, the linker will not produce an output file if it encounters 1826errors during the link process; it exits without writing an output file 1827when it issues any error whatsoever. 1828 1829@kindex -nostdlib 1830@item -nostdlib 1831Only search library directories explicitly specified on the 1832command line. Library directories specified in linker scripts 1833(including linker scripts specified on the command line) are ignored. 1834 1835@ifclear SingleFormat 1836@kindex --oformat=@var{output-format} 1837@item --oformat=@var{output-format} 1838@command{ld} may be configured to support more than one kind of object 1839file. If your @command{ld} is configured this way, you can use the 1840@samp{--oformat} option to specify the binary format for the output 1841object file. Even when @command{ld} is configured to support alternative 1842object formats, you don't usually need to specify this, as @command{ld} 1843should be configured to produce as a default output format the most 1844usual format on each machine. @var{output-format} is a text string, the 1845name of a particular format supported by the BFD libraries. (You can 1846list the available binary formats with @samp{objdump -i}.) The script 1847command @code{OUTPUT_FORMAT} can also specify the output format, but 1848this option overrides it. @xref{BFD}. 1849@end ifclear 1850 1851@kindex --out-implib 1852@item --out-implib @var{file} 1853Create an import library in @var{file} corresponding to the executable 1854the linker is generating (eg. a DLL or ELF program). This import 1855library (which should be called @code{*.dll.a} or @code{*.a} for DLLs) 1856may be used to link clients against the generated executable; this 1857behaviour makes it possible to skip a separate import library creation 1858step (eg. @code{dlltool} for DLLs). This option is only available for 1859the i386 PE and ELF targetted ports of the linker. 1860 1861@kindex -pie 1862@kindex --pic-executable 1863@item -pie 1864@itemx --pic-executable 1865@cindex position independent executables 1866Create a position independent executable. This is currently only supported on 1867ELF platforms. Position independent executables are similar to shared 1868libraries in that they are relocated by the dynamic linker to the virtual 1869address the OS chooses for them (which can vary between invocations). Like 1870normal dynamically linked executables they can be executed and symbols 1871defined in the executable cannot be overridden by shared libraries. 1872 1873@kindex -qmagic 1874@item -qmagic 1875This option is ignored for Linux compatibility. 1876 1877@kindex -Qy 1878@item -Qy 1879This option is ignored for SVR4 compatibility. 1880 1881@kindex --relax 1882@cindex synthesizing linker 1883@cindex relaxing addressing modes 1884@cindex --no-relax 1885@item --relax 1886@itemx --no-relax 1887An option with machine dependent effects. 1888@ifset GENERIC 1889This option is only supported on a few targets. 1890@end ifset 1891@ifset H8300 1892@xref{H8/300,,@command{ld} and the H8/300}. 1893@end ifset 1894@ifset XTENSA 1895@xref{Xtensa,, @command{ld} and Xtensa Processors}. 1896@end ifset 1897@ifset M68HC11 1898@xref{M68HC11/68HC12,,@command{ld} and the 68HC11 and 68HC12}. 1899@end ifset 1900@ifset NIOSII 1901@xref{Nios II,,@command{ld} and the Altera Nios II}. 1902@end ifset 1903@ifset POWERPC 1904@xref{PowerPC ELF32,,@command{ld} and PowerPC 32-bit ELF Support}. 1905@end ifset 1906 1907On some platforms the @samp{--relax} option performs target-specific, 1908global optimizations that become possible when the linker resolves 1909addressing in the program, such as relaxing address modes, 1910synthesizing new instructions, selecting shorter version of current 1911instructions, and combining constant values. 1912 1913On some platforms these link time global optimizations may make symbolic 1914debugging of the resulting executable impossible. 1915@ifset GENERIC 1916This is known to be the case for the Matsushita MN10200 and MN10300 1917family of processors. 1918@end ifset 1919 1920@ifset GENERIC 1921On platforms where this is not supported, @samp{--relax} is accepted, 1922but ignored. 1923@end ifset 1924 1925On platforms where @samp{--relax} is accepted the option 1926@samp{--no-relax} can be used to disable the feature. 1927 1928@cindex retaining specified symbols 1929@cindex stripping all but some symbols 1930@cindex symbols, retaining selectively 1931@kindex --retain-symbols-file=@var{filename} 1932@item --retain-symbols-file=@var{filename} 1933Retain @emph{only} the symbols listed in the file @var{filename}, 1934discarding all others. @var{filename} is simply a flat file, with one 1935symbol name per line. This option is especially useful in environments 1936@ifset GENERIC 1937(such as VxWorks) 1938@end ifset 1939where a large global symbol table is accumulated gradually, to conserve 1940run-time memory. 1941 1942@samp{--retain-symbols-file} does @emph{not} discard undefined symbols, 1943or symbols needed for relocations. 1944 1945You may only specify @samp{--retain-symbols-file} once in the command 1946line. It overrides @samp{-s} and @samp{-S}. 1947 1948@ifset GENERIC 1949@item -rpath=@var{dir} 1950@cindex runtime library search path 1951@kindex -rpath=@var{dir} 1952Add a directory to the runtime library search path. This is used when 1953linking an ELF executable with shared objects. All @option{-rpath} 1954arguments are concatenated and passed to the runtime linker, which uses 1955them to locate shared objects at runtime. 1956 1957The @option{-rpath} option is also used when locating shared objects which 1958are needed by shared objects explicitly included in the link; see the 1959description of the @option{-rpath-link} option. Searching @option{-rpath} 1960in this way is only supported by native linkers and cross linkers which 1961have been configured with the @option{--with-sysroot} option. 1962 1963If @option{-rpath} is not used when linking an ELF executable, the 1964contents of the environment variable @code{LD_RUN_PATH} will be used if it 1965is defined. 1966 1967The @option{-rpath} option may also be used on SunOS. By default, on 1968SunOS, the linker will form a runtime search path out of all the 1969@option{-L} options it is given. If a @option{-rpath} option is used, the 1970runtime search path will be formed exclusively using the @option{-rpath} 1971options, ignoring the @option{-L} options. This can be useful when using 1972gcc, which adds many @option{-L} options which may be on NFS mounted 1973file systems. 1974 1975For compatibility with other ELF linkers, if the @option{-R} option is 1976followed by a directory name, rather than a file name, it is treated as 1977the @option{-rpath} option. 1978@end ifset 1979 1980@ifset GENERIC 1981@cindex link-time runtime library search path 1982@kindex -rpath-link=@var{dir} 1983@item -rpath-link=@var{dir} 1984When using ELF or SunOS, one shared library may require another. This 1985happens when an @code{ld -shared} link includes a shared library as one 1986of the input files. 1987 1988When the linker encounters such a dependency when doing a non-shared, 1989non-relocatable link, it will automatically try to locate the required 1990shared library and include it in the link, if it is not included 1991explicitly. In such a case, the @option{-rpath-link} option 1992specifies the first set of directories to search. The 1993@option{-rpath-link} option may specify a sequence of directory names 1994either by specifying a list of names separated by colons, or by 1995appearing multiple times. 1996 1997The tokens @var{$ORIGIN} and @var{$LIB} can appear in these search 1998directories. They will be replaced by the full path to the directory 1999containing the program or shared object in the case of @var{$ORIGIN} 2000and either @samp{lib} - for 32-bit binaries - or @samp{lib64} - for 200164-bit binaries - in the case of @var{$LIB}. 2002 2003The alternative form of these tokens - @var{$@{ORIGIN@}} and 2004@var{$@{LIB@}} can also be used. The token @var{$PLATFORM} is not 2005supported. 2006 2007This option should be used with caution as it overrides the search path 2008that may have been hard compiled into a shared library. In such a case it 2009is possible to use unintentionally a different search path than the 2010runtime linker would do. 2011 2012The linker uses the following search paths to locate required shared 2013libraries: 2014@enumerate 2015@item 2016Any directories specified by @option{-rpath-link} options. 2017@item 2018Any directories specified by @option{-rpath} options. The difference 2019between @option{-rpath} and @option{-rpath-link} is that directories 2020specified by @option{-rpath} options are included in the executable and 2021used at runtime, whereas the @option{-rpath-link} option is only effective 2022at link time. Searching @option{-rpath} in this way is only supported 2023by native linkers and cross linkers which have been configured with 2024the @option{--with-sysroot} option. 2025@item 2026On an ELF system, for native linkers, if the @option{-rpath} and 2027@option{-rpath-link} options were not used, search the contents of the 2028environment variable @code{LD_RUN_PATH}. 2029@item 2030On SunOS, if the @option{-rpath} option was not used, search any 2031directories specified using @option{-L} options. 2032@item 2033For a native linker, search the contents of the environment 2034variable @code{LD_LIBRARY_PATH}. 2035@item 2036For a native ELF linker, the directories in @code{DT_RUNPATH} or 2037@code{DT_RPATH} of a shared library are searched for shared 2038libraries needed by it. The @code{DT_RPATH} entries are ignored if 2039@code{DT_RUNPATH} entries exist. 2040@item 2041The default directories, normally @file{/lib} and @file{/usr/lib}. 2042@item 2043For a native linker on an ELF system, if the file @file{/etc/ld.so.conf} 2044exists, the list of directories found in that file. 2045@end enumerate 2046 2047If the required shared library is not found, the linker will issue a 2048warning and continue with the link. 2049@end ifset 2050 2051@kindex -shared 2052@kindex -Bshareable 2053@item -shared 2054@itemx -Bshareable 2055@cindex shared libraries 2056Create a shared library. This is currently only supported on ELF, XCOFF 2057and SunOS platforms. On SunOS, the linker will automatically create a 2058shared library if the @option{-e} option is not used and there are 2059undefined symbols in the link. 2060 2061@kindex --sort-common 2062@item --sort-common 2063@itemx --sort-common=ascending 2064@itemx --sort-common=descending 2065This option tells @command{ld} to sort the common symbols by alignment in 2066ascending or descending order when it places them in the appropriate output 2067sections. The symbol alignments considered are sixteen-byte or larger, 2068eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps 2069between symbols due to alignment constraints. If no sorting order is 2070specified, then descending order is assumed. 2071 2072@kindex --sort-section=name 2073@item --sort-section=name 2074This option will apply @code{SORT_BY_NAME} to all wildcard section 2075patterns in the linker script. 2076 2077@kindex --sort-section=alignment 2078@item --sort-section=alignment 2079This option will apply @code{SORT_BY_ALIGNMENT} to all wildcard section 2080patterns in the linker script. 2081 2082@kindex --spare-dynamic-tags 2083@item --spare-dynamic-tags=@var{count} 2084This option specifies the number of empty slots to leave in the 2085.dynamic section of ELF shared objects. Empty slots may be needed by 2086post processing tools, such as the prelinker. The default is 5. 2087 2088@kindex --split-by-file 2089@item --split-by-file[=@var{size}] 2090Similar to @option{--split-by-reloc} but creates a new output section for 2091each input file when @var{size} is reached. @var{size} defaults to a 2092size of 1 if not given. 2093 2094@kindex --split-by-reloc 2095@item --split-by-reloc[=@var{count}] 2096Tries to creates extra sections in the output file so that no single 2097output section in the file contains more than @var{count} relocations. 2098This is useful when generating huge relocatable files for downloading into 2099certain real time kernels with the COFF object file format; since COFF 2100cannot represent more than 65535 relocations in a single section. Note 2101that this will fail to work with object file formats which do not 2102support arbitrary sections. The linker will not split up individual 2103input sections for redistribution, so if a single input section contains 2104more than @var{count} relocations one output section will contain that 2105many relocations. @var{count} defaults to a value of 32768. 2106 2107@kindex --stats 2108@item --stats 2109Compute and display statistics about the operation of the linker, such 2110as execution time and memory usage. 2111 2112@kindex --sysroot=@var{directory} 2113@item --sysroot=@var{directory} 2114Use @var{directory} as the location of the sysroot, overriding the 2115configure-time default. This option is only supported by linkers 2116that were configured using @option{--with-sysroot}. 2117 2118@kindex --task-link 2119@item --task-link 2120This is used by COFF/PE based targets to create a task-linked object 2121file where all of the global symbols have been converted to statics. 2122 2123@kindex --traditional-format 2124@cindex traditional format 2125@item --traditional-format 2126For some targets, the output of @command{ld} is different in some ways from 2127the output of some existing linker. This switch requests @command{ld} to 2128use the traditional format instead. 2129 2130@cindex dbx 2131For example, on SunOS, @command{ld} combines duplicate entries in the 2132symbol string table. This can reduce the size of an output file with 2133full debugging information by over 30 percent. Unfortunately, the SunOS 2134@code{dbx} program can not read the resulting program (@code{gdb} has no 2135trouble). The @samp{--traditional-format} switch tells @command{ld} to not 2136combine duplicate entries. 2137 2138@kindex --section-start=@var{sectionname}=@var{org} 2139@item --section-start=@var{sectionname}=@var{org} 2140Locate a section in the output file at the absolute 2141address given by @var{org}. You may use this option as many 2142times as necessary to locate multiple sections in the command 2143line. 2144@var{org} must be a single hexadecimal integer; 2145for compatibility with other linkers, you may omit the leading 2146@samp{0x} usually associated with hexadecimal values. @emph{Note:} there 2147should be no white space between @var{sectionname}, the equals 2148sign (``@key{=}''), and @var{org}. 2149 2150@kindex -Tbss=@var{org} 2151@kindex -Tdata=@var{org} 2152@kindex -Ttext=@var{org} 2153@cindex segment origins, cmd line 2154@item -Tbss=@var{org} 2155@itemx -Tdata=@var{org} 2156@itemx -Ttext=@var{org} 2157Same as @option{--section-start}, with @code{.bss}, @code{.data} or 2158@code{.text} as the @var{sectionname}. 2159 2160@kindex -Ttext-segment=@var{org} 2161@item -Ttext-segment=@var{org} 2162@cindex text segment origin, cmd line 2163When creating an ELF executable, it will set the address of the first 2164byte of the text segment. 2165 2166@kindex -Trodata-segment=@var{org} 2167@item -Trodata-segment=@var{org} 2168@cindex rodata segment origin, cmd line 2169When creating an ELF executable or shared object for a target where 2170the read-only data is in its own segment separate from the executable 2171text, it will set the address of the first byte of the read-only data segment. 2172 2173@kindex -Tldata-segment=@var{org} 2174@item -Tldata-segment=@var{org} 2175@cindex ldata segment origin, cmd line 2176When creating an ELF executable or shared object for x86-64 medium memory 2177model, it will set the address of the first byte of the ldata segment. 2178 2179@kindex --unresolved-symbols 2180@item --unresolved-symbols=@var{method} 2181Determine how to handle unresolved symbols. There are four possible 2182values for @samp{method}: 2183 2184@table @samp 2185@item ignore-all 2186Do not report any unresolved symbols. 2187 2188@item report-all 2189Report all unresolved symbols. This is the default. 2190 2191@item ignore-in-object-files 2192Report unresolved symbols that are contained in shared libraries, but 2193ignore them if they come from regular object files. 2194 2195@item ignore-in-shared-libs 2196Report unresolved symbols that come from regular object files, but 2197ignore them if they come from shared libraries. This can be useful 2198when creating a dynamic binary and it is known that all the shared 2199libraries that it should be referencing are included on the linker's 2200command line. 2201@end table 2202 2203The behaviour for shared libraries on their own can also be controlled 2204by the @option{--[no-]allow-shlib-undefined} option. 2205 2206Normally the linker will generate an error message for each reported 2207unresolved symbol but the option @option{--warn-unresolved-symbols} 2208can change this to a warning. 2209 2210@kindex --verbose[=@var{NUMBER}] 2211@cindex verbose[=@var{NUMBER}] 2212@item --dll-verbose 2213@itemx --verbose[=@var{NUMBER}] 2214Display the version number for @command{ld} and list the linker emulations 2215supported. Display which input files can and cannot be opened. Display 2216the linker script being used by the linker. If the optional @var{NUMBER} 2217argument > 1, plugin symbol status will also be displayed. 2218 2219@kindex --version-script=@var{version-scriptfile} 2220@cindex version script, symbol versions 2221@item --version-script=@var{version-scriptfile} 2222Specify the name of a version script to the linker. This is typically 2223used when creating shared libraries to specify additional information 2224about the version hierarchy for the library being created. This option 2225is only fully supported on ELF platforms which support shared libraries; 2226see @ref{VERSION}. It is partially supported on PE platforms, which can 2227use version scripts to filter symbol visibility in auto-export mode: any 2228symbols marked @samp{local} in the version script will not be exported. 2229@xref{WIN32}. 2230 2231@kindex --warn-common 2232@cindex warnings, on combining symbols 2233@cindex combining symbols, warnings on 2234@item --warn-common 2235Warn when a common symbol is combined with another common symbol or with 2236a symbol definition. Unix linkers allow this somewhat sloppy practice, 2237but linkers on some other operating systems do not. This option allows 2238you to find potential problems from combining global symbols. 2239Unfortunately, some C libraries use this practice, so you may get some 2240warnings about symbols in the libraries as well as in your programs. 2241 2242There are three kinds of global symbols, illustrated here by C examples: 2243 2244@table @samp 2245@item int i = 1; 2246A definition, which goes in the initialized data section of the output 2247file. 2248 2249@item extern int i; 2250An undefined reference, which does not allocate space. 2251There must be either a definition or a common symbol for the 2252variable somewhere. 2253 2254@item int i; 2255A common symbol. If there are only (one or more) common symbols for a 2256variable, it goes in the uninitialized data area of the output file. 2257The linker merges multiple common symbols for the same variable into a 2258single symbol. If they are of different sizes, it picks the largest 2259size. The linker turns a common symbol into a declaration, if there is 2260a definition of the same variable. 2261@end table 2262 2263The @samp{--warn-common} option can produce five kinds of warnings. 2264Each warning consists of a pair of lines: the first describes the symbol 2265just encountered, and the second describes the previous symbol 2266encountered with the same name. One or both of the two symbols will be 2267a common symbol. 2268 2269@enumerate 2270@item 2271Turning a common symbol into a reference, because there is already a 2272definition for the symbol. 2273@smallexample 2274@var{file}(@var{section}): warning: common of `@var{symbol}' 2275 overridden by definition 2276@var{file}(@var{section}): warning: defined here 2277@end smallexample 2278 2279@item 2280Turning a common symbol into a reference, because a later definition for 2281the symbol is encountered. This is the same as the previous case, 2282except that the symbols are encountered in a different order. 2283@smallexample 2284@var{file}(@var{section}): warning: definition of `@var{symbol}' 2285 overriding common 2286@var{file}(@var{section}): warning: common is here 2287@end smallexample 2288 2289@item 2290Merging a common symbol with a previous same-sized common symbol. 2291@smallexample 2292@var{file}(@var{section}): warning: multiple common 2293 of `@var{symbol}' 2294@var{file}(@var{section}): warning: previous common is here 2295@end smallexample 2296 2297@item 2298Merging a common symbol with a previous larger common symbol. 2299@smallexample 2300@var{file}(@var{section}): warning: common of `@var{symbol}' 2301 overridden by larger common 2302@var{file}(@var{section}): warning: larger common is here 2303@end smallexample 2304 2305@item 2306Merging a common symbol with a previous smaller common symbol. This is 2307the same as the previous case, except that the symbols are 2308encountered in a different order. 2309@smallexample 2310@var{file}(@var{section}): warning: common of `@var{symbol}' 2311 overriding smaller common 2312@var{file}(@var{section}): warning: smaller common is here 2313@end smallexample 2314@end enumerate 2315 2316@kindex --warn-constructors 2317@item --warn-constructors 2318Warn if any global constructors are used. This is only useful for a few 2319object file formats. For formats like COFF or ELF, the linker can not 2320detect the use of global constructors. 2321 2322@kindex --warn-multiple-gp 2323@item --warn-multiple-gp 2324Warn if multiple global pointer values are required in the output file. 2325This is only meaningful for certain processors, such as the Alpha. 2326Specifically, some processors put large-valued constants in a special 2327section. A special register (the global pointer) points into the middle 2328of this section, so that constants can be loaded efficiently via a 2329base-register relative addressing mode. Since the offset in 2330base-register relative mode is fixed and relatively small (e.g., 16 2331bits), this limits the maximum size of the constant pool. Thus, in 2332large programs, it is often necessary to use multiple global pointer 2333values in order to be able to address all possible constants. This 2334option causes a warning to be issued whenever this case occurs. 2335 2336@kindex --warn-once 2337@cindex warnings, on undefined symbols 2338@cindex undefined symbols, warnings on 2339@item --warn-once 2340Only warn once for each undefined symbol, rather than once per module 2341which refers to it. 2342 2343@kindex --warn-section-align 2344@cindex warnings, on section alignment 2345@cindex section alignment, warnings on 2346@item --warn-section-align 2347Warn if the address of an output section is changed because of 2348alignment. Typically, the alignment will be set by an input section. 2349The address will only be changed if it not explicitly specified; that 2350is, if the @code{SECTIONS} command does not specify a start address for 2351the section (@pxref{SECTIONS}). 2352 2353@kindex --warn-shared-textrel 2354@item --warn-shared-textrel 2355Warn if the linker adds a DT_TEXTREL to a shared object. 2356 2357@kindex --warn-alternate-em 2358@item --warn-alternate-em 2359Warn if an object has alternate ELF machine code. 2360 2361@kindex --warn-unresolved-symbols 2362@item --warn-unresolved-symbols 2363If the linker is going to report an unresolved symbol (see the option 2364@option{--unresolved-symbols}) it will normally generate an error. 2365This option makes it generate a warning instead. 2366 2367@kindex --error-unresolved-symbols 2368@item --error-unresolved-symbols 2369This restores the linker's default behaviour of generating errors when 2370it is reporting unresolved symbols. 2371 2372@kindex --whole-archive 2373@cindex including an entire archive 2374@item --whole-archive 2375For each archive mentioned on the command line after the 2376@option{--whole-archive} option, include every object file in the archive 2377in the link, rather than searching the archive for the required object 2378files. This is normally used to turn an archive file into a shared 2379library, forcing every object to be included in the resulting shared 2380library. This option may be used more than once. 2381 2382Two notes when using this option from gcc: First, gcc doesn't know 2383about this option, so you have to use @option{-Wl,-whole-archive}. 2384Second, don't forget to use @option{-Wl,-no-whole-archive} after your 2385list of archives, because gcc will add its own list of archives to 2386your link and you may not want this flag to affect those as well. 2387 2388@kindex --wrap=@var{symbol} 2389@item --wrap=@var{symbol} 2390Use a wrapper function for @var{symbol}. Any undefined reference to 2391@var{symbol} will be resolved to @code{__wrap_@var{symbol}}. Any 2392undefined reference to @code{__real_@var{symbol}} will be resolved to 2393@var{symbol}. 2394 2395This can be used to provide a wrapper for a system function. The 2396wrapper function should be called @code{__wrap_@var{symbol}}. If it 2397wishes to call the system function, it should call 2398@code{__real_@var{symbol}}. 2399 2400Here is a trivial example: 2401 2402@smallexample 2403void * 2404__wrap_malloc (size_t c) 2405@{ 2406 printf ("malloc called with %zu\n", c); 2407 return __real_malloc (c); 2408@} 2409@end smallexample 2410 2411If you link other code with this file using @option{--wrap malloc}, then 2412all calls to @code{malloc} will call the function @code{__wrap_malloc} 2413instead. The call to @code{__real_malloc} in @code{__wrap_malloc} will 2414call the real @code{malloc} function. 2415 2416You may wish to provide a @code{__real_malloc} function as well, so that 2417links without the @option{--wrap} option will succeed. If you do this, 2418you should not put the definition of @code{__real_malloc} in the same 2419file as @code{__wrap_malloc}; if you do, the assembler may resolve the 2420call before the linker has a chance to wrap it to @code{malloc}. 2421 2422Only undefined references are replaced by the linker. So, translation unit 2423internal references to @var{symbol} are not resolved to 2424@code{__wrap_@var{symbol}}. In the next example, the call to @code{f} in 2425@code{g} is not resolved to @code{__wrap_f}. 2426 2427@smallexample 2428int 2429f (void) 2430@{ 2431 return 123; 2432@} 2433 2434int 2435g (void) 2436@{ 2437 return f(); 2438@} 2439@end smallexample 2440 2441@kindex --eh-frame-hdr 2442@kindex --no-eh-frame-hdr 2443@item --eh-frame-hdr 2444@itemx --no-eh-frame-hdr 2445Request (@option{--eh-frame-hdr}) or suppress 2446(@option{--no-eh-frame-hdr}) the creation of @code{.eh_frame_hdr} 2447section and ELF @code{PT_GNU_EH_FRAME} segment header. 2448 2449@kindex --ld-generated-unwind-info 2450@item --no-ld-generated-unwind-info 2451Request creation of @code{.eh_frame} unwind info for linker 2452generated code sections like PLT. This option is on by default 2453if linker generated unwind info is supported. 2454 2455@kindex --enable-new-dtags 2456@kindex --disable-new-dtags 2457@item --enable-new-dtags 2458@itemx --disable-new-dtags 2459This linker can create the new dynamic tags in ELF. But the older ELF 2460systems may not understand them. If you specify 2461@option{--enable-new-dtags}, the new dynamic tags will be created as needed 2462and older dynamic tags will be omitted. 2463If you specify @option{--disable-new-dtags}, no new dynamic tags will be 2464created. By default, the new dynamic tags are not created. Note that 2465those options are only available for ELF systems. 2466 2467@kindex --hash-size=@var{number} 2468@item --hash-size=@var{number} 2469Set the default size of the linker's hash tables to a prime number 2470close to @var{number}. Increasing this value can reduce the length of 2471time it takes the linker to perform its tasks, at the expense of 2472increasing the linker's memory requirements. Similarly reducing this 2473value can reduce the memory requirements at the expense of speed. 2474 2475@kindex --hash-style=@var{style} 2476@item --hash-style=@var{style} 2477Set the type of linker's hash table(s). @var{style} can be either 2478@code{sysv} for classic ELF @code{.hash} section, @code{gnu} for 2479new style GNU @code{.gnu.hash} section or @code{both} for both 2480the classic ELF @code{.hash} and new style GNU @code{.gnu.hash} 2481hash tables. The default depends upon how the linker was configured, 2482but for most Linux based systems it will be @code{both}. 2483 2484@kindex --compress-debug-sections=none 2485@kindex --compress-debug-sections=zlib 2486@kindex --compress-debug-sections=zlib-gnu 2487@kindex --compress-debug-sections=zlib-gabi 2488@item --compress-debug-sections=none 2489@itemx --compress-debug-sections=zlib 2490@itemx --compress-debug-sections=zlib-gnu 2491@itemx --compress-debug-sections=zlib-gabi 2492On ELF platforms, these options control how DWARF debug sections are 2493compressed using zlib. 2494 2495@option{--compress-debug-sections=none} doesn't compress DWARF debug 2496sections. @option{--compress-debug-sections=zlib-gnu} compresses 2497DWARF debug sections and renames them to begin with @samp{.zdebug} 2498instead of @samp{.debug}. @option{--compress-debug-sections=zlib-gabi} 2499also compresses DWARF debug sections, but rather than renaming them it 2500sets the SHF_COMPRESSED flag in the sections' headers. 2501 2502The @option{--compress-debug-sections=zlib} option is an alias for 2503@option{--compress-debug-sections=zlib-gabi}. 2504 2505Note that this option overrides any compression in input debug 2506sections, so if a binary is linked with @option{--compress-debug-sections=none} 2507for example, then any compressed debug sections in input files will be 2508uncompressed before they are copied into the output binary. 2509 2510The default compression behaviour varies depending upon the target 2511involved and the configure options used to build the toolchain. The 2512default can be determined by examining the output from the linker's 2513@option{--help} option. 2514 2515@kindex --reduce-memory-overheads 2516@item --reduce-memory-overheads 2517This option reduces memory requirements at ld runtime, at the expense of 2518linking speed. This was introduced to select the old O(n^2) algorithm 2519for link map file generation, rather than the new O(n) algorithm which uses 2520about 40% more memory for symbol storage. 2521 2522Another effect of the switch is to set the default hash table size to 25231021, which again saves memory at the cost of lengthening the linker's 2524run time. This is not done however if the @option{--hash-size} switch 2525has been used. 2526 2527The @option{--reduce-memory-overheads} switch may be also be used to 2528enable other tradeoffs in future versions of the linker. 2529 2530@kindex --build-id 2531@kindex --build-id=@var{style} 2532@item --build-id 2533@itemx --build-id=@var{style} 2534Request the creation of a @code{.note.gnu.build-id} ELF note section 2535or a @code{.buildid} COFF section. The contents of the note are 2536unique bits identifying this linked file. @var{style} can be 2537@code{uuid} to use 128 random bits, @code{sha1} to use a 160-bit 2538@sc{SHA1} hash on the normative parts of the output contents, 2539@code{md5} to use a 128-bit @sc{MD5} hash on the normative parts of 2540the output contents, or @code{0x@var{hexstring}} to use a chosen bit 2541string specified as an even number of hexadecimal digits (@code{-} and 2542@code{:} characters between digit pairs are ignored). If @var{style} 2543is omitted, @code{sha1} is used. 2544 2545The @code{md5} and @code{sha1} styles produces an identifier 2546that is always the same in an identical output file, but will be 2547unique among all nonidentical output files. It is not intended 2548to be compared as a checksum for the file's contents. A linked 2549file may be changed later by other tools, but the build ID bit 2550string identifying the original linked file does not change. 2551 2552Passing @code{none} for @var{style} disables the setting from any 2553@code{--build-id} options earlier on the command line. 2554@end table 2555 2556@c man end 2557 2558@subsection Options Specific to i386 PE Targets 2559 2560@c man begin OPTIONS 2561 2562The i386 PE linker supports the @option{-shared} option, which causes 2563the output to be a dynamically linked library (DLL) instead of a 2564normal executable. You should name the output @code{*.dll} when you 2565use this option. In addition, the linker fully supports the standard 2566@code{*.def} files, which may be specified on the linker command line 2567like an object file (in fact, it should precede archives it exports 2568symbols from, to ensure that they get linked in, just like a normal 2569object file). 2570 2571In addition to the options common to all targets, the i386 PE linker 2572support additional command-line options that are specific to the i386 2573PE target. Options that take values may be separated from their 2574values by either a space or an equals sign. 2575 2576@table @gcctabopt 2577 2578@kindex --add-stdcall-alias 2579@item --add-stdcall-alias 2580If given, symbols with a stdcall suffix (@@@var{nn}) will be exported 2581as-is and also with the suffix stripped. 2582[This option is specific to the i386 PE targeted port of the linker] 2583 2584@kindex --base-file 2585@item --base-file @var{file} 2586Use @var{file} as the name of a file in which to save the base 2587addresses of all the relocations needed for generating DLLs with 2588@file{dlltool}. 2589[This is an i386 PE specific option] 2590 2591@kindex --dll 2592@item --dll 2593Create a DLL instead of a regular executable. You may also use 2594@option{-shared} or specify a @code{LIBRARY} in a given @code{.def} 2595file. 2596[This option is specific to the i386 PE targeted port of the linker] 2597 2598@kindex --enable-long-section-names 2599@kindex --disable-long-section-names 2600@item --enable-long-section-names 2601@itemx --disable-long-section-names 2602The PE variants of the COFF object format add an extension that permits 2603the use of section names longer than eight characters, the normal limit 2604for COFF. By default, these names are only allowed in object files, as 2605fully-linked executable images do not carry the COFF string table required 2606to support the longer names. As a GNU extension, it is possible to 2607allow their use in executable images as well, or to (probably pointlessly!) 2608disallow it in object files, by using these two options. Executable images 2609generated with these long section names are slightly non-standard, carrying 2610as they do a string table, and may generate confusing output when examined 2611with non-GNU PE-aware tools, such as file viewers and dumpers. However, 2612GDB relies on the use of PE long section names to find Dwarf-2 debug 2613information sections in an executable image at runtime, and so if neither 2614option is specified on the command-line, @command{ld} will enable long 2615section names, overriding the default and technically correct behaviour, 2616when it finds the presence of debug information while linking an executable 2617image and not stripping symbols. 2618[This option is valid for all PE targeted ports of the linker] 2619 2620@kindex --enable-stdcall-fixup 2621@kindex --disable-stdcall-fixup 2622@item --enable-stdcall-fixup 2623@itemx --disable-stdcall-fixup 2624If the link finds a symbol that it cannot resolve, it will attempt to 2625do ``fuzzy linking'' by looking for another defined symbol that differs 2626only in the format of the symbol name (cdecl vs stdcall) and will 2627resolve that symbol by linking to the match. For example, the 2628undefined symbol @code{_foo} might be linked to the function 2629@code{_foo@@12}, or the undefined symbol @code{_bar@@16} might be linked 2630to the function @code{_bar}. When the linker does this, it prints a 2631warning, since it normally should have failed to link, but sometimes 2632import libraries generated from third-party dlls may need this feature 2633to be usable. If you specify @option{--enable-stdcall-fixup}, this 2634feature is fully enabled and warnings are not printed. If you specify 2635@option{--disable-stdcall-fixup}, this feature is disabled and such 2636mismatches are considered to be errors. 2637[This option is specific to the i386 PE targeted port of the linker] 2638 2639@kindex --leading-underscore 2640@kindex --no-leading-underscore 2641@item --leading-underscore 2642@itemx --no-leading-underscore 2643For most targets default symbol-prefix is an underscore and is defined 2644in target's description. By this option it is possible to 2645disable/enable the default underscore symbol-prefix. 2646 2647@cindex DLLs, creating 2648@kindex --export-all-symbols 2649@item --export-all-symbols 2650If given, all global symbols in the objects used to build a DLL will 2651be exported by the DLL. Note that this is the default if there 2652otherwise wouldn't be any exported symbols. When symbols are 2653explicitly exported via DEF files or implicitly exported via function 2654attributes, the default is to not export anything else unless this 2655option is given. Note that the symbols @code{DllMain@@12}, 2656@code{DllEntryPoint@@0}, @code{DllMainCRTStartup@@12}, and 2657@code{impure_ptr} will not be automatically 2658exported. Also, symbols imported from other DLLs will not be 2659re-exported, nor will symbols specifying the DLL's internal layout 2660such as those beginning with @code{_head_} or ending with 2661@code{_iname}. In addition, no symbols from @code{libgcc}, 2662@code{libstd++}, @code{libmingw32}, or @code{crtX.o} will be exported. 2663Symbols whose names begin with @code{__rtti_} or @code{__builtin_} will 2664not be exported, to help with C++ DLLs. Finally, there is an 2665extensive list of cygwin-private symbols that are not exported 2666(obviously, this applies on when building DLLs for cygwin targets). 2667These cygwin-excludes are: @code{_cygwin_dll_entry@@12}, 2668@code{_cygwin_crt0_common@@8}, @code{_cygwin_noncygwin_dll_entry@@12}, 2669@code{_fmode}, @code{_impure_ptr}, @code{cygwin_attach_dll}, 2670@code{cygwin_premain0}, @code{cygwin_premain1}, @code{cygwin_premain2}, 2671@code{cygwin_premain3}, and @code{environ}. 2672[This option is specific to the i386 PE targeted port of the linker] 2673 2674@kindex --exclude-symbols 2675@item --exclude-symbols @var{symbol},@var{symbol},... 2676Specifies a list of symbols which should not be automatically 2677exported. The symbol names may be delimited by commas or colons. 2678[This option is specific to the i386 PE targeted port of the linker] 2679 2680@kindex --exclude-all-symbols 2681@item --exclude-all-symbols 2682Specifies no symbols should be automatically exported. 2683[This option is specific to the i386 PE targeted port of the linker] 2684 2685@kindex --file-alignment 2686@item --file-alignment 2687Specify the file alignment. Sections in the file will always begin at 2688file offsets which are multiples of this number. This defaults to 2689512. 2690[This option is specific to the i386 PE targeted port of the linker] 2691 2692@cindex heap size 2693@kindex --heap 2694@item --heap @var{reserve} 2695@itemx --heap @var{reserve},@var{commit} 2696Specify the number of bytes of memory to reserve (and optionally commit) 2697to be used as heap for this program. The default is 1MB reserved, 4K 2698committed. 2699[This option is specific to the i386 PE targeted port of the linker] 2700 2701@cindex image base 2702@kindex --image-base 2703@item --image-base @var{value} 2704Use @var{value} as the base address of your program or dll. This is 2705the lowest memory location that will be used when your program or dll 2706is loaded. To reduce the need to relocate and improve performance of 2707your dlls, each should have a unique base address and not overlap any 2708other dlls. The default is 0x400000 for executables, and 0x10000000 2709for dlls. 2710[This option is specific to the i386 PE targeted port of the linker] 2711 2712@kindex --kill-at 2713@item --kill-at 2714If given, the stdcall suffixes (@@@var{nn}) will be stripped from 2715symbols before they are exported. 2716[This option is specific to the i386 PE targeted port of the linker] 2717 2718@kindex --large-address-aware 2719@item --large-address-aware 2720If given, the appropriate bit in the ``Characteristics'' field of the COFF 2721header is set to indicate that this executable supports virtual addresses 2722greater than 2 gigabytes. This should be used in conjunction with the /3GB 2723or /USERVA=@var{value} megabytes switch in the ``[operating systems]'' 2724section of the BOOT.INI. Otherwise, this bit has no effect. 2725[This option is specific to PE targeted ports of the linker] 2726 2727@kindex --disable-large-address-aware 2728@item --disable-large-address-aware 2729Reverts the effect of a previous @samp{--large-address-aware} option. 2730This is useful if @samp{--large-address-aware} is always set by the compiler 2731driver (e.g. Cygwin gcc) and the executable does not support virtual 2732addresses greater than 2 gigabytes. 2733[This option is specific to PE targeted ports of the linker] 2734 2735@kindex --major-image-version 2736@item --major-image-version @var{value} 2737Sets the major number of the ``image version''. Defaults to 1. 2738[This option is specific to the i386 PE targeted port of the linker] 2739 2740@kindex --major-os-version 2741@item --major-os-version @var{value} 2742Sets the major number of the ``os version''. Defaults to 4. 2743[This option is specific to the i386 PE targeted port of the linker] 2744 2745@kindex --major-subsystem-version 2746@item --major-subsystem-version @var{value} 2747Sets the major number of the ``subsystem version''. Defaults to 4. 2748[This option is specific to the i386 PE targeted port of the linker] 2749 2750@kindex --minor-image-version 2751@item --minor-image-version @var{value} 2752Sets the minor number of the ``image version''. Defaults to 0. 2753[This option is specific to the i386 PE targeted port of the linker] 2754 2755@kindex --minor-os-version 2756@item --minor-os-version @var{value} 2757Sets the minor number of the ``os version''. Defaults to 0. 2758[This option is specific to the i386 PE targeted port of the linker] 2759 2760@kindex --minor-subsystem-version 2761@item --minor-subsystem-version @var{value} 2762Sets the minor number of the ``subsystem version''. Defaults to 0. 2763[This option is specific to the i386 PE targeted port of the linker] 2764 2765@cindex DEF files, creating 2766@cindex DLLs, creating 2767@kindex --output-def 2768@item --output-def @var{file} 2769The linker will create the file @var{file} which will contain a DEF 2770file corresponding to the DLL the linker is generating. This DEF file 2771(which should be called @code{*.def}) may be used to create an import 2772library with @code{dlltool} or may be used as a reference to 2773automatically or implicitly exported symbols. 2774[This option is specific to the i386 PE targeted port of the linker] 2775 2776@cindex DLLs, creating 2777@kindex --enable-auto-image-base 2778@item --enable-auto-image-base 2779@itemx --enable-auto-image-base=@var{value} 2780Automatically choose the image base for DLLs, optionally starting with base 2781@var{value}, unless one is specified using the @code{--image-base} argument. 2782By using a hash generated from the dllname to create unique image bases 2783for each DLL, in-memory collisions and relocations which can delay program 2784execution are avoided. 2785[This option is specific to the i386 PE targeted port of the linker] 2786 2787@kindex --disable-auto-image-base 2788@item --disable-auto-image-base 2789Do not automatically generate a unique image base. If there is no 2790user-specified image base (@code{--image-base}) then use the platform 2791default. 2792[This option is specific to the i386 PE targeted port of the linker] 2793 2794@cindex DLLs, linking to 2795@kindex --dll-search-prefix 2796@item --dll-search-prefix @var{string} 2797When linking dynamically to a dll without an import library, 2798search for @code{<string><basename>.dll} in preference to 2799@code{lib<basename>.dll}. This behaviour allows easy distinction 2800between DLLs built for the various "subplatforms": native, cygwin, 2801uwin, pw, etc. For instance, cygwin DLLs typically use 2802@code{--dll-search-prefix=cyg}. 2803[This option is specific to the i386 PE targeted port of the linker] 2804 2805@kindex --enable-auto-import 2806@item --enable-auto-import 2807Do sophisticated linking of @code{_symbol} to @code{__imp__symbol} for 2808DATA imports from DLLs, thus making it possible to bypass the dllimport 2809mechanism on the user side and to reference unmangled symbol names. 2810[This option is specific to the i386 PE targeted port of the linker] 2811 2812The following remarks pertain to the original implementation of the 2813feature and are obsolete nowadays for Cygwin and MinGW targets. 2814 2815Note: Use of the 'auto-import' extension will cause the text section 2816of the image file to be made writable. This does not conform to the 2817PE-COFF format specification published by Microsoft. 2818 2819Note - use of the 'auto-import' extension will also cause read only 2820data which would normally be placed into the .rdata section to be 2821placed into the .data section instead. This is in order to work 2822around a problem with consts that is described here: 2823http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html 2824 2825Using 'auto-import' generally will 'just work' -- but sometimes you may 2826see this message: 2827 2828"variable '<var>' can't be auto-imported. Please read the 2829documentation for ld's @code{--enable-auto-import} for details." 2830 2831This message occurs when some (sub)expression accesses an address 2832ultimately given by the sum of two constants (Win32 import tables only 2833allow one). Instances where this may occur include accesses to member 2834fields of struct variables imported from a DLL, as well as using a 2835constant index into an array variable imported from a DLL. Any 2836multiword variable (arrays, structs, long long, etc) may trigger 2837this error condition. However, regardless of the exact data type 2838of the offending exported variable, ld will always detect it, issue 2839the warning, and exit. 2840 2841There are several ways to address this difficulty, regardless of the 2842data type of the exported variable: 2843 2844One way is to use --enable-runtime-pseudo-reloc switch. This leaves the task 2845of adjusting references in your client code for runtime environment, so 2846this method works only when runtime environment supports this feature. 2847 2848A second solution is to force one of the 'constants' to be a variable -- 2849that is, unknown and un-optimizable at compile time. For arrays, 2850there are two possibilities: a) make the indexee (the array's address) 2851a variable, or b) make the 'constant' index a variable. Thus: 2852 2853@example 2854extern type extern_array[]; 2855extern_array[1] --> 2856 @{ volatile type *t=extern_array; t[1] @} 2857@end example 2858 2859or 2860 2861@example 2862extern type extern_array[]; 2863extern_array[1] --> 2864 @{ volatile int t=1; extern_array[t] @} 2865@end example 2866 2867For structs (and most other multiword data types) the only option 2868is to make the struct itself (or the long long, or the ...) variable: 2869 2870@example 2871extern struct s extern_struct; 2872extern_struct.field --> 2873 @{ volatile struct s *t=&extern_struct; t->field @} 2874@end example 2875 2876or 2877 2878@example 2879extern long long extern_ll; 2880extern_ll --> 2881 @{ volatile long long * local_ll=&extern_ll; *local_ll @} 2882@end example 2883 2884A third method of dealing with this difficulty is to abandon 2885'auto-import' for the offending symbol and mark it with 2886@code{__declspec(dllimport)}. However, in practice that 2887requires using compile-time #defines to indicate whether you are 2888building a DLL, building client code that will link to the DLL, or 2889merely building/linking to a static library. In making the choice 2890between the various methods of resolving the 'direct address with 2891constant offset' problem, you should consider typical real-world usage: 2892 2893Original: 2894@example 2895--foo.h 2896extern int arr[]; 2897--foo.c 2898#include "foo.h" 2899void main(int argc, char **argv)@{ 2900 printf("%d\n",arr[1]); 2901@} 2902@end example 2903 2904Solution 1: 2905@example 2906--foo.h 2907extern int arr[]; 2908--foo.c 2909#include "foo.h" 2910void main(int argc, char **argv)@{ 2911 /* This workaround is for win32 and cygwin; do not "optimize" */ 2912 volatile int *parr = arr; 2913 printf("%d\n",parr[1]); 2914@} 2915@end example 2916 2917Solution 2: 2918@example 2919--foo.h 2920/* Note: auto-export is assumed (no __declspec(dllexport)) */ 2921#if (defined(_WIN32) || defined(__CYGWIN__)) && \ 2922 !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) 2923#define FOO_IMPORT __declspec(dllimport) 2924#else 2925#define FOO_IMPORT 2926#endif 2927extern FOO_IMPORT int arr[]; 2928--foo.c 2929#include "foo.h" 2930void main(int argc, char **argv)@{ 2931 printf("%d\n",arr[1]); 2932@} 2933@end example 2934 2935A fourth way to avoid this problem is to re-code your 2936library to use a functional interface rather than a data interface 2937for the offending variables (e.g. set_foo() and get_foo() accessor 2938functions). 2939 2940@kindex --disable-auto-import 2941@item --disable-auto-import 2942Do not attempt to do sophisticated linking of @code{_symbol} to 2943@code{__imp__symbol} for DATA imports from DLLs. 2944[This option is specific to the i386 PE targeted port of the linker] 2945 2946@kindex --enable-runtime-pseudo-reloc 2947@item --enable-runtime-pseudo-reloc 2948If your code contains expressions described in --enable-auto-import section, 2949that is, DATA imports from DLL with non-zero offset, this switch will create 2950a vector of 'runtime pseudo relocations' which can be used by runtime 2951environment to adjust references to such data in your client code. 2952[This option is specific to the i386 PE targeted port of the linker] 2953 2954@kindex --disable-runtime-pseudo-reloc 2955@item --disable-runtime-pseudo-reloc 2956Do not create pseudo relocations for non-zero offset DATA imports from DLLs. 2957[This option is specific to the i386 PE targeted port of the linker] 2958 2959@kindex --enable-extra-pe-debug 2960@item --enable-extra-pe-debug 2961Show additional debug info related to auto-import symbol thunking. 2962[This option is specific to the i386 PE targeted port of the linker] 2963 2964@kindex --section-alignment 2965@item --section-alignment 2966Sets the section alignment. Sections in memory will always begin at 2967addresses which are a multiple of this number. Defaults to 0x1000. 2968[This option is specific to the i386 PE targeted port of the linker] 2969 2970@cindex stack size 2971@kindex --stack 2972@item --stack @var{reserve} 2973@itemx --stack @var{reserve},@var{commit} 2974Specify the number of bytes of memory to reserve (and optionally commit) 2975to be used as stack for this program. The default is 2MB reserved, 4K 2976committed. 2977[This option is specific to the i386 PE targeted port of the linker] 2978 2979@kindex --subsystem 2980@item --subsystem @var{which} 2981@itemx --subsystem @var{which}:@var{major} 2982@itemx --subsystem @var{which}:@var{major}.@var{minor} 2983Specifies the subsystem under which your program will execute. The 2984legal values for @var{which} are @code{native}, @code{windows}, 2985@code{console}, @code{posix}, and @code{xbox}. You may optionally set 2986the subsystem version also. Numeric values are also accepted for 2987@var{which}. 2988[This option is specific to the i386 PE targeted port of the linker] 2989 2990The following options set flags in the @code{DllCharacteristics} field 2991of the PE file header: 2992[These options are specific to PE targeted ports of the linker] 2993 2994@kindex --high-entropy-va 2995@item --high-entropy-va 2996Image is compatible with 64-bit address space layout randomization 2997(ASLR). 2998This option also implies @option{--dynamicbase} and 2999@option{--enable-reloc-section}. 3000 3001@kindex --dynamicbase 3002@item --dynamicbase 3003The image base address may be relocated using address space layout 3004randomization (ASLR). This feature was introduced with MS Windows 3005Vista for i386 PE targets. 3006This option also implies @option{--enable-reloc-section}. 3007 3008@kindex --forceinteg 3009@item --forceinteg 3010Code integrity checks are enforced. 3011 3012@kindex --nxcompat 3013@item --nxcompat 3014The image is compatible with the Data Execution Prevention. 3015This feature was introduced with MS Windows XP SP2 for i386 PE targets. 3016 3017@kindex --no-isolation 3018@item --no-isolation 3019Although the image understands isolation, do not isolate the image. 3020 3021@kindex --no-seh 3022@item --no-seh 3023The image does not use SEH. No SE handler may be called from 3024this image. 3025 3026@kindex --no-bind 3027@item --no-bind 3028Do not bind this image. 3029 3030@kindex --wdmdriver 3031@item --wdmdriver 3032The driver uses the MS Windows Driver Model. 3033 3034@kindex --tsaware 3035@item --tsaware 3036The image is Terminal Server aware. 3037 3038@kindex --insert-timestamp 3039@item --insert-timestamp 3040@itemx --no-insert-timestamp 3041Insert a real timestamp into the image. This is the default behaviour 3042as it matches legacy code and it means that the image will work with 3043other, proprietary tools. The problem with this default is that it 3044will result in slightly different images being produced each time the 3045same sources are linked. The option @option{--no-insert-timestamp} 3046can be used to insert a zero value for the timestamp, this ensuring 3047that binaries produced from identical sources will compare 3048identically. 3049 3050@kindex --enable-reloc-section 3051@item --enable-reloc-section 3052Create the base relocation table, which is necessary if the image 3053is loaded at a different image base than specified in the PE header. 3054@end table 3055 3056@c man end 3057 3058@ifset C6X 3059@subsection Options specific to C6X uClinux targets 3060 3061@c man begin OPTIONS 3062 3063The C6X uClinux target uses a binary format called DSBT to support shared 3064libraries. Each shared library in the system needs to have a unique index; 3065all executables use an index of 0. 3066 3067@table @gcctabopt 3068 3069@kindex --dsbt-size 3070@item --dsbt-size @var{size} 3071This option sets the number of entries in the DSBT of the current executable 3072or shared library to @var{size}. The default is to create a table with 64 3073entries. 3074 3075@kindex --dsbt-index 3076@item --dsbt-index @var{index} 3077This option sets the DSBT index of the current executable or shared library 3078to @var{index}. The default is 0, which is appropriate for generating 3079executables. If a shared library is generated with a DSBT index of 0, the 3080@code{R_C6000_DSBT_INDEX} relocs are copied into the output file. 3081 3082@kindex --no-merge-exidx-entries 3083The @samp{--no-merge-exidx-entries} switch disables the merging of adjacent 3084exidx entries in frame unwind info. 3085 3086@end table 3087 3088@c man end 3089@end ifset 3090 3091@ifset CSKY 3092@subsection Options specific to C-SKY targets 3093 3094@c man begin OPTIONS 3095 3096@table @gcctabopt 3097 3098@kindex --branch-stub on C-SKY 3099@item --branch-stub 3100This option enables linker branch relaxation by inserting branch stub 3101sections when needed to extend the range of branches. This option is 3102usually not required since C-SKY supports branch and call instructions that 3103can access the full memory range and branch relaxation is normally handled by 3104the compiler or assembler. 3105 3106@kindex --stub-group-size on C-SKY 3107@item --stub-group-size=@var{N} 3108This option allows finer control of linker branch stub creation. 3109It sets the maximum size of a group of input sections that can 3110be handled by one stub section. A negative value of @var{N} locates 3111stub sections after their branches, while a positive value allows stub 3112sections to appear either before or after the branches. Values of 3113@samp{1} or @samp{-1} indicate that the 3114linker should choose suitable defaults. 3115 3116@end table 3117 3118@c man end 3119@end ifset 3120 3121@ifset M68HC11 3122@subsection Options specific to Motorola 68HC11 and 68HC12 targets 3123 3124@c man begin OPTIONS 3125 3126The 68HC11 and 68HC12 linkers support specific options to control the 3127memory bank switching mapping and trampoline code generation. 3128 3129@table @gcctabopt 3130 3131@kindex --no-trampoline 3132@item --no-trampoline 3133This option disables the generation of trampoline. By default a trampoline 3134is generated for each far function which is called using a @code{jsr} 3135instruction (this happens when a pointer to a far function is taken). 3136 3137@kindex --bank-window 3138@item --bank-window @var{name} 3139This option indicates to the linker the name of the memory region in 3140the @samp{MEMORY} specification that describes the memory bank window. 3141The definition of such region is then used by the linker to compute 3142paging and addresses within the memory window. 3143 3144@end table 3145 3146@c man end 3147@end ifset 3148 3149@ifset M68K 3150@subsection Options specific to Motorola 68K target 3151 3152@c man begin OPTIONS 3153 3154The following options are supported to control handling of GOT generation 3155when linking for 68K targets. 3156 3157@table @gcctabopt 3158 3159@kindex --got 3160@item --got=@var{type} 3161This option tells the linker which GOT generation scheme to use. 3162@var{type} should be one of @samp{single}, @samp{negative}, 3163@samp{multigot} or @samp{target}. For more information refer to the 3164Info entry for @file{ld}. 3165 3166@end table 3167 3168@c man end 3169@end ifset 3170 3171@ifset MIPS 3172@subsection Options specific to MIPS targets 3173 3174@c man begin OPTIONS 3175 3176The following options are supported to control microMIPS instruction 3177generation and branch relocation checks for ISA mode transitions when 3178linking for MIPS targets. 3179 3180@table @gcctabopt 3181 3182@kindex --insn32 3183@item --insn32 3184@kindex --no-insn32 3185@itemx --no-insn32 3186These options control the choice of microMIPS instructions used in code 3187generated by the linker, such as that in the PLT or lazy binding stubs, 3188or in relaxation. If @samp{--insn32} is used, then the linker only uses 318932-bit instruction encodings. By default or if @samp{--no-insn32} is 3190used, all instruction encodings are used, including 16-bit ones where 3191possible. 3192 3193@kindex --ignore-branch-isa 3194@item --ignore-branch-isa 3195@kindex --no-ignore-branch-isa 3196@itemx --no-ignore-branch-isa 3197These options control branch relocation checks for invalid ISA mode 3198transitions. If @samp{--ignore-branch-isa} is used, then the linker 3199accepts any branch relocations and any ISA mode transition required 3200is lost in relocation calculation, except for some cases of @code{BAL} 3201instructions which meet relaxation conditions and are converted to 3202equivalent @code{JALX} instructions as the associated relocation is 3203calculated. By default or if @samp{--no-ignore-branch-isa} is used 3204a check is made causing the loss of an ISA mode transition to produce 3205an error. 3206 3207@kindex --compact-branches 3208@item --compact-branches 3209@kindex --no-compact-branches 3210@item --compact-branches 3211These options control the generation of compact instructions by the linker 3212in the PLT entries for MIPS R6. 3213 3214@end table 3215 3216@c man end 3217@end ifset 3218 3219@ifset UsesEnvVars 3220@node Environment 3221@section Environment Variables 3222 3223@c man begin ENVIRONMENT 3224 3225You can change the behaviour of @command{ld} with the environment variables 3226@ifclear SingleFormat 3227@code{GNUTARGET}, 3228@end ifclear 3229@code{LDEMULATION} and @code{COLLECT_NO_DEMANGLE}. 3230 3231@ifclear SingleFormat 3232@kindex GNUTARGET 3233@cindex default input format 3234@code{GNUTARGET} determines the input-file object format if you don't 3235use @samp{-b} (or its synonym @samp{--format}). Its value should be one 3236of the BFD names for an input format (@pxref{BFD}). If there is no 3237@code{GNUTARGET} in the environment, @command{ld} uses the natural format 3238of the target. If @code{GNUTARGET} is set to @code{default} then BFD 3239attempts to discover the input format by examining binary input files; 3240this method often succeeds, but there are potential ambiguities, since 3241there is no method of ensuring that the magic number used to specify 3242object-file formats is unique. However, the configuration procedure for 3243BFD on each system places the conventional format for that system first 3244in the search-list, so ambiguities are resolved in favor of convention. 3245@end ifclear 3246 3247@kindex LDEMULATION 3248@cindex default emulation 3249@cindex emulation, default 3250@code{LDEMULATION} determines the default emulation if you don't use the 3251@samp{-m} option. The emulation can affect various aspects of linker 3252behaviour, particularly the default linker script. You can list the 3253available emulations with the @samp{--verbose} or @samp{-V} options. If 3254the @samp{-m} option is not used, and the @code{LDEMULATION} environment 3255variable is not defined, the default emulation depends upon how the 3256linker was configured. 3257 3258@kindex COLLECT_NO_DEMANGLE 3259@cindex demangling, default 3260Normally, the linker will default to demangling symbols. However, if 3261@code{COLLECT_NO_DEMANGLE} is set in the environment, then it will 3262default to not demangling symbols. This environment variable is used in 3263a similar fashion by the @code{gcc} linker wrapper program. The default 3264may be overridden by the @samp{--demangle} and @samp{--no-demangle} 3265options. 3266 3267@c man end 3268@end ifset 3269 3270@node Scripts 3271@chapter Linker Scripts 3272 3273@cindex scripts 3274@cindex linker scripts 3275@cindex command files 3276Every link is controlled by a @dfn{linker script}. This script is 3277written in the linker command language. 3278 3279The main purpose of the linker script is to describe how the sections in 3280the input files should be mapped into the output file, and to control 3281the memory layout of the output file. Most linker scripts do nothing 3282more than this. However, when necessary, the linker script can also 3283direct the linker to perform many other operations, using the commands 3284described below. 3285 3286The linker always uses a linker script. If you do not supply one 3287yourself, the linker will use a default script that is compiled into the 3288linker executable. You can use the @samp{--verbose} command-line option 3289to display the default linker script. Certain command-line options, 3290such as @samp{-r} or @samp{-N}, will affect the default linker script. 3291 3292You may supply your own linker script by using the @samp{-T} command 3293line option. When you do this, your linker script will replace the 3294default linker script. 3295 3296You may also use linker scripts implicitly by naming them as input files 3297to the linker, as though they were files to be linked. @xref{Implicit 3298Linker Scripts}. 3299 3300@menu 3301* Basic Script Concepts:: Basic Linker Script Concepts 3302* Script Format:: Linker Script Format 3303* Simple Example:: Simple Linker Script Example 3304* Simple Commands:: Simple Linker Script Commands 3305* Assignments:: Assigning Values to Symbols 3306* SECTIONS:: SECTIONS Command 3307* MEMORY:: MEMORY Command 3308* PHDRS:: PHDRS Command 3309* VERSION:: VERSION Command 3310* Expressions:: Expressions in Linker Scripts 3311* Implicit Linker Scripts:: Implicit Linker Scripts 3312@end menu 3313 3314@node Basic Script Concepts 3315@section Basic Linker Script Concepts 3316@cindex linker script concepts 3317We need to define some basic concepts and vocabulary in order to 3318describe the linker script language. 3319 3320The linker combines input files into a single output file. The output 3321file and each input file are in a special data format known as an 3322@dfn{object file format}. Each file is called an @dfn{object file}. 3323The output file is often called an @dfn{executable}, but for our 3324purposes we will also call it an object file. Each object file has, 3325among other things, a list of @dfn{sections}. We sometimes refer to a 3326section in an input file as an @dfn{input section}; similarly, a section 3327in the output file is an @dfn{output section}. 3328 3329Each section in an object file has a name and a size. Most sections 3330also have an associated block of data, known as the @dfn{section 3331contents}. A section may be marked as @dfn{loadable}, which means that 3332the contents should be loaded into memory when the output file is run. 3333A section with no contents may be @dfn{allocatable}, which means that an 3334area in memory should be set aside, but nothing in particular should be 3335loaded there (in some cases this memory must be zeroed out). A section 3336which is neither loadable nor allocatable typically contains some sort 3337of debugging information. 3338 3339Every loadable or allocatable output section has two addresses. The 3340first is the @dfn{VMA}, or virtual memory address. This is the address 3341the section will have when the output file is run. The second is the 3342@dfn{LMA}, or load memory address. This is the address at which the 3343section will be loaded. In most cases the two addresses will be the 3344same. An example of when they might be different is when a data section 3345is loaded into ROM, and then copied into RAM when the program starts up 3346(this technique is often used to initialize global variables in a ROM 3347based system). In this case the ROM address would be the LMA, and the 3348RAM address would be the VMA. 3349 3350You can see the sections in an object file by using the @code{objdump} 3351program with the @samp{-h} option. 3352 3353Every object file also has a list of @dfn{symbols}, known as the 3354@dfn{symbol table}. A symbol may be defined or undefined. Each symbol 3355has a name, and each defined symbol has an address, among other 3356information. If you compile a C or C++ program into an object file, you 3357will get a defined symbol for every defined function and global or 3358static variable. Every undefined function or global variable which is 3359referenced in the input file will become an undefined symbol. 3360 3361You can see the symbols in an object file by using the @code{nm} 3362program, or by using the @code{objdump} program with the @samp{-t} 3363option. 3364 3365@node Script Format 3366@section Linker Script Format 3367@cindex linker script format 3368Linker scripts are text files. 3369 3370You write a linker script as a series of commands. Each command is 3371either a keyword, possibly followed by arguments, or an assignment to a 3372symbol. You may separate commands using semicolons. Whitespace is 3373generally ignored. 3374 3375Strings such as file or format names can normally be entered directly. 3376If the file name contains a character such as a comma which would 3377otherwise serve to separate file names, you may put the file name in 3378double quotes. There is no way to use a double quote character in a 3379file name. 3380 3381You may include comments in linker scripts just as in C, delimited by 3382@samp{/*} and @samp{*/}. As in C, comments are syntactically equivalent 3383to whitespace. 3384 3385@node Simple Example 3386@section Simple Linker Script Example 3387@cindex linker script example 3388@cindex example of linker script 3389Many linker scripts are fairly simple. 3390 3391The simplest possible linker script has just one command: 3392@samp{SECTIONS}. You use the @samp{SECTIONS} command to describe the 3393memory layout of the output file. 3394 3395The @samp{SECTIONS} command is a powerful command. Here we will 3396describe a simple use of it. Let's assume your program consists only of 3397code, initialized data, and uninitialized data. These will be in the 3398@samp{.text}, @samp{.data}, and @samp{.bss} sections, respectively. 3399Let's assume further that these are the only sections which appear in 3400your input files. 3401 3402For this example, let's say that the code should be loaded at address 34030x10000, and that the data should start at address 0x8000000. Here is a 3404linker script which will do that: 3405@smallexample 3406SECTIONS 3407@{ 3408 . = 0x10000; 3409 .text : @{ *(.text) @} 3410 . = 0x8000000; 3411 .data : @{ *(.data) @} 3412 .bss : @{ *(.bss) @} 3413@} 3414@end smallexample 3415 3416You write the @samp{SECTIONS} command as the keyword @samp{SECTIONS}, 3417followed by a series of symbol assignments and output section 3418descriptions enclosed in curly braces. 3419 3420The first line inside the @samp{SECTIONS} command of the above example 3421sets the value of the special symbol @samp{.}, which is the location 3422counter. If you do not specify the address of an output section in some 3423other way (other ways are described later), the address is set from the 3424current value of the location counter. The location counter is then 3425incremented by the size of the output section. At the start of the 3426@samp{SECTIONS} command, the location counter has the value @samp{0}. 3427 3428The second line defines an output section, @samp{.text}. The colon is 3429required syntax which may be ignored for now. Within the curly braces 3430after the output section name, you list the names of the input sections 3431which should be placed into this output section. The @samp{*} is a 3432wildcard which matches any file name. The expression @samp{*(.text)} 3433means all @samp{.text} input sections in all input files. 3434 3435Since the location counter is @samp{0x10000} when the output section 3436@samp{.text} is defined, the linker will set the address of the 3437@samp{.text} section in the output file to be @samp{0x10000}. 3438 3439The remaining lines define the @samp{.data} and @samp{.bss} sections in 3440the output file. The linker will place the @samp{.data} output section 3441at address @samp{0x8000000}. After the linker places the @samp{.data} 3442output section, the value of the location counter will be 3443@samp{0x8000000} plus the size of the @samp{.data} output section. The 3444effect is that the linker will place the @samp{.bss} output section 3445immediately after the @samp{.data} output section in memory. 3446 3447The linker will ensure that each output section has the required 3448alignment, by increasing the location counter if necessary. In this 3449example, the specified addresses for the @samp{.text} and @samp{.data} 3450sections will probably satisfy any alignment constraints, but the linker 3451may have to create a small gap between the @samp{.data} and @samp{.bss} 3452sections. 3453 3454That's it! That's a simple and complete linker script. 3455 3456@node Simple Commands 3457@section Simple Linker Script Commands 3458@cindex linker script simple commands 3459In this section we describe the simple linker script commands. 3460 3461@menu 3462* Entry Point:: Setting the entry point 3463* File Commands:: Commands dealing with files 3464@ifclear SingleFormat 3465* Format Commands:: Commands dealing with object file formats 3466@end ifclear 3467 3468* REGION_ALIAS:: Assign alias names to memory regions 3469* Miscellaneous Commands:: Other linker script commands 3470@end menu 3471 3472@node Entry Point 3473@subsection Setting the Entry Point 3474@kindex ENTRY(@var{symbol}) 3475@cindex start of execution 3476@cindex first instruction 3477@cindex entry point 3478The first instruction to execute in a program is called the @dfn{entry 3479point}. You can use the @code{ENTRY} linker script command to set the 3480entry point. The argument is a symbol name: 3481@smallexample 3482ENTRY(@var{symbol}) 3483@end smallexample 3484 3485There are several ways to set the entry point. The linker will set the 3486entry point by trying each of the following methods in order, and 3487stopping when one of them succeeds: 3488@itemize @bullet 3489@item 3490the @samp{-e} @var{entry} command-line option; 3491@item 3492the @code{ENTRY(@var{symbol})} command in a linker script; 3493@item 3494the value of a target-specific symbol, if it is defined; For many 3495targets this is @code{start}, but PE- and BeOS-based systems for example 3496check a list of possible entry symbols, matching the first one found. 3497@item 3498the address of the first byte of the @samp{.text} section, if present; 3499@item 3500The address @code{0}. 3501@end itemize 3502 3503@node File Commands 3504@subsection Commands Dealing with Files 3505@cindex linker script file commands 3506Several linker script commands deal with files. 3507 3508@table @code 3509@item INCLUDE @var{filename} 3510@kindex INCLUDE @var{filename} 3511@cindex including a linker script 3512Include the linker script @var{filename} at this point. The file will 3513be searched for in the current directory, and in any directory specified 3514with the @option{-L} option. You can nest calls to @code{INCLUDE} up to 351510 levels deep. 3516 3517You can place @code{INCLUDE} directives at the top level, in @code{MEMORY} or 3518@code{SECTIONS} commands, or in output section descriptions. 3519 3520@item INPUT(@var{file}, @var{file}, @dots{}) 3521@itemx INPUT(@var{file} @var{file} @dots{}) 3522@kindex INPUT(@var{files}) 3523@cindex input files in linker scripts 3524@cindex input object files in linker scripts 3525@cindex linker script input object files 3526The @code{INPUT} command directs the linker to include the named files 3527in the link, as though they were named on the command line. 3528 3529For example, if you always want to include @file{subr.o} any time you do 3530a link, but you can't be bothered to put it on every link command line, 3531then you can put @samp{INPUT (subr.o)} in your linker script. 3532 3533In fact, if you like, you can list all of your input files in the linker 3534script, and then invoke the linker with nothing but a @samp{-T} option. 3535 3536In case a @dfn{sysroot prefix} is configured, and the filename starts 3537with the @samp{/} character, and the script being processed was 3538located inside the @dfn{sysroot prefix}, the filename will be looked 3539for in the @dfn{sysroot prefix}. Otherwise, the linker will try to 3540open the file in the current directory. If it is not found, the 3541linker will search through the archive library search path. 3542The @dfn{sysroot prefix} can also be forced by specifying @code{=} 3543as the first character in the filename path, or prefixing the filename 3544path with @code{$SYSROOT}. See also the description of @samp{-L} in 3545@ref{Options,,Command-line Options}. 3546 3547If you use @samp{INPUT (-l@var{file})}, @command{ld} will transform the 3548name to @code{lib@var{file}.a}, as with the command-line argument 3549@samp{-l}. 3550 3551When you use the @code{INPUT} command in an implicit linker script, the 3552files will be included in the link at the point at which the linker 3553script file is included. This can affect archive searching. 3554 3555@item GROUP(@var{file}, @var{file}, @dots{}) 3556@itemx GROUP(@var{file} @var{file} @dots{}) 3557@kindex GROUP(@var{files}) 3558@cindex grouping input files 3559The @code{GROUP} command is like @code{INPUT}, except that the named 3560files should all be archives, and they are searched repeatedly until no 3561new undefined references are created. See the description of @samp{-(} 3562in @ref{Options,,Command-line Options}. 3563 3564@item AS_NEEDED(@var{file}, @var{file}, @dots{}) 3565@itemx AS_NEEDED(@var{file} @var{file} @dots{}) 3566@kindex AS_NEEDED(@var{files}) 3567This construct can appear only inside of the @code{INPUT} or @code{GROUP} 3568commands, among other filenames. The files listed will be handled 3569as if they appear directly in the @code{INPUT} or @code{GROUP} commands, 3570with the exception of ELF shared libraries, that will be added only 3571when they are actually needed. This construct essentially enables 3572@option{--as-needed} option for all the files listed inside of it 3573and restores previous @option{--as-needed} resp. @option{--no-as-needed} 3574setting afterwards. 3575 3576@item OUTPUT(@var{filename}) 3577@kindex OUTPUT(@var{filename}) 3578@cindex output file name in linker script 3579The @code{OUTPUT} command names the output file. Using 3580@code{OUTPUT(@var{filename})} in the linker script is exactly like using 3581@samp{-o @var{filename}} on the command line (@pxref{Options,,Command 3582Line Options}). If both are used, the command-line option takes 3583precedence. 3584 3585You can use the @code{OUTPUT} command to define a default name for the 3586output file other than the usual default of @file{a.out}. 3587 3588@item SEARCH_DIR(@var{path}) 3589@kindex SEARCH_DIR(@var{path}) 3590@cindex library search path in linker script 3591@cindex archive search path in linker script 3592@cindex search path in linker script 3593The @code{SEARCH_DIR} command adds @var{path} to the list of paths where 3594@command{ld} looks for archive libraries. Using 3595@code{SEARCH_DIR(@var{path})} is exactly like using @samp{-L @var{path}} 3596on the command line (@pxref{Options,,Command-line Options}). If both 3597are used, then the linker will search both paths. Paths specified using 3598the command-line option are searched first. 3599 3600@item STARTUP(@var{filename}) 3601@kindex STARTUP(@var{filename}) 3602@cindex first input file 3603The @code{STARTUP} command is just like the @code{INPUT} command, except 3604that @var{filename} will become the first input file to be linked, as 3605though it were specified first on the command line. This may be useful 3606when using a system in which the entry point is always the start of the 3607first file. 3608@end table 3609 3610@ifclear SingleFormat 3611@node Format Commands 3612@subsection Commands Dealing with Object File Formats 3613A couple of linker script commands deal with object file formats. 3614 3615@table @code 3616@item OUTPUT_FORMAT(@var{bfdname}) 3617@itemx OUTPUT_FORMAT(@var{default}, @var{big}, @var{little}) 3618@kindex OUTPUT_FORMAT(@var{bfdname}) 3619@cindex output file format in linker script 3620The @code{OUTPUT_FORMAT} command names the BFD format to use for the 3621output file (@pxref{BFD}). Using @code{OUTPUT_FORMAT(@var{bfdname})} is 3622exactly like using @samp{--oformat @var{bfdname}} on the command line 3623(@pxref{Options,,Command-line Options}). If both are used, the command 3624line option takes precedence. 3625 3626You can use @code{OUTPUT_FORMAT} with three arguments to use different 3627formats based on the @samp{-EB} and @samp{-EL} command-line options. 3628This permits the linker script to set the output format based on the 3629desired endianness. 3630 3631If neither @samp{-EB} nor @samp{-EL} are used, then the output format 3632will be the first argument, @var{default}. If @samp{-EB} is used, the 3633output format will be the second argument, @var{big}. If @samp{-EL} is 3634used, the output format will be the third argument, @var{little}. 3635 3636For example, the default linker script for the MIPS ELF target uses this 3637command: 3638@smallexample 3639OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) 3640@end smallexample 3641This says that the default format for the output file is 3642@samp{elf32-bigmips}, but if the user uses the @samp{-EL} command-line 3643option, the output file will be created in the @samp{elf32-littlemips} 3644format. 3645 3646@item TARGET(@var{bfdname}) 3647@kindex TARGET(@var{bfdname}) 3648@cindex input file format in linker script 3649The @code{TARGET} command names the BFD format to use when reading input 3650files. It affects subsequent @code{INPUT} and @code{GROUP} commands. 3651This command is like using @samp{-b @var{bfdname}} on the command line 3652(@pxref{Options,,Command-line Options}). If the @code{TARGET} command 3653is used but @code{OUTPUT_FORMAT} is not, then the last @code{TARGET} 3654command is also used to set the format for the output file. @xref{BFD}. 3655@end table 3656@end ifclear 3657 3658@node REGION_ALIAS 3659@subsection Assign alias names to memory regions 3660@kindex REGION_ALIAS(@var{alias}, @var{region}) 3661@cindex region alias 3662@cindex region names 3663 3664Alias names can be added to existing memory regions created with the 3665@ref{MEMORY} command. Each name corresponds to at most one memory region. 3666 3667@smallexample 3668REGION_ALIAS(@var{alias}, @var{region}) 3669@end smallexample 3670 3671The @code{REGION_ALIAS} function creates an alias name @var{alias} for the 3672memory region @var{region}. This allows a flexible mapping of output sections 3673to memory regions. An example follows. 3674 3675Suppose we have an application for embedded systems which come with various 3676memory storage devices. All have a general purpose, volatile memory @code{RAM} 3677that allows code execution or data storage. Some may have a read-only, 3678non-volatile memory @code{ROM} that allows code execution and read-only data 3679access. The last variant is a read-only, non-volatile memory @code{ROM2} with 3680read-only data access and no code execution capability. We have four output 3681sections: 3682 3683@itemize @bullet 3684@item 3685@code{.text} program code; 3686@item 3687@code{.rodata} read-only data; 3688@item 3689@code{.data} read-write initialized data; 3690@item 3691@code{.bss} read-write zero initialized data. 3692@end itemize 3693 3694The goal is to provide a linker command file that contains a system independent 3695part defining the output sections and a system dependent part mapping the 3696output sections to the memory regions available on the system. Our embedded 3697systems come with three different memory setups @code{A}, @code{B} and 3698@code{C}: 3699@multitable @columnfractions .25 .25 .25 .25 3700@item Section @tab Variant A @tab Variant B @tab Variant C 3701@item .text @tab RAM @tab ROM @tab ROM 3702@item .rodata @tab RAM @tab ROM @tab ROM2 3703@item .data @tab RAM @tab RAM/ROM @tab RAM/ROM2 3704@item .bss @tab RAM @tab RAM @tab RAM 3705@end multitable 3706The notation @code{RAM/ROM} or @code{RAM/ROM2} means that this section is 3707loaded into region @code{ROM} or @code{ROM2} respectively. Please note that 3708the load address of the @code{.data} section starts in all three variants at 3709the end of the @code{.rodata} section. 3710 3711The base linker script that deals with the output sections follows. It 3712includes the system dependent @code{linkcmds.memory} file that describes the 3713memory layout: 3714@smallexample 3715INCLUDE linkcmds.memory 3716 3717SECTIONS 3718 @{ 3719 .text : 3720 @{ 3721 *(.text) 3722 @} > REGION_TEXT 3723 .rodata : 3724 @{ 3725 *(.rodata) 3726 rodata_end = .; 3727 @} > REGION_RODATA 3728 .data : AT (rodata_end) 3729 @{ 3730 data_start = .; 3731 *(.data) 3732 @} > REGION_DATA 3733 data_size = SIZEOF(.data); 3734 data_load_start = LOADADDR(.data); 3735 .bss : 3736 @{ 3737 *(.bss) 3738 @} > REGION_BSS 3739 @} 3740@end smallexample 3741 3742Now we need three different @code{linkcmds.memory} files to define memory 3743regions and alias names. The content of @code{linkcmds.memory} for the three 3744variants @code{A}, @code{B} and @code{C}: 3745@table @code 3746@item A 3747Here everything goes into the @code{RAM}. 3748@smallexample 3749MEMORY 3750 @{ 3751 RAM : ORIGIN = 0, LENGTH = 4M 3752 @} 3753 3754REGION_ALIAS("REGION_TEXT", RAM); 3755REGION_ALIAS("REGION_RODATA", RAM); 3756REGION_ALIAS("REGION_DATA", RAM); 3757REGION_ALIAS("REGION_BSS", RAM); 3758@end smallexample 3759@item B 3760Program code and read-only data go into the @code{ROM}. Read-write data goes 3761into the @code{RAM}. An image of the initialized data is loaded into the 3762@code{ROM} and will be copied during system start into the @code{RAM}. 3763@smallexample 3764MEMORY 3765 @{ 3766 ROM : ORIGIN = 0, LENGTH = 3M 3767 RAM : ORIGIN = 0x10000000, LENGTH = 1M 3768 @} 3769 3770REGION_ALIAS("REGION_TEXT", ROM); 3771REGION_ALIAS("REGION_RODATA", ROM); 3772REGION_ALIAS("REGION_DATA", RAM); 3773REGION_ALIAS("REGION_BSS", RAM); 3774@end smallexample 3775@item C 3776Program code goes into the @code{ROM}. Read-only data goes into the 3777@code{ROM2}. Read-write data goes into the @code{RAM}. An image of the 3778initialized data is loaded into the @code{ROM2} and will be copied during 3779system start into the @code{RAM}. 3780@smallexample 3781MEMORY 3782 @{ 3783 ROM : ORIGIN = 0, LENGTH = 2M 3784 ROM2 : ORIGIN = 0x10000000, LENGTH = 1M 3785 RAM : ORIGIN = 0x20000000, LENGTH = 1M 3786 @} 3787 3788REGION_ALIAS("REGION_TEXT", ROM); 3789REGION_ALIAS("REGION_RODATA", ROM2); 3790REGION_ALIAS("REGION_DATA", RAM); 3791REGION_ALIAS("REGION_BSS", RAM); 3792@end smallexample 3793@end table 3794 3795It is possible to write a common system initialization routine to copy the 3796@code{.data} section from @code{ROM} or @code{ROM2} into the @code{RAM} if 3797necessary: 3798@smallexample 3799#include <string.h> 3800 3801extern char data_start []; 3802extern char data_size []; 3803extern char data_load_start []; 3804 3805void copy_data(void) 3806@{ 3807 if (data_start != data_load_start) 3808 @{ 3809 memcpy(data_start, data_load_start, (size_t) data_size); 3810 @} 3811@} 3812@end smallexample 3813 3814@node Miscellaneous Commands 3815@subsection Other Linker Script Commands 3816There are a few other linker scripts commands. 3817 3818@table @code 3819@item ASSERT(@var{exp}, @var{message}) 3820@kindex ASSERT 3821@cindex assertion in linker script 3822Ensure that @var{exp} is non-zero. If it is zero, then exit the linker 3823with an error code, and print @var{message}. 3824 3825Note that assertions are checked before the final stages of linking 3826take place. This means that expressions involving symbols PROVIDEd 3827inside section definitions will fail if the user has not set values 3828for those symbols. The only exception to this rule is PROVIDEd 3829symbols that just reference dot. Thus an assertion like this: 3830 3831@smallexample 3832 .stack : 3833 @{ 3834 PROVIDE (__stack = .); 3835 PROVIDE (__stack_size = 0x100); 3836 ASSERT ((__stack > (_end + __stack_size)), "Error: No room left for the stack"); 3837 @} 3838@end smallexample 3839 3840will fail if @code{__stack_size} is not defined elsewhere. Symbols 3841PROVIDEd outside of section definitions are evaluated earlier, so they 3842can be used inside ASSERTions. Thus: 3843 3844@smallexample 3845 PROVIDE (__stack_size = 0x100); 3846 .stack : 3847 @{ 3848 PROVIDE (__stack = .); 3849 ASSERT ((__stack > (_end + __stack_size)), "Error: No room left for the stack"); 3850 @} 3851@end smallexample 3852 3853will work. 3854 3855@item EXTERN(@var{symbol} @var{symbol} @dots{}) 3856@kindex EXTERN 3857@cindex undefined symbol in linker script 3858Force @var{symbol} to be entered in the output file as an undefined 3859symbol. Doing this may, for example, trigger linking of additional 3860modules from standard libraries. You may list several @var{symbol}s for 3861each @code{EXTERN}, and you may use @code{EXTERN} multiple times. This 3862command has the same effect as the @samp{-u} command-line option. 3863 3864@item FORCE_COMMON_ALLOCATION 3865@kindex FORCE_COMMON_ALLOCATION 3866@cindex common allocation in linker script 3867This command has the same effect as the @samp{-d} command-line option: 3868to make @command{ld} assign space to common symbols even if a relocatable 3869output file is specified (@samp{-r}). 3870 3871@item INHIBIT_COMMON_ALLOCATION 3872@kindex INHIBIT_COMMON_ALLOCATION 3873@cindex common allocation in linker script 3874This command has the same effect as the @samp{--no-define-common} 3875command-line option: to make @code{ld} omit the assignment of addresses 3876to common symbols even for a non-relocatable output file. 3877 3878@item FORCE_GROUP_ALLOCATION 3879@kindex FORCE_GROUP_ALLOCATION 3880@cindex group allocation in linker script 3881@cindex section groups 3882@cindex COMDAT 3883This command has the same effect as the 3884@samp{--force-group-allocation} command-line option: to make 3885@command{ld} place section group members like normal input sections, 3886and to delete the section groups even if a relocatable output file is 3887specified (@samp{-r}). 3888 3889@item INSERT [ AFTER | BEFORE ] @var{output_section} 3890@kindex INSERT 3891@cindex insert user script into default script 3892This command is typically used in a script specified by @samp{-T} to 3893augment the default @code{SECTIONS} with, for example, overlays. It 3894inserts all prior linker script statements after (or before) 3895@var{output_section}, and also causes @samp{-T} to not override the 3896default linker script. The exact insertion point is as for orphan 3897sections. @xref{Location Counter}. The insertion happens after the 3898linker has mapped input sections to output sections. Prior to the 3899insertion, since @samp{-T} scripts are parsed before the default 3900linker script, statements in the @samp{-T} script occur before the 3901default linker script statements in the internal linker representation 3902of the script. In particular, input section assignments will be made 3903to @samp{-T} output sections before those in the default script. Here 3904is an example of how a @samp{-T} script using @code{INSERT} might look: 3905 3906@smallexample 3907SECTIONS 3908@{ 3909 OVERLAY : 3910 @{ 3911 .ov1 @{ ov1*(.text) @} 3912 .ov2 @{ ov2*(.text) @} 3913 @} 3914@} 3915INSERT AFTER .text; 3916@end smallexample 3917 3918@item NOCROSSREFS(@var{section} @var{section} @dots{}) 3919@kindex NOCROSSREFS(@var{sections}) 3920@cindex cross references 3921This command may be used to tell @command{ld} to issue an error about any 3922references among certain output sections. 3923 3924In certain types of programs, particularly on embedded systems when 3925using overlays, when one section is loaded into memory, another section 3926will not be. Any direct references between the two sections would be 3927errors. For example, it would be an error if code in one section called 3928a function defined in the other section. 3929 3930The @code{NOCROSSREFS} command takes a list of output section names. If 3931@command{ld} detects any cross references between the sections, it reports 3932an error and returns a non-zero exit status. Note that the 3933@code{NOCROSSREFS} command uses output section names, not input section 3934names. 3935 3936@item NOCROSSREFS_TO(@var{tosection} @var{fromsection} @dots{}) 3937@kindex NOCROSSREFS_TO(@var{tosection} @var{fromsections}) 3938@cindex cross references 3939This command may be used to tell @command{ld} to issue an error about any 3940references to one section from a list of other sections. 3941 3942The @code{NOCROSSREFS} command is useful when ensuring that two or more 3943output sections are entirely independent but there are situations where 3944a one-way dependency is needed. For example, in a multi-core application 3945there may be shared code that can be called from each core but for safety 3946must never call back. 3947 3948The @code{NOCROSSREFS_TO} command takes a list of output section names. 3949The first section can not be referenced from any of the other sections. 3950If @command{ld} detects any references to the first section from any of 3951the other sections, it reports an error and returns a non-zero exit 3952status. Note that the @code{NOCROSSREFS_TO} command uses output section 3953names, not input section names. 3954 3955@ifclear SingleFormat 3956@item OUTPUT_ARCH(@var{bfdarch}) 3957@kindex OUTPUT_ARCH(@var{bfdarch}) 3958@cindex machine architecture 3959@cindex architecture 3960Specify a particular output machine architecture. The argument is one 3961of the names used by the BFD library (@pxref{BFD}). You can see the 3962architecture of an object file by using the @code{objdump} program with 3963the @samp{-f} option. 3964@end ifclear 3965 3966@item LD_FEATURE(@var{string}) 3967@kindex LD_FEATURE(@var{string}) 3968This command may be used to modify @command{ld} behavior. If 3969@var{string} is @code{"SANE_EXPR"} then absolute symbols and numbers 3970in a script are simply treated as numbers everywhere. 3971@xref{Expression Section}. 3972@end table 3973 3974@node Assignments 3975@section Assigning Values to Symbols 3976@cindex assignment in scripts 3977@cindex symbol definition, scripts 3978@cindex variables, defining 3979You may assign a value to a symbol in a linker script. This will define 3980the symbol and place it into the symbol table with a global scope. 3981 3982@menu 3983* Simple Assignments:: Simple Assignments 3984* HIDDEN:: HIDDEN 3985* PROVIDE:: PROVIDE 3986* PROVIDE_HIDDEN:: PROVIDE_HIDDEN 3987* Source Code Reference:: How to use a linker script defined symbol in source code 3988@end menu 3989 3990@node Simple Assignments 3991@subsection Simple Assignments 3992 3993You may assign to a symbol using any of the C assignment operators: 3994 3995@table @code 3996@item @var{symbol} = @var{expression} ; 3997@itemx @var{symbol} += @var{expression} ; 3998@itemx @var{symbol} -= @var{expression} ; 3999@itemx @var{symbol} *= @var{expression} ; 4000@itemx @var{symbol} /= @var{expression} ; 4001@itemx @var{symbol} <<= @var{expression} ; 4002@itemx @var{symbol} >>= @var{expression} ; 4003@itemx @var{symbol} &= @var{expression} ; 4004@itemx @var{symbol} |= @var{expression} ; 4005@end table 4006 4007The first case will define @var{symbol} to the value of 4008@var{expression}. In the other cases, @var{symbol} must already be 4009defined, and the value will be adjusted accordingly. 4010 4011The special symbol name @samp{.} indicates the location counter. You 4012may only use this within a @code{SECTIONS} command. @xref{Location Counter}. 4013 4014The semicolon after @var{expression} is required. 4015 4016Expressions are defined below; see @ref{Expressions}. 4017 4018You may write symbol assignments as commands in their own right, or as 4019statements within a @code{SECTIONS} command, or as part of an output 4020section description in a @code{SECTIONS} command. 4021 4022The section of the symbol will be set from the section of the 4023expression; for more information, see @ref{Expression Section}. 4024 4025Here is an example showing the three different places that symbol 4026assignments may be used: 4027 4028@smallexample 4029floating_point = 0; 4030SECTIONS 4031@{ 4032 .text : 4033 @{ 4034 *(.text) 4035 _etext = .; 4036 @} 4037 _bdata = (. + 3) & ~ 3; 4038 .data : @{ *(.data) @} 4039@} 4040@end smallexample 4041@noindent 4042In this example, the symbol @samp{floating_point} will be defined as 4043zero. The symbol @samp{_etext} will be defined as the address following 4044the last @samp{.text} input section. The symbol @samp{_bdata} will be 4045defined as the address following the @samp{.text} output section aligned 4046upward to a 4 byte boundary. 4047 4048@node HIDDEN 4049@subsection HIDDEN 4050@cindex HIDDEN 4051For ELF targeted ports, define a symbol that will be hidden and won't be 4052exported. The syntax is @code{HIDDEN(@var{symbol} = @var{expression})}. 4053 4054Here is the example from @ref{Simple Assignments}, rewritten to use 4055@code{HIDDEN}: 4056 4057@smallexample 4058HIDDEN(floating_point = 0); 4059SECTIONS 4060@{ 4061 .text : 4062 @{ 4063 *(.text) 4064 HIDDEN(_etext = .); 4065 @} 4066 HIDDEN(_bdata = (. + 3) & ~ 3); 4067 .data : @{ *(.data) @} 4068@} 4069@end smallexample 4070@noindent 4071In this case none of the three symbols will be visible outside this module. 4072 4073@node PROVIDE 4074@subsection PROVIDE 4075@cindex PROVIDE 4076In some cases, it is desirable for a linker script to define a symbol 4077only if it is referenced and is not defined by any object included in 4078the link. For example, traditional linkers defined the symbol 4079@samp{etext}. However, ANSI C requires that the user be able to use 4080@samp{etext} as a function name without encountering an error. The 4081@code{PROVIDE} keyword may be used to define a symbol, such as 4082@samp{etext}, only if it is referenced but not defined. The syntax is 4083@code{PROVIDE(@var{symbol} = @var{expression})}. 4084 4085Here is an example of using @code{PROVIDE} to define @samp{etext}: 4086@smallexample 4087SECTIONS 4088@{ 4089 .text : 4090 @{ 4091 *(.text) 4092 _etext = .; 4093 PROVIDE(etext = .); 4094 @} 4095@} 4096@end smallexample 4097 4098In this example, if the program defines @samp{_etext} (with a leading 4099underscore), the linker will give a multiple definition error. If, on 4100the other hand, the program defines @samp{etext} (with no leading 4101underscore), the linker will silently use the definition in the program. 4102If the program references @samp{etext} but does not define it, the 4103linker will use the definition in the linker script. 4104 4105Note - the @code{PROVIDE} directive considers a common symbol to be 4106defined, even though such a symbol could be combined with the symbol 4107that the @code{PROVIDE} would create. This is particularly important 4108when considering constructor and destructor list symbols such as 4109@samp{__CTOR_LIST__} as these are often defined as common symbols. 4110 4111@node PROVIDE_HIDDEN 4112@subsection PROVIDE_HIDDEN 4113@cindex PROVIDE_HIDDEN 4114Similar to @code{PROVIDE}. For ELF targeted ports, the symbol will be 4115hidden and won't be exported. 4116 4117@node Source Code Reference 4118@subsection Source Code Reference 4119 4120Accessing a linker script defined variable from source code is not 4121intuitive. In particular a linker script symbol is not equivalent to 4122a variable declaration in a high level language, it is instead a 4123symbol that does not have a value. 4124 4125Before going further, it is important to note that compilers often 4126transform names in the source code into different names when they are 4127stored in the symbol table. For example, Fortran compilers commonly 4128prepend or append an underscore, and C++ performs extensive @samp{name 4129mangling}. Therefore there might be a discrepancy between the name 4130of a variable as it is used in source code and the name of the same 4131variable as it is defined in a linker script. For example in C a 4132linker script variable might be referred to as: 4133 4134@smallexample 4135 extern int foo; 4136@end smallexample 4137 4138But in the linker script it might be defined as: 4139 4140@smallexample 4141 _foo = 1000; 4142@end smallexample 4143 4144In the remaining examples however it is assumed that no name 4145transformation has taken place. 4146 4147When a symbol is declared in a high level language such as C, two 4148things happen. The first is that the compiler reserves enough space 4149in the program's memory to hold the @emph{value} of the symbol. The 4150second is that the compiler creates an entry in the program's symbol 4151table which holds the symbol's @emph{address}. ie the symbol table 4152contains the address of the block of memory holding the symbol's 4153value. So for example the following C declaration, at file scope: 4154 4155@smallexample 4156 int foo = 1000; 4157@end smallexample 4158 4159creates an entry called @samp{foo} in the symbol table. This entry 4160holds the address of an @samp{int} sized block of memory where the 4161number 1000 is initially stored. 4162 4163When a program references a symbol the compiler generates code that 4164first accesses the symbol table to find the address of the symbol's 4165memory block and then code to read the value from that memory block. 4166So: 4167 4168@smallexample 4169 foo = 1; 4170@end smallexample 4171 4172looks up the symbol @samp{foo} in the symbol table, gets the address 4173associated with this symbol and then writes the value 1 into that 4174address. Whereas: 4175 4176@smallexample 4177 int * a = & foo; 4178@end smallexample 4179 4180looks up the symbol @samp{foo} in the symbol table, gets its address 4181and then copies this address into the block of memory associated with 4182the variable @samp{a}. 4183 4184Linker scripts symbol declarations, by contrast, create an entry in 4185the symbol table but do not assign any memory to them. Thus they are 4186an address without a value. So for example the linker script definition: 4187 4188@smallexample 4189 foo = 1000; 4190@end smallexample 4191 4192creates an entry in the symbol table called @samp{foo} which holds 4193the address of memory location 1000, but nothing special is stored at 4194address 1000. This means that you cannot access the @emph{value} of a 4195linker script defined symbol - it has no value - all you can do is 4196access the @emph{address} of a linker script defined symbol. 4197 4198Hence when you are using a linker script defined symbol in source code 4199you should always take the address of the symbol, and never attempt to 4200use its value. For example suppose you want to copy the contents of a 4201section of memory called .ROM into a section called .FLASH and the 4202linker script contains these declarations: 4203 4204@smallexample 4205@group 4206 start_of_ROM = .ROM; 4207 end_of_ROM = .ROM + sizeof (.ROM); 4208 start_of_FLASH = .FLASH; 4209@end group 4210@end smallexample 4211 4212Then the C source code to perform the copy would be: 4213 4214@smallexample 4215@group 4216 extern char start_of_ROM, end_of_ROM, start_of_FLASH; 4217 4218 memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); 4219@end group 4220@end smallexample 4221 4222Note the use of the @samp{&} operators. These are correct. 4223Alternatively the symbols can be treated as the names of vectors or 4224arrays and then the code will again work as expected: 4225 4226@smallexample 4227@group 4228 extern char start_of_ROM[], end_of_ROM[], start_of_FLASH[]; 4229 4230 memcpy (start_of_FLASH, start_of_ROM, end_of_ROM - start_of_ROM); 4231@end group 4232@end smallexample 4233 4234Note how using this method does not require the use of @samp{&} 4235operators. 4236 4237@node SECTIONS 4238@section SECTIONS Command 4239@kindex SECTIONS 4240The @code{SECTIONS} command tells the linker how to map input sections 4241into output sections, and how to place the output sections in memory. 4242 4243The format of the @code{SECTIONS} command is: 4244@smallexample 4245SECTIONS 4246@{ 4247 @var{sections-command} 4248 @var{sections-command} 4249 @dots{} 4250@} 4251@end smallexample 4252 4253Each @var{sections-command} may of be one of the following: 4254 4255@itemize @bullet 4256@item 4257an @code{ENTRY} command (@pxref{Entry Point,,Entry command}) 4258@item 4259a symbol assignment (@pxref{Assignments}) 4260@item 4261an output section description 4262@item 4263an overlay description 4264@end itemize 4265 4266The @code{ENTRY} command and symbol assignments are permitted inside the 4267@code{SECTIONS} command for convenience in using the location counter in 4268those commands. This can also make the linker script easier to 4269understand because you can use those commands at meaningful points in 4270the layout of the output file. 4271 4272Output section descriptions and overlay descriptions are described 4273below. 4274 4275If you do not use a @code{SECTIONS} command in your linker script, the 4276linker will place each input section into an identically named output 4277section in the order that the sections are first encountered in the 4278input files. If all input sections are present in the first file, for 4279example, the order of sections in the output file will match the order 4280in the first input file. The first section will be at address zero. 4281 4282@menu 4283* Output Section Description:: Output section description 4284* Output Section Name:: Output section name 4285* Output Section Address:: Output section address 4286* Input Section:: Input section description 4287* Output Section Data:: Output section data 4288* Output Section Keywords:: Output section keywords 4289* Output Section Discarding:: Output section discarding 4290* Output Section Attributes:: Output section attributes 4291* Overlay Description:: Overlay description 4292@end menu 4293 4294@node Output Section Description 4295@subsection Output Section Description 4296The full description of an output section looks like this: 4297@smallexample 4298@group 4299@var{section} [@var{address}] [(@var{type})] : 4300 [AT(@var{lma})] 4301 [ALIGN(@var{section_align}) | ALIGN_WITH_INPUT] 4302 [SUBALIGN(@var{subsection_align})] 4303 [@var{constraint}] 4304 @{ 4305 @var{output-section-command} 4306 @var{output-section-command} 4307 @dots{} 4308 @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}] [,] 4309@end group 4310@end smallexample 4311 4312Most output sections do not use most of the optional section attributes. 4313 4314The whitespace around @var{section} is required, so that the section 4315name is unambiguous. The colon and the curly braces are also required. 4316The comma at the end may be required if a @var{fillexp} is used and 4317the next @var{sections-command} looks like a continuation of the expression. 4318The line breaks and other white space are optional. 4319 4320Each @var{output-section-command} may be one of the following: 4321 4322@itemize @bullet 4323@item 4324a symbol assignment (@pxref{Assignments}) 4325@item 4326an input section description (@pxref{Input Section}) 4327@item 4328data values to include directly (@pxref{Output Section Data}) 4329@item 4330a special output section keyword (@pxref{Output Section Keywords}) 4331@end itemize 4332 4333@node Output Section Name 4334@subsection Output Section Name 4335@cindex name, section 4336@cindex section name 4337The name of the output section is @var{section}. @var{section} must 4338meet the constraints of your output format. In formats which only 4339support a limited number of sections, such as @code{a.out}, the name 4340must be one of the names supported by the format (@code{a.out}, for 4341example, allows only @samp{.text}, @samp{.data} or @samp{.bss}). If the 4342output format supports any number of sections, but with numbers and not 4343names (as is the case for Oasys), the name should be supplied as a 4344quoted numeric string. A section name may consist of any sequence of 4345characters, but a name which contains any unusual characters such as 4346commas must be quoted. 4347 4348The output section name @samp{/DISCARD/} is special; @ref{Output Section 4349Discarding}. 4350 4351@node Output Section Address 4352@subsection Output Section Address 4353@cindex address, section 4354@cindex section address 4355The @var{address} is an expression for the VMA (the virtual memory 4356address) of the output section. This address is optional, but if it 4357is provided then the output address will be set exactly as specified. 4358 4359If the output address is not specified then one will be chosen for the 4360section, based on the heuristic below. This address will be adjusted 4361to fit the alignment requirement of the output section. The 4362alignment requirement is the strictest alignment of any input section 4363contained within the output section. 4364 4365The output section address heuristic is as follows: 4366 4367@itemize @bullet 4368@item 4369If an output memory @var{region} is set for the section then it 4370is added to this region and its address will be the next free address 4371in that region. 4372 4373@item 4374If the MEMORY command has been used to create a list of memory 4375regions then the first region which has attributes compatible with the 4376section is selected to contain it. The section's output address will 4377be the next free address in that region; @ref{MEMORY}. 4378 4379@item 4380If no memory regions were specified, or none match the section then 4381the output address will be based on the current value of the location 4382counter. 4383@end itemize 4384 4385@noindent 4386For example: 4387 4388@smallexample 4389.text . : @{ *(.text) @} 4390@end smallexample 4391 4392@noindent 4393and 4394 4395@smallexample 4396.text : @{ *(.text) @} 4397@end smallexample 4398 4399@noindent 4400are subtly different. The first will set the address of the 4401@samp{.text} output section to the current value of the location 4402counter. The second will set it to the current value of the location 4403counter aligned to the strictest alignment of any of the @samp{.text} 4404input sections. 4405 4406The @var{address} may be an arbitrary expression; @ref{Expressions}. 4407For example, if you want to align the section on a 0x10 byte boundary, 4408so that the lowest four bits of the section address are zero, you could 4409do something like this: 4410@smallexample 4411.text ALIGN(0x10) : @{ *(.text) @} 4412@end smallexample 4413@noindent 4414This works because @code{ALIGN} returns the current location counter 4415aligned upward to the specified value. 4416 4417Specifying @var{address} for a section will change the value of the 4418location counter, provided that the section is non-empty. (Empty 4419sections are ignored). 4420 4421@node Input Section 4422@subsection Input Section Description 4423@cindex input sections 4424@cindex mapping input sections to output sections 4425The most common output section command is an input section description. 4426 4427The input section description is the most basic linker script operation. 4428You use output sections to tell the linker how to lay out your program 4429in memory. You use input section descriptions to tell the linker how to 4430map the input files into your memory layout. 4431 4432@menu 4433* Input Section Basics:: Input section basics 4434* Input Section Wildcards:: Input section wildcard patterns 4435* Input Section Common:: Input section for common symbols 4436* Input Section Keep:: Input section and garbage collection 4437* Input Section Example:: Input section example 4438@end menu 4439 4440@node Input Section Basics 4441@subsubsection Input Section Basics 4442@cindex input section basics 4443An input section description consists of a file name optionally followed 4444by a list of section names in parentheses. 4445 4446The file name and the section name may be wildcard patterns, which we 4447describe further below (@pxref{Input Section Wildcards}). 4448 4449The most common input section description is to include all input 4450sections with a particular name in the output section. For example, to 4451include all input @samp{.text} sections, you would write: 4452@smallexample 4453*(.text) 4454@end smallexample 4455@noindent 4456Here the @samp{*} is a wildcard which matches any file name. To exclude a list 4457@cindex EXCLUDE_FILE 4458of files from matching the file name wildcard, EXCLUDE_FILE may be used to 4459match all files except the ones specified in the EXCLUDE_FILE list. For 4460example: 4461@smallexample 4462EXCLUDE_FILE (*crtend.o *otherfile.o) *(.ctors) 4463@end smallexample 4464@noindent 4465will cause all .ctors sections from all files except @file{crtend.o} 4466and @file{otherfile.o} to be included. The EXCLUDE_FILE can also be 4467placed inside the section list, for example: 4468@smallexample 4469*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors) 4470@end smallexample 4471@noindent 4472The result of this is identically to the previous example. Supporting 4473two syntaxes for EXCLUDE_FILE is useful if the section list contains 4474more than one section, as described below. 4475 4476There are two ways to include more than one section: 4477@smallexample 4478*(.text .rdata) 4479*(.text) *(.rdata) 4480@end smallexample 4481@noindent 4482The difference between these is the order in which the @samp{.text} and 4483@samp{.rdata} input sections will appear in the output section. In the 4484first example, they will be intermingled, appearing in the same order as 4485they are found in the linker input. In the second example, all 4486@samp{.text} input sections will appear first, followed by all 4487@samp{.rdata} input sections. 4488 4489When using EXCLUDE_FILE with more than one section, if the exclusion 4490is within the section list then the exclusion only applies to the 4491immediately following section, for example: 4492@smallexample 4493*(EXCLUDE_FILE (*somefile.o) .text .rdata) 4494@end smallexample 4495@noindent 4496will cause all @samp{.text} sections from all files except 4497@file{somefile.o} to be included, while all @samp{.rdata} sections 4498from all files, including @file{somefile.o}, will be included. To 4499exclude the @samp{.rdata} sections from @file{somefile.o} the example 4500could be modified to: 4501@smallexample 4502*(EXCLUDE_FILE (*somefile.o) .text EXCLUDE_FILE (*somefile.o) .rdata) 4503@end smallexample 4504@noindent 4505Alternatively, placing the EXCLUDE_FILE outside of the section list, 4506before the input file selection, will cause the exclusion to apply for 4507all sections. Thus the previous example can be rewritten as: 4508@smallexample 4509EXCLUDE_FILE (*somefile.o) *(.text .rdata) 4510@end smallexample 4511 4512You can specify a file name to include sections from a particular file. 4513You would do this if one or more of your files contain special data that 4514needs to be at a particular location in memory. For example: 4515@smallexample 4516data.o(.data) 4517@end smallexample 4518 4519To refine the sections that are included based on the section flags 4520of an input section, INPUT_SECTION_FLAGS may be used. 4521 4522Here is a simple example for using Section header flags for ELF sections: 4523 4524@smallexample 4525@group 4526SECTIONS @{ 4527 .text : @{ INPUT_SECTION_FLAGS (SHF_MERGE & SHF_STRINGS) *(.text) @} 4528 .text2 : @{ INPUT_SECTION_FLAGS (!SHF_WRITE) *(.text) @} 4529@} 4530@end group 4531@end smallexample 4532 4533In this example, the output section @samp{.text} will be comprised of any 4534input section matching the name *(.text) whose section header flags 4535@code{SHF_MERGE} and @code{SHF_STRINGS} are set. The output section 4536@samp{.text2} will be comprised of any input section matching the name *(.text) 4537whose section header flag @code{SHF_WRITE} is clear. 4538 4539You can also specify files within archives by writing a pattern 4540matching the archive, a colon, then the pattern matching the file, 4541with no whitespace around the colon. 4542 4543@table @samp 4544@item archive:file 4545matches file within archive 4546@item archive: 4547matches the whole archive 4548@item :file 4549matches file but not one in an archive 4550@end table 4551 4552Either one or both of @samp{archive} and @samp{file} can contain shell 4553wildcards. On DOS based file systems, the linker will assume that a 4554single letter followed by a colon is a drive specifier, so 4555@samp{c:myfile.o} is a simple file specification, not @samp{myfile.o} 4556within an archive called @samp{c}. @samp{archive:file} filespecs may 4557also be used within an @code{EXCLUDE_FILE} list, but may not appear in 4558other linker script contexts. For instance, you cannot extract a file 4559from an archive by using @samp{archive:file} in an @code{INPUT} 4560command. 4561 4562If you use a file name without a list of sections, then all sections in 4563the input file will be included in the output section. This is not 4564commonly done, but it may by useful on occasion. For example: 4565@smallexample 4566data.o 4567@end smallexample 4568 4569When you use a file name which is not an @samp{archive:file} specifier 4570and does not contain any wild card 4571characters, the linker will first see if you also specified the file 4572name on the linker command line or in an @code{INPUT} command. If you 4573did not, the linker will attempt to open the file as an input file, as 4574though it appeared on the command line. Note that this differs from an 4575@code{INPUT} command, because the linker will not search for the file in 4576the archive search path. 4577 4578@node Input Section Wildcards 4579@subsubsection Input Section Wildcard Patterns 4580@cindex input section wildcards 4581@cindex wildcard file name patterns 4582@cindex file name wildcard patterns 4583@cindex section name wildcard patterns 4584In an input section description, either the file name or the section 4585name or both may be wildcard patterns. 4586 4587The file name of @samp{*} seen in many examples is a simple wildcard 4588pattern for the file name. 4589 4590The wildcard patterns are like those used by the Unix shell. 4591 4592@table @samp 4593@item * 4594matches any number of characters 4595@item ? 4596matches any single character 4597@item [@var{chars}] 4598matches a single instance of any of the @var{chars}; the @samp{-} 4599character may be used to specify a range of characters, as in 4600@samp{[a-z]} to match any lower case letter 4601@item \ 4602quotes the following character 4603@end table 4604 4605When a file name is matched with a wildcard, the wildcard characters 4606will not match a @samp{/} character (used to separate directory names on 4607Unix). A pattern consisting of a single @samp{*} character is an 4608exception; it will always match any file name, whether it contains a 4609@samp{/} or not. In a section name, the wildcard characters will match 4610a @samp{/} character. 4611 4612File name wildcard patterns only match files which are explicitly 4613specified on the command line or in an @code{INPUT} command. The linker 4614does not search directories to expand wildcards. 4615 4616If a file name matches more than one wildcard pattern, or if a file name 4617appears explicitly and is also matched by a wildcard pattern, the linker 4618will use the first match in the linker script. For example, this 4619sequence of input section descriptions is probably in error, because the 4620@file{data.o} rule will not be used: 4621@smallexample 4622.data : @{ *(.data) @} 4623.data1 : @{ data.o(.data) @} 4624@end smallexample 4625 4626@cindex SORT_BY_NAME 4627Normally, the linker will place files and sections matched by wildcards 4628in the order in which they are seen during the link. You can change 4629this by using the @code{SORT_BY_NAME} keyword, which appears before a wildcard 4630pattern in parentheses (e.g., @code{SORT_BY_NAME(.text*)}). When the 4631@code{SORT_BY_NAME} keyword is used, the linker will sort the files or sections 4632into ascending order by name before placing them in the output file. 4633 4634@cindex SORT_BY_ALIGNMENT 4635@code{SORT_BY_ALIGNMENT} is similar to @code{SORT_BY_NAME}. 4636@code{SORT_BY_ALIGNMENT} will sort sections into descending order of 4637alignment before placing them in the output file. Placing larger 4638alignments before smaller alignments can reduce the amount of padding 4639needed. 4640 4641@cindex SORT_BY_INIT_PRIORITY 4642@code{SORT_BY_INIT_PRIORITY} is also similar to @code{SORT_BY_NAME}. 4643@code{SORT_BY_INIT_PRIORITY} will sort sections into ascending 4644numerical order of the GCC init_priority attribute encoded in the 4645section name before placing them in the output file. In 4646@code{.init_array.NNNNN} and @code{.fini_array.NNNNN}, @code{NNNNN} is 4647the init_priority. In @code{.ctors.NNNNN} and @code{.dtors.NNNNN}, 4648@code{NNNNN} is 65535 minus the init_priority. 4649 4650@cindex SORT 4651@code{SORT} is an alias for @code{SORT_BY_NAME}. 4652 4653When there are nested section sorting commands in linker script, there 4654can be at most 1 level of nesting for section sorting commands. 4655 4656@enumerate 4657@item 4658@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)). 4659It will sort the input sections by name first, then by alignment if two 4660sections have the same name. 4661@item 4662@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)). 4663It will sort the input sections by alignment first, then by name if two 4664sections have the same alignment. 4665@item 4666@code{SORT_BY_NAME} (@code{SORT_BY_NAME} (wildcard section pattern)) is 4667treated the same as @code{SORT_BY_NAME} (wildcard section pattern). 4668@item 4669@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)) 4670is treated the same as @code{SORT_BY_ALIGNMENT} (wildcard section pattern). 4671@item 4672All other nested section sorting commands are invalid. 4673@end enumerate 4674 4675When both command-line section sorting option and linker script 4676section sorting command are used, section sorting command always 4677takes precedence over the command-line option. 4678 4679If the section sorting command in linker script isn't nested, the 4680command-line option will make the section sorting command to be 4681treated as nested sorting command. 4682 4683@enumerate 4684@item 4685@code{SORT_BY_NAME} (wildcard section pattern ) with 4686@option{--sort-sections alignment} is equivalent to 4687@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)). 4688@item 4689@code{SORT_BY_ALIGNMENT} (wildcard section pattern) with 4690@option{--sort-section name} is equivalent to 4691@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)). 4692@end enumerate 4693 4694If the section sorting command in linker script is nested, the 4695command-line option will be ignored. 4696 4697@cindex SORT_NONE 4698@code{SORT_NONE} disables section sorting by ignoring the command-line 4699section sorting option. 4700 4701If you ever get confused about where input sections are going, use the 4702@samp{-M} linker option to generate a map file. The map file shows 4703precisely how input sections are mapped to output sections. 4704 4705This example shows how wildcard patterns might be used to partition 4706files. This linker script directs the linker to place all @samp{.text} 4707sections in @samp{.text} and all @samp{.bss} sections in @samp{.bss}. 4708The linker will place the @samp{.data} section from all files beginning 4709with an upper case character in @samp{.DATA}; for all other files, the 4710linker will place the @samp{.data} section in @samp{.data}. 4711@smallexample 4712@group 4713SECTIONS @{ 4714 .text : @{ *(.text) @} 4715 .DATA : @{ [A-Z]*(.data) @} 4716 .data : @{ *(.data) @} 4717 .bss : @{ *(.bss) @} 4718@} 4719@end group 4720@end smallexample 4721 4722@node Input Section Common 4723@subsubsection Input Section for Common Symbols 4724@cindex common symbol placement 4725@cindex uninitialized data placement 4726A special notation is needed for common symbols, because in many object 4727file formats common symbols do not have a particular input section. The 4728linker treats common symbols as though they are in an input section 4729named @samp{COMMON}. 4730 4731You may use file names with the @samp{COMMON} section just as with any 4732other input sections. You can use this to place common symbols from a 4733particular input file in one section while common symbols from other 4734input files are placed in another section. 4735 4736In most cases, common symbols in input files will be placed in the 4737@samp{.bss} section in the output file. For example: 4738@smallexample 4739.bss @{ *(.bss) *(COMMON) @} 4740@end smallexample 4741 4742@cindex scommon section 4743@cindex small common symbols 4744Some object file formats have more than one type of common symbol. For 4745example, the MIPS ELF object file format distinguishes standard common 4746symbols and small common symbols. In this case, the linker will use a 4747different special section name for other types of common symbols. In 4748the case of MIPS ELF, the linker uses @samp{COMMON} for standard common 4749symbols and @samp{.scommon} for small common symbols. This permits you 4750to map the different types of common symbols into memory at different 4751locations. 4752 4753@cindex [COMMON] 4754You will sometimes see @samp{[COMMON]} in old linker scripts. This 4755notation is now considered obsolete. It is equivalent to 4756@samp{*(COMMON)}. 4757 4758@node Input Section Keep 4759@subsubsection Input Section and Garbage Collection 4760@cindex KEEP 4761@cindex garbage collection 4762When link-time garbage collection is in use (@samp{--gc-sections}), 4763it is often useful to mark sections that should not be eliminated. 4764This is accomplished by surrounding an input section's wildcard entry 4765with @code{KEEP()}, as in @code{KEEP(*(.init))} or 4766@code{KEEP(SORT_BY_NAME(*)(.ctors))}. 4767 4768@node Input Section Example 4769@subsubsection Input Section Example 4770The following example is a complete linker script. It tells the linker 4771to read all of the sections from file @file{all.o} and place them at the 4772start of output section @samp{outputa} which starts at location 4773@samp{0x10000}. All of section @samp{.input1} from file @file{foo.o} 4774follows immediately, in the same output section. All of section 4775@samp{.input2} from @file{foo.o} goes into output section 4776@samp{outputb}, followed by section @samp{.input1} from @file{foo1.o}. 4777All of the remaining @samp{.input1} and @samp{.input2} sections from any 4778files are written to output section @samp{outputc}. 4779 4780@smallexample 4781@group 4782SECTIONS @{ 4783 outputa 0x10000 : 4784 @{ 4785 all.o 4786 foo.o (.input1) 4787 @} 4788@end group 4789@group 4790 outputb : 4791 @{ 4792 foo.o (.input2) 4793 foo1.o (.input1) 4794 @} 4795@end group 4796@group 4797 outputc : 4798 @{ 4799 *(.input1) 4800 *(.input2) 4801 @} 4802@} 4803@end group 4804@end smallexample 4805 4806If an output section's name is the same as the input section's name 4807and is representable as a C identifier, then the linker will 4808automatically @pxref{PROVIDE} two symbols: __start_SECNAME and 4809__stop_SECNAME, where SECNAME is the name of the section. These 4810indicate the start address and end address of the output section 4811respectively. Note: most section names are not representable as 4812C identifiers because they contain a @samp{.} character. 4813 4814@node Output Section Data 4815@subsection Output Section Data 4816@cindex data 4817@cindex section data 4818@cindex output section data 4819@kindex BYTE(@var{expression}) 4820@kindex SHORT(@var{expression}) 4821@kindex LONG(@var{expression}) 4822@kindex QUAD(@var{expression}) 4823@kindex SQUAD(@var{expression}) 4824You can include explicit bytes of data in an output section by using 4825@code{BYTE}, @code{SHORT}, @code{LONG}, @code{QUAD}, or @code{SQUAD} as 4826an output section command. Each keyword is followed by an expression in 4827parentheses providing the value to store (@pxref{Expressions}). The 4828value of the expression is stored at the current value of the location 4829counter. 4830 4831The @code{BYTE}, @code{SHORT}, @code{LONG}, and @code{QUAD} commands 4832store one, two, four, and eight bytes (respectively). After storing the 4833bytes, the location counter is incremented by the number of bytes 4834stored. 4835 4836For example, this will store the byte 1 followed by the four byte value 4837of the symbol @samp{addr}: 4838@smallexample 4839BYTE(1) 4840LONG(addr) 4841@end smallexample 4842 4843When using a 64 bit host or target, @code{QUAD} and @code{SQUAD} are the 4844same; they both store an 8 byte, or 64 bit, value. When both host and 4845target are 32 bits, an expression is computed as 32 bits. In this case 4846@code{QUAD} stores a 32 bit value zero extended to 64 bits, and 4847@code{SQUAD} stores a 32 bit value sign extended to 64 bits. 4848 4849If the object file format of the output file has an explicit endianness, 4850which is the normal case, the value will be stored in that endianness. 4851When the object file format does not have an explicit endianness, as is 4852true of, for example, S-records, the value will be stored in the 4853endianness of the first input object file. 4854 4855Note---these commands only work inside a section description and not 4856between them, so the following will produce an error from the linker: 4857@smallexample 4858SECTIONS @{@ .text : @{@ *(.text) @}@ LONG(1) .data : @{@ *(.data) @}@ @}@ 4859@end smallexample 4860whereas this will work: 4861@smallexample 4862SECTIONS @{@ .text : @{@ *(.text) ; LONG(1) @}@ .data : @{@ *(.data) @}@ @}@ 4863@end smallexample 4864 4865@kindex FILL(@var{expression}) 4866@cindex holes, filling 4867@cindex unspecified memory 4868You may use the @code{FILL} command to set the fill pattern for the 4869current section. It is followed by an expression in parentheses. Any 4870otherwise unspecified regions of memory within the section (for example, 4871gaps left due to the required alignment of input sections) are filled 4872with the value of the expression, repeated as 4873necessary. A @code{FILL} statement covers memory locations after the 4874point at which it occurs in the section definition; by including more 4875than one @code{FILL} statement, you can have different fill patterns in 4876different parts of an output section. 4877 4878This example shows how to fill unspecified regions of memory with the 4879value @samp{0x90}: 4880@smallexample 4881FILL(0x90909090) 4882@end smallexample 4883 4884The @code{FILL} command is similar to the @samp{=@var{fillexp}} output 4885section attribute, but it only affects the 4886part of the section following the @code{FILL} command, rather than the 4887entire section. If both are used, the @code{FILL} command takes 4888precedence. @xref{Output Section Fill}, for details on the fill 4889expression. 4890 4891@node Output Section Keywords 4892@subsection Output Section Keywords 4893There are a couple of keywords which can appear as output section 4894commands. 4895 4896@table @code 4897@kindex CREATE_OBJECT_SYMBOLS 4898@cindex input filename symbols 4899@cindex filename symbols 4900@item CREATE_OBJECT_SYMBOLS 4901The command tells the linker to create a symbol for each input file. 4902The name of each symbol will be the name of the corresponding input 4903file. The section of each symbol will be the output section in which 4904the @code{CREATE_OBJECT_SYMBOLS} command appears. 4905 4906This is conventional for the a.out object file format. It is not 4907normally used for any other object file format. 4908 4909@kindex CONSTRUCTORS 4910@cindex C++ constructors, arranging in link 4911@cindex constructors, arranging in link 4912@item CONSTRUCTORS 4913When linking using the a.out object file format, the linker uses an 4914unusual set construct to support C++ global constructors and 4915destructors. When linking object file formats which do not support 4916arbitrary sections, such as ECOFF and XCOFF, the linker will 4917automatically recognize C++ global constructors and destructors by name. 4918For these object file formats, the @code{CONSTRUCTORS} command tells the 4919linker to place constructor information in the output section where the 4920@code{CONSTRUCTORS} command appears. The @code{CONSTRUCTORS} command is 4921ignored for other object file formats. 4922 4923The symbol @w{@code{__CTOR_LIST__}} marks the start of the global 4924constructors, and the symbol @w{@code{__CTOR_END__}} marks the end. 4925Similarly, @w{@code{__DTOR_LIST__}} and @w{@code{__DTOR_END__}} mark 4926the start and end of the global destructors. The 4927first word in the list is the number of entries, followed by the address 4928of each constructor or destructor, followed by a zero word. The 4929compiler must arrange to actually run the code. For these object file 4930formats @sc{gnu} C++ normally calls constructors from a subroutine 4931@code{__main}; a call to @code{__main} is automatically inserted into 4932the startup code for @code{main}. @sc{gnu} C++ normally runs 4933destructors either by using @code{atexit}, or directly from the function 4934@code{exit}. 4935 4936For object file formats such as @code{COFF} or @code{ELF} which support 4937arbitrary section names, @sc{gnu} C++ will normally arrange to put the 4938addresses of global constructors and destructors into the @code{.ctors} 4939and @code{.dtors} sections. Placing the following sequence into your 4940linker script will build the sort of table which the @sc{gnu} C++ 4941runtime code expects to see. 4942 4943@smallexample 4944 __CTOR_LIST__ = .; 4945 LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) 4946 *(.ctors) 4947 LONG(0) 4948 __CTOR_END__ = .; 4949 __DTOR_LIST__ = .; 4950 LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) 4951 *(.dtors) 4952 LONG(0) 4953 __DTOR_END__ = .; 4954@end smallexample 4955 4956If you are using the @sc{gnu} C++ support for initialization priority, 4957which provides some control over the order in which global constructors 4958are run, you must sort the constructors at link time to ensure that they 4959are executed in the correct order. When using the @code{CONSTRUCTORS} 4960command, use @samp{SORT_BY_NAME(CONSTRUCTORS)} instead. When using the 4961@code{.ctors} and @code{.dtors} sections, use @samp{*(SORT_BY_NAME(.ctors))} and 4962@samp{*(SORT_BY_NAME(.dtors))} instead of just @samp{*(.ctors)} and 4963@samp{*(.dtors)}. 4964 4965Normally the compiler and linker will handle these issues automatically, 4966and you will not need to concern yourself with them. However, you may 4967need to consider this if you are using C++ and writing your own linker 4968scripts. 4969 4970@end table 4971 4972@node Output Section Discarding 4973@subsection Output Section Discarding 4974@cindex discarding sections 4975@cindex sections, discarding 4976@cindex removing sections 4977The linker will not normally create output sections with no contents. 4978This is for convenience when referring to input sections that may or 4979may not be present in any of the input files. For example: 4980@smallexample 4981.foo : @{ *(.foo) @} 4982@end smallexample 4983@noindent 4984will only create a @samp{.foo} section in the output file if there is a 4985@samp{.foo} section in at least one input file, and if the input 4986sections are not all empty. Other link script directives that allocate 4987space in an output section will also create the output section. So 4988too will assignments to dot even if the assignment does not create 4989space, except for @samp{. = 0}, @samp{. = . + 0}, @samp{. = sym}, 4990@samp{. = . + sym} and @samp{. = ALIGN (. != 0, expr, 1)} when 4991@samp{sym} is an absolute symbol of value 0 defined in the script. 4992This allows you to force output of an empty section with @samp{. = .}. 4993 4994The linker will ignore address assignments (@pxref{Output Section Address}) 4995on discarded output sections, except when the linker script defines 4996symbols in the output section. In that case the linker will obey 4997the address assignments, possibly advancing dot even though the 4998section is discarded. 4999 5000@cindex /DISCARD/ 5001The special output section name @samp{/DISCARD/} may be used to discard 5002input sections. Any input sections which are assigned to an output 5003section named @samp{/DISCARD/} are not included in the output file. 5004 5005Note, sections that match the @samp{/DISCARD/} output section will be 5006discarded even if they are in an ELF section group which has other 5007members which are not being discarded. This is deliberate. 5008Discarding takes precedence over grouping. 5009 5010@node Output Section Attributes 5011@subsection Output Section Attributes 5012@cindex output section attributes 5013We showed above that the full description of an output section looked 5014like this: 5015 5016@smallexample 5017@group 5018@var{section} [@var{address}] [(@var{type})] : 5019 [AT(@var{lma})] 5020 [ALIGN(@var{section_align}) | ALIGN_WITH_INPUT] 5021 [SUBALIGN(@var{subsection_align})] 5022 [@var{constraint}] 5023 @{ 5024 @var{output-section-command} 5025 @var{output-section-command} 5026 @dots{} 5027 @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}] 5028@end group 5029@end smallexample 5030 5031We've already described @var{section}, @var{address}, and 5032@var{output-section-command}. In this section we will describe the 5033remaining section attributes. 5034 5035@menu 5036* Output Section Type:: Output section type 5037* Output Section LMA:: Output section LMA 5038* Forced Output Alignment:: Forced Output Alignment 5039* Forced Input Alignment:: Forced Input Alignment 5040* Output Section Constraint:: Output section constraint 5041* Output Section Region:: Output section region 5042* Output Section Phdr:: Output section phdr 5043* Output Section Fill:: Output section fill 5044@end menu 5045 5046@node Output Section Type 5047@subsubsection Output Section Type 5048Each output section may have a type. The type is a keyword in 5049parentheses. The following types are defined: 5050 5051@table @code 5052@item NOLOAD 5053The section should be marked as not loadable, so that it will not be 5054loaded into memory when the program is run. 5055@item DSECT 5056@itemx COPY 5057@itemx INFO 5058@itemx OVERLAY 5059These type names are supported for backward compatibility, and are 5060rarely used. They all have the same effect: the section should be 5061marked as not allocatable, so that no memory is allocated for the 5062section when the program is run. 5063@end table 5064 5065@kindex NOLOAD 5066@cindex prevent unnecessary loading 5067@cindex loading, preventing 5068The linker normally sets the attributes of an output section based on 5069the input sections which map into it. You can override this by using 5070the section type. For example, in the script sample below, the 5071@samp{ROM} section is addressed at memory location @samp{0} and does not 5072need to be loaded when the program is run. 5073@smallexample 5074@group 5075SECTIONS @{ 5076 ROM 0 (NOLOAD) : @{ @dots{} @} 5077 @dots{} 5078@} 5079@end group 5080@end smallexample 5081 5082@node Output Section LMA 5083@subsubsection Output Section LMA 5084@kindex AT>@var{lma_region} 5085@kindex AT(@var{lma}) 5086@cindex load address 5087@cindex section load address 5088Every section has a virtual address (VMA) and a load address (LMA); see 5089@ref{Basic Script Concepts}. The virtual address is specified by the 5090@pxref{Output Section Address} described earlier. The load address is 5091specified by the @code{AT} or @code{AT>} keywords. Specifying a load 5092address is optional. 5093 5094The @code{AT} keyword takes an expression as an argument. This 5095specifies the exact load address of the section. The @code{AT>} keyword 5096takes the name of a memory region as an argument. @xref{MEMORY}. The 5097load address of the section is set to the next free address in the 5098region, aligned to the section's alignment requirements. 5099 5100If neither @code{AT} nor @code{AT>} is specified for an allocatable 5101section, the linker will use the following heuristic to determine the 5102load address: 5103 5104@itemize @bullet 5105@item 5106If the section has a specific VMA address, then this is used as 5107the LMA address as well. 5108 5109@item 5110If the section is not allocatable then its LMA is set to its VMA. 5111 5112@item 5113Otherwise if a memory region can be found that is compatible 5114with the current section, and this region contains at least one 5115section, then the LMA is set so the difference between the 5116VMA and LMA is the same as the difference between the VMA and LMA of 5117the last section in the located region. 5118 5119@item 5120If no memory regions have been declared then a default region 5121that covers the entire address space is used in the previous step. 5122 5123@item 5124If no suitable region could be found, or there was no previous 5125section then the LMA is set equal to the VMA. 5126@end itemize 5127 5128@cindex ROM initialized data 5129@cindex initialized data in ROM 5130This feature is designed to make it easy to build a ROM image. For 5131example, the following linker script creates three output sections: one 5132called @samp{.text}, which starts at @code{0x1000}, one called 5133@samp{.mdata}, which is loaded at the end of the @samp{.text} section 5134even though its VMA is @code{0x2000}, and one called @samp{.bss} to hold 5135uninitialized data at address @code{0x3000}. The symbol @code{_data} is 5136defined with the value @code{0x2000}, which shows that the location 5137counter holds the VMA value, not the LMA value. 5138 5139@smallexample 5140@group 5141SECTIONS 5142 @{ 5143 .text 0x1000 : @{ *(.text) _etext = . ; @} 5144 .mdata 0x2000 : 5145 AT ( ADDR (.text) + SIZEOF (.text) ) 5146 @{ _data = . ; *(.data); _edata = . ; @} 5147 .bss 0x3000 : 5148 @{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;@} 5149@} 5150@end group 5151@end smallexample 5152 5153The run-time initialization code for use with a program generated with 5154this linker script would include something like the following, to copy 5155the initialized data from the ROM image to its runtime address. Notice 5156how this code takes advantage of the symbols defined by the linker 5157script. 5158 5159@smallexample 5160@group 5161extern char _etext, _data, _edata, _bstart, _bend; 5162char *src = &_etext; 5163char *dst = &_data; 5164 5165/* ROM has data at end of text; copy it. */ 5166while (dst < &_edata) 5167 *dst++ = *src++; 5168 5169/* Zero bss. */ 5170for (dst = &_bstart; dst< &_bend; dst++) 5171 *dst = 0; 5172@end group 5173@end smallexample 5174 5175@node Forced Output Alignment 5176@subsubsection Forced Output Alignment 5177@kindex ALIGN(@var{section_align}) 5178@cindex forcing output section alignment 5179@cindex output section alignment 5180You can increase an output section's alignment by using ALIGN. As an 5181alternative you can enforce that the difference between the VMA and LMA remains 5182intact throughout this output section with the ALIGN_WITH_INPUT attribute. 5183 5184@node Forced Input Alignment 5185@subsubsection Forced Input Alignment 5186@kindex SUBALIGN(@var{subsection_align}) 5187@cindex forcing input section alignment 5188@cindex input section alignment 5189You can force input section alignment within an output section by using 5190SUBALIGN. The value specified overrides any alignment given by input 5191sections, whether larger or smaller. 5192 5193@node Output Section Constraint 5194@subsubsection Output Section Constraint 5195@kindex ONLY_IF_RO 5196@kindex ONLY_IF_RW 5197@cindex constraints on output sections 5198You can specify that an output section should only be created if all 5199of its input sections are read-only or all of its input sections are 5200read-write by using the keyword @code{ONLY_IF_RO} and 5201@code{ONLY_IF_RW} respectively. 5202 5203@node Output Section Region 5204@subsubsection Output Section Region 5205@kindex >@var{region} 5206@cindex section, assigning to memory region 5207@cindex memory regions and sections 5208You can assign a section to a previously defined region of memory by 5209using @samp{>@var{region}}. @xref{MEMORY}. 5210 5211Here is a simple example: 5212@smallexample 5213@group 5214MEMORY @{ rom : ORIGIN = 0x1000, LENGTH = 0x1000 @} 5215SECTIONS @{ ROM : @{ *(.text) @} >rom @} 5216@end group 5217@end smallexample 5218 5219@node Output Section Phdr 5220@subsubsection Output Section Phdr 5221@kindex :@var{phdr} 5222@cindex section, assigning to program header 5223@cindex program headers and sections 5224You can assign a section to a previously defined program segment by 5225using @samp{:@var{phdr}}. @xref{PHDRS}. If a section is assigned to 5226one or more segments, then all subsequent allocated sections will be 5227assigned to those segments as well, unless they use an explicitly 5228@code{:@var{phdr}} modifier. You can use @code{:NONE} to tell the 5229linker to not put the section in any segment at all. 5230 5231Here is a simple example: 5232@smallexample 5233@group 5234PHDRS @{ text PT_LOAD ; @} 5235SECTIONS @{ .text : @{ *(.text) @} :text @} 5236@end group 5237@end smallexample 5238 5239@node Output Section Fill 5240@subsubsection Output Section Fill 5241@kindex =@var{fillexp} 5242@cindex section fill pattern 5243@cindex fill pattern, entire section 5244You can set the fill pattern for an entire section by using 5245@samp{=@var{fillexp}}. @var{fillexp} is an expression 5246(@pxref{Expressions}). Any otherwise unspecified regions of memory 5247within the output section (for example, gaps left due to the required 5248alignment of input sections) will be filled with the value, repeated as 5249necessary. If the fill expression is a simple hex number, ie. a string 5250of hex digit starting with @samp{0x} and without a trailing @samp{k} or @samp{M}, then 5251an arbitrarily long sequence of hex digits can be used to specify the 5252fill pattern; Leading zeros become part of the pattern too. For all 5253other cases, including extra parentheses or a unary @code{+}, the fill 5254pattern is the four least significant bytes of the value of the 5255expression. In all cases, the number is big-endian. 5256 5257You can also change the fill value with a @code{FILL} command in the 5258output section commands; (@pxref{Output Section Data}). 5259 5260Here is a simple example: 5261@smallexample 5262@group 5263SECTIONS @{ .text : @{ *(.text) @} =0x90909090 @} 5264@end group 5265@end smallexample 5266 5267@node Overlay Description 5268@subsection Overlay Description 5269@kindex OVERLAY 5270@cindex overlays 5271An overlay description provides an easy way to describe sections which 5272are to be loaded as part of a single memory image but are to be run at 5273the same memory address. At run time, some sort of overlay manager will 5274copy the overlaid sections in and out of the runtime memory address as 5275required, perhaps by simply manipulating addressing bits. This approach 5276can be useful, for example, when a certain region of memory is faster 5277than another. 5278 5279Overlays are described using the @code{OVERLAY} command. The 5280@code{OVERLAY} command is used within a @code{SECTIONS} command, like an 5281output section description. The full syntax of the @code{OVERLAY} 5282command is as follows: 5283@smallexample 5284@group 5285OVERLAY [@var{start}] : [NOCROSSREFS] [AT ( @var{ldaddr} )] 5286 @{ 5287 @var{secname1} 5288 @{ 5289 @var{output-section-command} 5290 @var{output-section-command} 5291 @dots{} 5292 @} [:@var{phdr}@dots{}] [=@var{fill}] 5293 @var{secname2} 5294 @{ 5295 @var{output-section-command} 5296 @var{output-section-command} 5297 @dots{} 5298 @} [:@var{phdr}@dots{}] [=@var{fill}] 5299 @dots{} 5300 @} [>@var{region}] [:@var{phdr}@dots{}] [=@var{fill}] [,] 5301@end group 5302@end smallexample 5303 5304Everything is optional except @code{OVERLAY} (a keyword), and each 5305section must have a name (@var{secname1} and @var{secname2} above). The 5306section definitions within the @code{OVERLAY} construct are identical to 5307those within the general @code{SECTIONS} construct (@pxref{SECTIONS}), 5308except that no addresses and no memory regions may be defined for 5309sections within an @code{OVERLAY}. 5310 5311The comma at the end may be required if a @var{fill} is used and 5312the next @var{sections-command} looks like a continuation of the expression. 5313 5314The sections are all defined with the same starting address. The load 5315addresses of the sections are arranged such that they are consecutive in 5316memory starting at the load address used for the @code{OVERLAY} as a 5317whole (as with normal section definitions, the load address is optional, 5318and defaults to the start address; the start address is also optional, 5319and defaults to the current value of the location counter). 5320 5321If the @code{NOCROSSREFS} keyword is used, and there are any 5322references among the sections, the linker will report an error. Since 5323the sections all run at the same address, it normally does not make 5324sense for one section to refer directly to another. 5325@xref{Miscellaneous Commands, NOCROSSREFS}. 5326 5327For each section within the @code{OVERLAY}, the linker automatically 5328provides two symbols. The symbol @code{__load_start_@var{secname}} is 5329defined as the starting load address of the section. The symbol 5330@code{__load_stop_@var{secname}} is defined as the final load address of 5331the section. Any characters within @var{secname} which are not legal 5332within C identifiers are removed. C (or assembler) code may use these 5333symbols to move the overlaid sections around as necessary. 5334 5335At the end of the overlay, the value of the location counter is set to 5336the start address of the overlay plus the size of the largest section. 5337 5338Here is an example. Remember that this would appear inside a 5339@code{SECTIONS} construct. 5340@smallexample 5341@group 5342 OVERLAY 0x1000 : AT (0x4000) 5343 @{ 5344 .text0 @{ o1/*.o(.text) @} 5345 .text1 @{ o2/*.o(.text) @} 5346 @} 5347@end group 5348@end smallexample 5349@noindent 5350This will define both @samp{.text0} and @samp{.text1} to start at 5351address 0x1000. @samp{.text0} will be loaded at address 0x4000, and 5352@samp{.text1} will be loaded immediately after @samp{.text0}. The 5353following symbols will be defined if referenced: @code{__load_start_text0}, 5354@code{__load_stop_text0}, @code{__load_start_text1}, 5355@code{__load_stop_text1}. 5356 5357C code to copy overlay @code{.text1} into the overlay area might look 5358like the following. 5359 5360@smallexample 5361@group 5362 extern char __load_start_text1, __load_stop_text1; 5363 memcpy ((char *) 0x1000, &__load_start_text1, 5364 &__load_stop_text1 - &__load_start_text1); 5365@end group 5366@end smallexample 5367 5368Note that the @code{OVERLAY} command is just syntactic sugar, since 5369everything it does can be done using the more basic commands. The above 5370example could have been written identically as follows. 5371 5372@smallexample 5373@group 5374 .text0 0x1000 : AT (0x4000) @{ o1/*.o(.text) @} 5375 PROVIDE (__load_start_text0 = LOADADDR (.text0)); 5376 PROVIDE (__load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0)); 5377 .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) @{ o2/*.o(.text) @} 5378 PROVIDE (__load_start_text1 = LOADADDR (.text1)); 5379 PROVIDE (__load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1)); 5380 . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); 5381@end group 5382@end smallexample 5383 5384@node MEMORY 5385@section MEMORY Command 5386@kindex MEMORY 5387@cindex memory regions 5388@cindex regions of memory 5389@cindex allocating memory 5390@cindex discontinuous memory 5391The linker's default configuration permits allocation of all available 5392memory. You can override this by using the @code{MEMORY} command. 5393 5394The @code{MEMORY} command describes the location and size of blocks of 5395memory in the target. You can use it to describe which memory regions 5396may be used by the linker, and which memory regions it must avoid. You 5397can then assign sections to particular memory regions. The linker will 5398set section addresses based on the memory regions, and will warn about 5399regions that become too full. The linker will not shuffle sections 5400around to fit into the available regions. 5401 5402A linker script may contain many uses of the @code{MEMORY} command, 5403however, all memory blocks defined are treated as if they were 5404specified inside a single @code{MEMORY} command. The syntax for 5405@code{MEMORY} is: 5406@smallexample 5407@group 5408MEMORY 5409 @{ 5410 @var{name} [(@var{attr})] : ORIGIN = @var{origin}, LENGTH = @var{len} 5411 @dots{} 5412 @} 5413@end group 5414@end smallexample 5415 5416The @var{name} is a name used in the linker script to refer to the 5417region. The region name has no meaning outside of the linker script. 5418Region names are stored in a separate name space, and will not conflict 5419with symbol names, file names, or section names. Each memory region 5420must have a distinct name within the @code{MEMORY} command. However you can 5421add later alias names to existing memory regions with the @ref{REGION_ALIAS} 5422command. 5423 5424@cindex memory region attributes 5425The @var{attr} string is an optional list of attributes that specify 5426whether to use a particular memory region for an input section which is 5427not explicitly mapped in the linker script. As described in 5428@ref{SECTIONS}, if you do not specify an output section for some input 5429section, the linker will create an output section with the same name as 5430the input section. If you define region attributes, the linker will use 5431them to select the memory region for the output section that it creates. 5432 5433The @var{attr} string must consist only of the following characters: 5434@table @samp 5435@item R 5436Read-only section 5437@item W 5438Read/write section 5439@item X 5440Executable section 5441@item A 5442Allocatable section 5443@item I 5444Initialized section 5445@item L 5446Same as @samp{I} 5447@item ! 5448Invert the sense of any of the attributes that follow 5449@end table 5450 5451If an unmapped section matches any of the listed attributes other than 5452@samp{!}, it will be placed in the memory region. The @samp{!} 5453attribute reverses the test for the characters that follow, so that an 5454unmapped section will be placed in the memory region only if it does 5455not match any of the attributes listed afterwards. Thus an attribute 5456string of @samp{RW!X} will match any unmapped section that has either 5457or both of the @samp{R} and @samp{W} attributes, but only as long as 5458the section does not also have the @samp{X} attribute. 5459 5460@kindex ORIGIN = 5461@kindex o = 5462@kindex org = 5463The @var{origin} is an numerical expression for the start address of 5464the memory region. The expression must evaluate to a constant and it 5465cannot involve any symbols. The keyword @code{ORIGIN} may be 5466abbreviated to @code{org} or @code{o} (but not, for example, 5467@code{ORG}). 5468 5469@kindex LENGTH = 5470@kindex len = 5471@kindex l = 5472The @var{len} is an expression for the size in bytes of the memory 5473region. As with the @var{origin} expression, the expression must 5474be numerical only and must evaluate to a constant. The keyword 5475@code{LENGTH} may be abbreviated to @code{len} or @code{l}. 5476 5477In the following example, we specify that there are two memory regions 5478available for allocation: one starting at @samp{0} for 256 kilobytes, 5479and the other starting at @samp{0x40000000} for four megabytes. The 5480linker will place into the @samp{rom} memory region every section which 5481is not explicitly mapped into a memory region, and is either read-only 5482or executable. The linker will place other sections which are not 5483explicitly mapped into a memory region into the @samp{ram} memory 5484region. 5485 5486@smallexample 5487@group 5488MEMORY 5489 @{ 5490 rom (rx) : ORIGIN = 0, LENGTH = 256K 5491 ram (!rx) : org = 0x40000000, l = 4M 5492 @} 5493@end group 5494@end smallexample 5495 5496Once you define a memory region, you can direct the linker to place 5497specific output sections into that memory region by using the 5498@samp{>@var{region}} output section attribute. For example, if you have 5499a memory region named @samp{mem}, you would use @samp{>mem} in the 5500output section definition. @xref{Output Section Region}. If no address 5501was specified for the output section, the linker will set the address to 5502the next available address within the memory region. If the combined 5503output sections directed to a memory region are too large for the 5504region, the linker will issue an error message. 5505 5506It is possible to access the origin and length of a memory in an 5507expression via the @code{ORIGIN(@var{memory})} and 5508@code{LENGTH(@var{memory})} functions: 5509 5510@smallexample 5511@group 5512 _fstack = ORIGIN(ram) + LENGTH(ram) - 4; 5513@end group 5514@end smallexample 5515 5516@node PHDRS 5517@section PHDRS Command 5518@kindex PHDRS 5519@cindex program headers 5520@cindex ELF program headers 5521@cindex program segments 5522@cindex segments, ELF 5523The ELF object file format uses @dfn{program headers}, also knows as 5524@dfn{segments}. The program headers describe how the program should be 5525loaded into memory. You can print them out by using the @code{objdump} 5526program with the @samp{-p} option. 5527 5528When you run an ELF program on a native ELF system, the system loader 5529reads the program headers in order to figure out how to load the 5530program. This will only work if the program headers are set correctly. 5531This manual does not describe the details of how the system loader 5532interprets program headers; for more information, see the ELF ABI. 5533 5534The linker will create reasonable program headers by default. However, 5535in some cases, you may need to specify the program headers more 5536precisely. You may use the @code{PHDRS} command for this purpose. When 5537the linker sees the @code{PHDRS} command in the linker script, it will 5538not create any program headers other than the ones specified. 5539 5540The linker only pays attention to the @code{PHDRS} command when 5541generating an ELF output file. In other cases, the linker will simply 5542ignore @code{PHDRS}. 5543 5544This is the syntax of the @code{PHDRS} command. The words @code{PHDRS}, 5545@code{FILEHDR}, @code{AT}, and @code{FLAGS} are keywords. 5546 5547@smallexample 5548@group 5549PHDRS 5550@{ 5551 @var{name} @var{type} [ FILEHDR ] [ PHDRS ] [ AT ( @var{address} ) ] 5552 [ FLAGS ( @var{flags} ) ] ; 5553@} 5554@end group 5555@end smallexample 5556 5557The @var{name} is used only for reference in the @code{SECTIONS} command 5558of the linker script. It is not put into the output file. Program 5559header names are stored in a separate name space, and will not conflict 5560with symbol names, file names, or section names. Each program header 5561must have a distinct name. The headers are processed in order and it 5562is usual for them to map to sections in ascending load address order. 5563 5564Certain program header types describe segments of memory which the 5565system loader will load from the file. In the linker script, you 5566specify the contents of these segments by placing allocatable output 5567sections in the segments. You use the @samp{:@var{phdr}} output section 5568attribute to place a section in a particular segment. @xref{Output 5569Section Phdr}. 5570 5571It is normal to put certain sections in more than one segment. This 5572merely implies that one segment of memory contains another. You may 5573repeat @samp{:@var{phdr}}, using it once for each segment which should 5574contain the section. 5575 5576If you place a section in one or more segments using @samp{:@var{phdr}}, 5577then the linker will place all subsequent allocatable sections which do 5578not specify @samp{:@var{phdr}} in the same segments. This is for 5579convenience, since generally a whole set of contiguous sections will be 5580placed in a single segment. You can use @code{:NONE} to override the 5581default segment and tell the linker to not put the section in any 5582segment at all. 5583 5584@kindex FILEHDR 5585@kindex PHDRS 5586You may use the @code{FILEHDR} and @code{PHDRS} keywords after 5587the program header type to further describe the contents of the segment. 5588The @code{FILEHDR} keyword means that the segment should include the ELF 5589file header. The @code{PHDRS} keyword means that the segment should 5590include the ELF program headers themselves. If applied to a loadable 5591segment (@code{PT_LOAD}), all prior loadable segments must have one of 5592these keywords. 5593 5594The @var{type} may be one of the following. The numbers indicate the 5595value of the keyword. 5596 5597@table @asis 5598@item @code{PT_NULL} (0) 5599Indicates an unused program header. 5600 5601@item @code{PT_LOAD} (1) 5602Indicates that this program header describes a segment to be loaded from 5603the file. 5604 5605@item @code{PT_DYNAMIC} (2) 5606Indicates a segment where dynamic linking information can be found. 5607 5608@item @code{PT_INTERP} (3) 5609Indicates a segment where the name of the program interpreter may be 5610found. 5611 5612@item @code{PT_NOTE} (4) 5613Indicates a segment holding note information. 5614 5615@item @code{PT_SHLIB} (5) 5616A reserved program header type, defined but not specified by the ELF 5617ABI. 5618 5619@item @code{PT_PHDR} (6) 5620Indicates a segment where the program headers may be found. 5621 5622@item @code{PT_TLS} (7) 5623Indicates a segment containing thread local storage. 5624 5625@item @var{expression} 5626An expression giving the numeric type of the program header. This may 5627be used for types not defined above. 5628@end table 5629 5630You can specify that a segment should be loaded at a particular address 5631in memory by using an @code{AT} expression. This is identical to the 5632@code{AT} command used as an output section attribute (@pxref{Output 5633Section LMA}). The @code{AT} command for a program header overrides the 5634output section attribute. 5635 5636The linker will normally set the segment flags based on the sections 5637which comprise the segment. You may use the @code{FLAGS} keyword to 5638explicitly specify the segment flags. The value of @var{flags} must be 5639an integer. It is used to set the @code{p_flags} field of the program 5640header. 5641 5642Here is an example of @code{PHDRS}. This shows a typical set of program 5643headers used on a native ELF system. 5644 5645@example 5646@group 5647PHDRS 5648@{ 5649 headers PT_PHDR PHDRS ; 5650 interp PT_INTERP ; 5651 text PT_LOAD FILEHDR PHDRS ; 5652 data PT_LOAD ; 5653 dynamic PT_DYNAMIC ; 5654@} 5655 5656SECTIONS 5657@{ 5658 . = SIZEOF_HEADERS; 5659 .interp : @{ *(.interp) @} :text :interp 5660 .text : @{ *(.text) @} :text 5661 .rodata : @{ *(.rodata) @} /* defaults to :text */ 5662 @dots{} 5663 . = . + 0x1000; /* move to a new page in memory */ 5664 .data : @{ *(.data) @} :data 5665 .dynamic : @{ *(.dynamic) @} :data :dynamic 5666 @dots{} 5667@} 5668@end group 5669@end example 5670 5671@node VERSION 5672@section VERSION Command 5673@kindex VERSION @{script text@} 5674@cindex symbol versions 5675@cindex version script 5676@cindex versions of symbols 5677The linker supports symbol versions when using ELF. Symbol versions are 5678only useful when using shared libraries. The dynamic linker can use 5679symbol versions to select a specific version of a function when it runs 5680a program that may have been linked against an earlier version of the 5681shared library. 5682 5683You can include a version script directly in the main linker script, or 5684you can supply the version script as an implicit linker script. You can 5685also use the @samp{--version-script} linker option. 5686 5687The syntax of the @code{VERSION} command is simply 5688@smallexample 5689VERSION @{ version-script-commands @} 5690@end smallexample 5691 5692The format of the version script commands is identical to that used by 5693Sun's linker in Solaris 2.5. The version script defines a tree of 5694version nodes. You specify the node names and interdependencies in the 5695version script. You can specify which symbols are bound to which 5696version nodes, and you can reduce a specified set of symbols to local 5697scope so that they are not globally visible outside of the shared 5698library. 5699 5700The easiest way to demonstrate the version script language is with a few 5701examples. 5702 5703@smallexample 5704VERS_1.1 @{ 5705 global: 5706 foo1; 5707 local: 5708 old*; 5709 original*; 5710 new*; 5711@}; 5712 5713VERS_1.2 @{ 5714 foo2; 5715@} VERS_1.1; 5716 5717VERS_2.0 @{ 5718 bar1; bar2; 5719 extern "C++" @{ 5720 ns::*; 5721 "f(int, double)"; 5722 @}; 5723@} VERS_1.2; 5724@end smallexample 5725 5726This example version script defines three version nodes. The first 5727version node defined is @samp{VERS_1.1}; it has no other dependencies. 5728The script binds the symbol @samp{foo1} to @samp{VERS_1.1}. It reduces 5729a number of symbols to local scope so that they are not visible outside 5730of the shared library; this is done using wildcard patterns, so that any 5731symbol whose name begins with @samp{old}, @samp{original}, or @samp{new} 5732is matched. The wildcard patterns available are the same as those used 5733in the shell when matching filenames (also known as ``globbing''). 5734However, if you specify the symbol name inside double quotes, then the 5735name is treated as literal, rather than as a glob pattern. 5736 5737Next, the version script defines node @samp{VERS_1.2}. This node 5738depends upon @samp{VERS_1.1}. The script binds the symbol @samp{foo2} 5739to the version node @samp{VERS_1.2}. 5740 5741Finally, the version script defines node @samp{VERS_2.0}. This node 5742depends upon @samp{VERS_1.2}. The scripts binds the symbols @samp{bar1} 5743and @samp{bar2} are bound to the version node @samp{VERS_2.0}. 5744 5745When the linker finds a symbol defined in a library which is not 5746specifically bound to a version node, it will effectively bind it to an 5747unspecified base version of the library. You can bind all otherwise 5748unspecified symbols to a given version node by using @samp{global: *;} 5749somewhere in the version script. Note that it's slightly crazy to use 5750wildcards in a global spec except on the last version node. Global 5751wildcards elsewhere run the risk of accidentally adding symbols to the 5752set exported for an old version. That's wrong since older versions 5753ought to have a fixed set of symbols. 5754 5755The names of the version nodes have no specific meaning other than what 5756they might suggest to the person reading them. The @samp{2.0} version 5757could just as well have appeared in between @samp{1.1} and @samp{1.2}. 5758However, this would be a confusing way to write a version script. 5759 5760Node name can be omitted, provided it is the only version node 5761in the version script. Such version script doesn't assign any versions to 5762symbols, only selects which symbols will be globally visible out and which 5763won't. 5764 5765@smallexample 5766@{ global: foo; bar; local: *; @}; 5767@end smallexample 5768 5769When you link an application against a shared library that has versioned 5770symbols, the application itself knows which version of each symbol it 5771requires, and it also knows which version nodes it needs from each 5772shared library it is linked against. Thus at runtime, the dynamic 5773loader can make a quick check to make sure that the libraries you have 5774linked against do in fact supply all of the version nodes that the 5775application will need to resolve all of the dynamic symbols. In this 5776way it is possible for the dynamic linker to know with certainty that 5777all external symbols that it needs will be resolvable without having to 5778search for each symbol reference. 5779 5780The symbol versioning is in effect a much more sophisticated way of 5781doing minor version checking that SunOS does. The fundamental problem 5782that is being addressed here is that typically references to external 5783functions are bound on an as-needed basis, and are not all bound when 5784the application starts up. If a shared library is out of date, a 5785required interface may be missing; when the application tries to use 5786that interface, it may suddenly and unexpectedly fail. With symbol 5787versioning, the user will get a warning when they start their program if 5788the libraries being used with the application are too old. 5789 5790There are several GNU extensions to Sun's versioning approach. The 5791first of these is the ability to bind a symbol to a version node in the 5792source file where the symbol is defined instead of in the versioning 5793script. This was done mainly to reduce the burden on the library 5794maintainer. You can do this by putting something like: 5795@smallexample 5796__asm__(".symver original_foo,foo@@VERS_1.1"); 5797@end smallexample 5798@noindent 5799in the C source file. This renames the function @samp{original_foo} to 5800be an alias for @samp{foo} bound to the version node @samp{VERS_1.1}. 5801The @samp{local:} directive can be used to prevent the symbol 5802@samp{original_foo} from being exported. A @samp{.symver} directive 5803takes precedence over a version script. 5804 5805The second GNU extension is to allow multiple versions of the same 5806function to appear in a given shared library. In this way you can make 5807an incompatible change to an interface without increasing the major 5808version number of the shared library, while still allowing applications 5809linked against the old interface to continue to function. 5810 5811To do this, you must use multiple @samp{.symver} directives in the 5812source file. Here is an example: 5813 5814@smallexample 5815__asm__(".symver original_foo,foo@@"); 5816__asm__(".symver old_foo,foo@@VERS_1.1"); 5817__asm__(".symver old_foo1,foo@@VERS_1.2"); 5818__asm__(".symver new_foo,foo@@@@VERS_2.0"); 5819@end smallexample 5820 5821In this example, @samp{foo@@} represents the symbol @samp{foo} bound to the 5822unspecified base version of the symbol. The source file that contains this 5823example would define 4 C functions: @samp{original_foo}, @samp{old_foo}, 5824@samp{old_foo1}, and @samp{new_foo}. 5825 5826When you have multiple definitions of a given symbol, there needs to be 5827some way to specify a default version to which external references to 5828this symbol will be bound. You can do this with the 5829@samp{foo@@@@VERS_2.0} type of @samp{.symver} directive. You can only 5830declare one version of a symbol as the default in this manner; otherwise 5831you would effectively have multiple definitions of the same symbol. 5832 5833If you wish to bind a reference to a specific version of the symbol 5834within the shared library, you can use the aliases of convenience 5835(i.e., @samp{old_foo}), or you can use the @samp{.symver} directive to 5836specifically bind to an external version of the function in question. 5837 5838You can also specify the language in the version script: 5839 5840@smallexample 5841VERSION extern "lang" @{ version-script-commands @} 5842@end smallexample 5843 5844The supported @samp{lang}s are @samp{C}, @samp{C++}, and @samp{Java}. 5845The linker will iterate over the list of symbols at the link time and 5846demangle them according to @samp{lang} before matching them to the 5847patterns specified in @samp{version-script-commands}. The default 5848@samp{lang} is @samp{C}. 5849 5850Demangled names may contains spaces and other special characters. As 5851described above, you can use a glob pattern to match demangled names, 5852or you can use a double-quoted string to match the string exactly. In 5853the latter case, be aware that minor differences (such as differing 5854whitespace) between the version script and the demangler output will 5855cause a mismatch. As the exact string generated by the demangler 5856might change in the future, even if the mangled name does not, you 5857should check that all of your version directives are behaving as you 5858expect when you upgrade. 5859 5860@node Expressions 5861@section Expressions in Linker Scripts 5862@cindex expressions 5863@cindex arithmetic 5864The syntax for expressions in the linker script language is identical to 5865that of C expressions. All expressions are evaluated as integers. All 5866expressions are evaluated in the same size, which is 32 bits if both the 5867host and target are 32 bits, and is otherwise 64 bits. 5868 5869You can use and set symbol values in expressions. 5870 5871The linker defines several special purpose builtin functions for use in 5872expressions. 5873 5874@menu 5875* Constants:: Constants 5876* Symbolic Constants:: Symbolic constants 5877* Symbols:: Symbol Names 5878* Orphan Sections:: Orphan Sections 5879* Location Counter:: The Location Counter 5880* Operators:: Operators 5881* Evaluation:: Evaluation 5882* Expression Section:: The Section of an Expression 5883* Builtin Functions:: Builtin Functions 5884@end menu 5885 5886@node Constants 5887@subsection Constants 5888@cindex integer notation 5889@cindex constants in linker scripts 5890All constants are integers. 5891 5892As in C, the linker considers an integer beginning with @samp{0} to be 5893octal, and an integer beginning with @samp{0x} or @samp{0X} to be 5894hexadecimal. Alternatively the linker accepts suffixes of @samp{h} or 5895@samp{H} for hexadecimal, @samp{o} or @samp{O} for octal, @samp{b} or 5896@samp{B} for binary and @samp{d} or @samp{D} for decimal. Any integer 5897value without a prefix or a suffix is considered to be decimal. 5898 5899@cindex scaled integers 5900@cindex K and M integer suffixes 5901@cindex M and K integer suffixes 5902@cindex suffixes for integers 5903@cindex integer suffixes 5904In addition, you can use the suffixes @code{K} and @code{M} to scale a 5905constant by 5906@c TEXI2ROFF-KILL 5907@ifnottex 5908@c END TEXI2ROFF-KILL 5909@code{1024} or @code{1024*1024} 5910@c TEXI2ROFF-KILL 5911@end ifnottex 5912@tex 5913${\rm 1024}$ or ${\rm 1024}^2$ 5914@end tex 5915@c END TEXI2ROFF-KILL 5916respectively. For example, the following 5917all refer to the same quantity: 5918 5919@smallexample 5920_fourk_1 = 4K; 5921_fourk_2 = 4096; 5922_fourk_3 = 0x1000; 5923_fourk_4 = 10000o; 5924@end smallexample 5925 5926Note - the @code{K} and @code{M} suffixes cannot be used in 5927conjunction with the base suffixes mentioned above. 5928 5929@node Symbolic Constants 5930@subsection Symbolic Constants 5931@cindex symbolic constants 5932@kindex CONSTANT 5933It is possible to refer to target-specific constants via the use of 5934the @code{CONSTANT(@var{name})} operator, where @var{name} is one of: 5935 5936@table @code 5937@item MAXPAGESIZE 5938@kindex MAXPAGESIZE 5939The target's maximum page size. 5940 5941@item COMMONPAGESIZE 5942@kindex COMMONPAGESIZE 5943The target's default page size. 5944@end table 5945 5946So for example: 5947 5948@smallexample 5949 .text ALIGN (CONSTANT (MAXPAGESIZE)) : @{ *(.text) @} 5950@end smallexample 5951 5952will create a text section aligned to the largest page boundary 5953supported by the target. 5954 5955@node Symbols 5956@subsection Symbol Names 5957@cindex symbol names 5958@cindex names 5959@cindex quoted symbol names 5960@kindex " 5961Unless quoted, symbol names start with a letter, underscore, or period 5962and may include letters, digits, underscores, periods, and hyphens. 5963Unquoted symbol names must not conflict with any keywords. You can 5964specify a symbol which contains odd characters or has the same name as a 5965keyword by surrounding the symbol name in double quotes: 5966@smallexample 5967"SECTION" = 9; 5968"with a space" = "also with a space" + 10; 5969@end smallexample 5970 5971Since symbols can contain many non-alphabetic characters, it is safest 5972to delimit symbols with spaces. For example, @samp{A-B} is one symbol, 5973whereas @samp{A - B} is an expression involving subtraction. 5974 5975@node Orphan Sections 5976@subsection Orphan Sections 5977@cindex orphan 5978Orphan sections are sections present in the input files which 5979are not explicitly placed into the output file by the linker 5980script. The linker will still copy these sections into the 5981output file by either finding, or creating a suitable output section 5982in which to place the orphaned input section. 5983 5984If the name of an orphaned input section exactly matches the name of 5985an existing output section, then the orphaned input section will be 5986placed at the end of that output section. 5987 5988If there is no output section with a matching name then new output 5989sections will be created. Each new output section will have the same 5990name as the orphan section placed within it. If there are multiple 5991orphan sections with the same name, these will all be combined into 5992one new output section. 5993 5994If new output sections are created to hold orphaned input sections, 5995then the linker must decide where to place these new output sections 5996in relation to existing output sections. On most modern targets, the 5997linker attempts to place orphan sections after sections of the same 5998attribute, such as code vs data, loadable vs non-loadable, etc. If no 5999sections with matching attributes are found, or your target lacks this 6000support, the orphan section is placed at the end of the file. 6001 6002The command-line options @samp{--orphan-handling} and @samp{--unique} 6003(@pxref{Options,,Command-line Options}) can be used to control which 6004output sections an orphan is placed in. 6005 6006@node Location Counter 6007@subsection The Location Counter 6008@kindex . 6009@cindex dot 6010@cindex location counter 6011@cindex current output location 6012The special linker variable @dfn{dot} @samp{.} always contains the 6013current output location counter. Since the @code{.} always refers to a 6014location in an output section, it may only appear in an expression 6015within a @code{SECTIONS} command. The @code{.} symbol may appear 6016anywhere that an ordinary symbol is allowed in an expression. 6017 6018@cindex holes 6019Assigning a value to @code{.} will cause the location counter to be 6020moved. This may be used to create holes in the output section. The 6021location counter may not be moved backwards inside an output section, 6022and may not be moved backwards outside of an output section if so 6023doing creates areas with overlapping LMAs. 6024 6025@smallexample 6026SECTIONS 6027@{ 6028 output : 6029 @{ 6030 file1(.text) 6031 . = . + 1000; 6032 file2(.text) 6033 . += 1000; 6034 file3(.text) 6035 @} = 0x12345678; 6036@} 6037@end smallexample 6038@noindent 6039In the previous example, the @samp{.text} section from @file{file1} is 6040located at the beginning of the output section @samp{output}. It is 6041followed by a 1000 byte gap. Then the @samp{.text} section from 6042@file{file2} appears, also with a 1000 byte gap following before the 6043@samp{.text} section from @file{file3}. The notation @samp{= 0x12345678} 6044specifies what data to write in the gaps (@pxref{Output Section Fill}). 6045 6046@cindex dot inside sections 6047Note: @code{.} actually refers to the byte offset from the start of the 6048current containing object. Normally this is the @code{SECTIONS} 6049statement, whose start address is 0, hence @code{.} can be used as an 6050absolute address. If @code{.} is used inside a section description 6051however, it refers to the byte offset from the start of that section, 6052not an absolute address. Thus in a script like this: 6053 6054@smallexample 6055SECTIONS 6056@{ 6057 . = 0x100 6058 .text: @{ 6059 *(.text) 6060 . = 0x200 6061 @} 6062 . = 0x500 6063 .data: @{ 6064 *(.data) 6065 . += 0x600 6066 @} 6067@} 6068@end smallexample 6069 6070The @samp{.text} section will be assigned a starting address of 0x100 6071and a size of exactly 0x200 bytes, even if there is not enough data in 6072the @samp{.text} input sections to fill this area. (If there is too 6073much data, an error will be produced because this would be an attempt to 6074move @code{.} backwards). The @samp{.data} section will start at 0x500 6075and it will have an extra 0x600 bytes worth of space after the end of 6076the values from the @samp{.data} input sections and before the end of 6077the @samp{.data} output section itself. 6078 6079@cindex dot outside sections 6080Setting symbols to the value of the location counter outside of an 6081output section statement can result in unexpected values if the linker 6082needs to place orphan sections. For example, given the following: 6083 6084@smallexample 6085SECTIONS 6086@{ 6087 start_of_text = . ; 6088 .text: @{ *(.text) @} 6089 end_of_text = . ; 6090 6091 start_of_data = . ; 6092 .data: @{ *(.data) @} 6093 end_of_data = . ; 6094@} 6095@end smallexample 6096 6097If the linker needs to place some input section, e.g. @code{.rodata}, 6098not mentioned in the script, it might choose to place that section 6099between @code{.text} and @code{.data}. You might think the linker 6100should place @code{.rodata} on the blank line in the above script, but 6101blank lines are of no particular significance to the linker. As well, 6102the linker doesn't associate the above symbol names with their 6103sections. Instead, it assumes that all assignments or other 6104statements belong to the previous output section, except for the 6105special case of an assignment to @code{.}. I.e., the linker will 6106place the orphan @code{.rodata} section as if the script was written 6107as follows: 6108 6109@smallexample 6110SECTIONS 6111@{ 6112 start_of_text = . ; 6113 .text: @{ *(.text) @} 6114 end_of_text = . ; 6115 6116 start_of_data = . ; 6117 .rodata: @{ *(.rodata) @} 6118 .data: @{ *(.data) @} 6119 end_of_data = . ; 6120@} 6121@end smallexample 6122 6123This may or may not be the script author's intention for the value of 6124@code{start_of_data}. One way to influence the orphan section 6125placement is to assign the location counter to itself, as the linker 6126assumes that an assignment to @code{.} is setting the start address of 6127a following output section and thus should be grouped with that 6128section. So you could write: 6129 6130@smallexample 6131SECTIONS 6132@{ 6133 start_of_text = . ; 6134 .text: @{ *(.text) @} 6135 end_of_text = . ; 6136 6137 . = . ; 6138 start_of_data = . ; 6139 .data: @{ *(.data) @} 6140 end_of_data = . ; 6141@} 6142@end smallexample 6143 6144Now, the orphan @code{.rodata} section will be placed between 6145@code{end_of_text} and @code{start_of_data}. 6146 6147@need 2000 6148@node Operators 6149@subsection Operators 6150@cindex operators for arithmetic 6151@cindex arithmetic operators 6152@cindex precedence in expressions 6153The linker recognizes the standard C set of arithmetic operators, with 6154the standard bindings and precedence levels: 6155@c TEXI2ROFF-KILL 6156@ifnottex 6157@c END TEXI2ROFF-KILL 6158@smallexample 6159precedence associativity Operators Notes 6160(highest) 61611 left ! - ~ (1) 61622 left * / % 61633 left + - 61644 left >> << 61655 left == != > < <= >= 61666 left & 61677 left | 61688 left && 61699 left || 617010 right ? : 617111 right &= += -= *= /= (2) 6172(lowest) 6173@end smallexample 6174Notes: 6175(1) Prefix operators 6176(2) @xref{Assignments}. 6177@c TEXI2ROFF-KILL 6178@end ifnottex 6179@tex 6180\vskip \baselineskip 6181%"lispnarrowing" is the extra indent used generally for smallexample 6182\hskip\lispnarrowing\vbox{\offinterlineskip 6183\hrule 6184\halign 6185{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr 6186height2pt&\omit&&\omit&&\omit&\cr 6187&Precedence&& Associativity &&{\rm Operators}&\cr 6188height2pt&\omit&&\omit&&\omit&\cr 6189\noalign{\hrule} 6190height2pt&\omit&&\omit&&\omit&\cr 6191&highest&&&&&\cr 6192% '176 is tilde, '~' in tt font 6193&1&&left&&\qquad- \char'176\ !\qquad\dag&\cr 6194&2&&left&&* / \%&\cr 6195&3&&left&&+ -&\cr 6196&4&&left&&>> <<&\cr 6197&5&&left&&== != > < <= >=&\cr 6198&6&&left&&\&&\cr 6199&7&&left&&|&\cr 6200&8&&left&&{\&\&}&\cr 6201&9&&left&&||&\cr 6202&10&&right&&? :&\cr 6203&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr 6204&lowest&&&&&\cr 6205height2pt&\omit&&\omit&&\omit&\cr} 6206\hrule} 6207@end tex 6208@iftex 6209{ 6210@obeylines@parskip=0pt@parindent=0pt 6211@dag@quad Prefix operators. 6212@ddag@quad @xref{Assignments}. 6213} 6214@end iftex 6215@c END TEXI2ROFF-KILL 6216 6217@node Evaluation 6218@subsection Evaluation 6219@cindex lazy evaluation 6220@cindex expression evaluation order 6221The linker evaluates expressions lazily. It only computes the value of 6222an expression when absolutely necessary. 6223 6224The linker needs some information, such as the value of the start 6225address of the first section, and the origins and lengths of memory 6226regions, in order to do any linking at all. These values are computed 6227as soon as possible when the linker reads in the linker script. 6228 6229However, other values (such as symbol values) are not known or needed 6230until after storage allocation. Such values are evaluated later, when 6231other information (such as the sizes of output sections) is available 6232for use in the symbol assignment expression. 6233 6234The sizes of sections cannot be known until after allocation, so 6235assignments dependent upon these are not performed until after 6236allocation. 6237 6238Some expressions, such as those depending upon the location counter 6239@samp{.}, must be evaluated during section allocation. 6240 6241If the result of an expression is required, but the value is not 6242available, then an error results. For example, a script like the 6243following 6244@smallexample 6245@group 6246SECTIONS 6247 @{ 6248 .text 9+this_isnt_constant : 6249 @{ *(.text) @} 6250 @} 6251@end group 6252@end smallexample 6253@noindent 6254will cause the error message @samp{non constant expression for initial 6255address}. 6256 6257@node Expression Section 6258@subsection The Section of an Expression 6259@cindex expression sections 6260@cindex absolute expressions 6261@cindex relative expressions 6262@cindex absolute and relocatable symbols 6263@cindex relocatable and absolute symbols 6264@cindex symbols, relocatable and absolute 6265Addresses and symbols may be section relative, or absolute. A section 6266relative symbol is relocatable. If you request relocatable output 6267using the @samp{-r} option, a further link operation may change the 6268value of a section relative symbol. On the other hand, an absolute 6269symbol will retain the same value throughout any further link 6270operations. 6271 6272Some terms in linker expressions are addresses. This is true of 6273section relative symbols and for builtin functions that return an 6274address, such as @code{ADDR}, @code{LOADADDR}, @code{ORIGIN} and 6275@code{SEGMENT_START}. Other terms are simply numbers, or are builtin 6276functions that return a non-address value, such as @code{LENGTH}. 6277One complication is that unless you set @code{LD_FEATURE ("SANE_EXPR")} 6278(@pxref{Miscellaneous Commands}), numbers and absolute symbols are treated 6279differently depending on their location, for compatibility with older 6280versions of @code{ld}. Expressions appearing outside an output 6281section definition treat all numbers as absolute addresses. 6282Expressions appearing inside an output section definition treat 6283absolute symbols as numbers. If @code{LD_FEATURE ("SANE_EXPR")} is 6284given, then absolute symbols and numbers are simply treated as numbers 6285everywhere. 6286 6287In the following simple example, 6288 6289@smallexample 6290@group 6291SECTIONS 6292 @{ 6293 . = 0x100; 6294 __executable_start = 0x100; 6295 .data : 6296 @{ 6297 . = 0x10; 6298 __data_start = 0x10; 6299 *(.data) 6300 @} 6301 @dots{} 6302 @} 6303@end group 6304@end smallexample 6305 6306both @code{.} and @code{__executable_start} are set to the absolute 6307address 0x100 in the first two assignments, then both @code{.} and 6308@code{__data_start} are set to 0x10 relative to the @code{.data} 6309section in the second two assignments. 6310 6311For expressions involving numbers, relative addresses and absolute 6312addresses, ld follows these rules to evaluate terms: 6313 6314@itemize @bullet 6315@item 6316Unary operations on an absolute address or number, and binary 6317operations on two absolute addresses or two numbers, or between one 6318absolute address and a number, apply the operator to the value(s). 6319@item 6320Unary operations on a relative address, and binary operations on two 6321relative addresses in the same section or between one relative address 6322and a number, apply the operator to the offset part of the address(es). 6323@item 6324Other binary operations, that is, between two relative addresses not 6325in the same section, or between a relative address and an absolute 6326address, first convert any non-absolute term to an absolute address 6327before applying the operator. 6328@end itemize 6329 6330The result section of each sub-expression is as follows: 6331 6332@itemize @bullet 6333@item 6334An operation involving only numbers results in a number. 6335@item 6336The result of comparisons, @samp{&&} and @samp{||} is also a number. 6337@item 6338The result of other binary arithmetic and logical operations on two 6339relative addresses in the same section or two absolute addresses 6340(after above conversions) is also a number when 6341@code{LD_FEATURE ("SANE_EXPR")} or inside an output section definition 6342but an absolute address otherwise. 6343@item 6344The result of other operations on relative addresses or one 6345relative address and a number, is a relative address in the same 6346section as the relative operand(s). 6347@item 6348The result of other operations on absolute addresses (after above 6349conversions) is an absolute address. 6350@end itemize 6351 6352You can use the builtin function @code{ABSOLUTE} to force an expression 6353to be absolute when it would otherwise be relative. For example, to 6354create an absolute symbol set to the address of the end of the output 6355section @samp{.data}: 6356@smallexample 6357SECTIONS 6358 @{ 6359 .data : @{ *(.data) _edata = ABSOLUTE(.); @} 6360 @} 6361@end smallexample 6362@noindent 6363If @samp{ABSOLUTE} were not used, @samp{_edata} would be relative to the 6364@samp{.data} section. 6365 6366Using @code{LOADADDR} also forces an expression absolute, since this 6367particular builtin function returns an absolute address. 6368 6369@node Builtin Functions 6370@subsection Builtin Functions 6371@cindex functions in expressions 6372The linker script language includes a number of builtin functions for 6373use in linker script expressions. 6374 6375@table @code 6376@item ABSOLUTE(@var{exp}) 6377@kindex ABSOLUTE(@var{exp}) 6378@cindex expression, absolute 6379Return the absolute (non-relocatable, as opposed to non-negative) value 6380of the expression @var{exp}. Primarily useful to assign an absolute 6381value to a symbol within a section definition, where symbol values are 6382normally section relative. @xref{Expression Section}. 6383 6384@item ADDR(@var{section}) 6385@kindex ADDR(@var{section}) 6386@cindex section address in expression 6387Return the address (VMA) of the named @var{section}. Your 6388script must previously have defined the location of that section. In 6389the following example, @code{start_of_output_1}, @code{symbol_1} and 6390@code{symbol_2} are assigned equivalent values, except that 6391@code{symbol_1} will be relative to the @code{.output1} section while 6392the other two will be absolute: 6393@smallexample 6394@group 6395SECTIONS @{ @dots{} 6396 .output1 : 6397 @{ 6398 start_of_output_1 = ABSOLUTE(.); 6399 @dots{} 6400 @} 6401 .output : 6402 @{ 6403 symbol_1 = ADDR(.output1); 6404 symbol_2 = start_of_output_1; 6405 @} 6406@dots{} @} 6407@end group 6408@end smallexample 6409 6410@item ALIGN(@var{align}) 6411@itemx ALIGN(@var{exp},@var{align}) 6412@kindex ALIGN(@var{align}) 6413@kindex ALIGN(@var{exp},@var{align}) 6414@cindex round up location counter 6415@cindex align location counter 6416@cindex round up expression 6417@cindex align expression 6418Return the location counter (@code{.}) or arbitrary expression aligned 6419to the next @var{align} boundary. The single operand @code{ALIGN} 6420doesn't change the value of the location counter---it just does 6421arithmetic on it. The two operand @code{ALIGN} allows an arbitrary 6422expression to be aligned upwards (@code{ALIGN(@var{align})} is 6423equivalent to @code{ALIGN(ABSOLUTE(.), @var{align})}). 6424 6425Here is an example which aligns the output @code{.data} section to the 6426next @code{0x2000} byte boundary after the preceding section and sets a 6427variable within the section to the next @code{0x8000} boundary after the 6428input sections: 6429@smallexample 6430@group 6431SECTIONS @{ @dots{} 6432 .data ALIGN(0x2000): @{ 6433 *(.data) 6434 variable = ALIGN(0x8000); 6435 @} 6436@dots{} @} 6437@end group 6438@end smallexample 6439@noindent 6440The first use of @code{ALIGN} in this example specifies the location of 6441a section because it is used as the optional @var{address} attribute of 6442a section definition (@pxref{Output Section Address}). The second use 6443of @code{ALIGN} is used to defines the value of a symbol. 6444 6445The builtin function @code{NEXT} is closely related to @code{ALIGN}. 6446 6447@item ALIGNOF(@var{section}) 6448@kindex ALIGNOF(@var{section}) 6449@cindex section alignment 6450Return the alignment in bytes of the named @var{section}, if that section has 6451been allocated. If the section has not been allocated when this is 6452evaluated, the linker will report an error. In the following example, 6453the alignment of the @code{.output} section is stored as the first 6454value in that section. 6455@smallexample 6456@group 6457SECTIONS@{ @dots{} 6458 .output @{ 6459 LONG (ALIGNOF (.output)) 6460 @dots{} 6461 @} 6462@dots{} @} 6463@end group 6464@end smallexample 6465 6466@item BLOCK(@var{exp}) 6467@kindex BLOCK(@var{exp}) 6468This is a synonym for @code{ALIGN}, for compatibility with older linker 6469scripts. It is most often seen when setting the address of an output 6470section. 6471 6472@item DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize}) 6473@kindex DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize}) 6474This is equivalent to either 6475@smallexample 6476(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - 1))) 6477@end smallexample 6478or 6479@smallexample 6480(ALIGN(@var{maxpagesize}) 6481 + ((. + @var{commonpagesize} - 1) & (@var{maxpagesize} - @var{commonpagesize}))) 6482@end smallexample 6483@noindent 6484depending on whether the latter uses fewer @var{commonpagesize} sized pages 6485for the data segment (area between the result of this expression and 6486@code{DATA_SEGMENT_END}) than the former or not. 6487If the latter form is used, it means @var{commonpagesize} bytes of runtime 6488memory will be saved at the expense of up to @var{commonpagesize} wasted 6489bytes in the on-disk file. 6490 6491This expression can only be used directly in @code{SECTIONS} commands, not in 6492any output section descriptions and only once in the linker script. 6493@var{commonpagesize} should be less or equal to @var{maxpagesize} and should 6494be the system page size the object wants to be optimized for while still 6495running on system page sizes up to @var{maxpagesize}. Note however 6496that @samp{-z relro} protection will not be effective if the system 6497page size is larger than @var{commonpagesize}. 6498 6499@noindent 6500Example: 6501@smallexample 6502 . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); 6503@end smallexample 6504 6505@item DATA_SEGMENT_END(@var{exp}) 6506@kindex DATA_SEGMENT_END(@var{exp}) 6507This defines the end of data segment for @code{DATA_SEGMENT_ALIGN} 6508evaluation purposes. 6509 6510@smallexample 6511 . = DATA_SEGMENT_END(.); 6512@end smallexample 6513 6514@item DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp}) 6515@kindex DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp}) 6516This defines the end of the @code{PT_GNU_RELRO} segment when 6517@samp{-z relro} option is used. 6518When @samp{-z relro} option is not present, @code{DATA_SEGMENT_RELRO_END} 6519does nothing, otherwise @code{DATA_SEGMENT_ALIGN} is padded so that 6520@var{exp} + @var{offset} is aligned to the @var{commonpagesize} 6521argument given to @code{DATA_SEGMENT_ALIGN}. If present in the linker 6522script, it must be placed between @code{DATA_SEGMENT_ALIGN} and 6523@code{DATA_SEGMENT_END}. Evaluates to the second argument plus any 6524padding needed at the end of the @code{PT_GNU_RELRO} segment due to 6525section alignment. 6526 6527@smallexample 6528 . = DATA_SEGMENT_RELRO_END(24, .); 6529@end smallexample 6530 6531@item DEFINED(@var{symbol}) 6532@kindex DEFINED(@var{symbol}) 6533@cindex symbol defaults 6534Return 1 if @var{symbol} is in the linker global symbol table and is 6535defined before the statement using DEFINED in the script, otherwise 6536return 0. You can use this function to provide 6537default values for symbols. For example, the following script fragment 6538shows how to set a global symbol @samp{begin} to the first location in 6539the @samp{.text} section---but if a symbol called @samp{begin} already 6540existed, its value is preserved: 6541 6542@smallexample 6543@group 6544SECTIONS @{ @dots{} 6545 .text : @{ 6546 begin = DEFINED(begin) ? begin : . ; 6547 @dots{} 6548 @} 6549 @dots{} 6550@} 6551@end group 6552@end smallexample 6553 6554@item LENGTH(@var{memory}) 6555@kindex LENGTH(@var{memory}) 6556Return the length of the memory region named @var{memory}. 6557 6558@item LOADADDR(@var{section}) 6559@kindex LOADADDR(@var{section}) 6560@cindex section load address in expression 6561Return the absolute LMA of the named @var{section}. (@pxref{Output 6562Section LMA}). 6563 6564@item LOG2CEIL(@var{exp}) 6565@kindex LOG2CEIL(@var{exp}) 6566Return the binary logarithm of @var{exp} rounded towards infinity. 6567@code{LOG2CEIL(0)} returns 0. 6568 6569@kindex MAX 6570@item MAX(@var{exp1}, @var{exp2}) 6571Returns the maximum of @var{exp1} and @var{exp2}. 6572 6573@kindex MIN 6574@item MIN(@var{exp1}, @var{exp2}) 6575Returns the minimum of @var{exp1} and @var{exp2}. 6576 6577@item NEXT(@var{exp}) 6578@kindex NEXT(@var{exp}) 6579@cindex unallocated address, next 6580Return the next unallocated address that is a multiple of @var{exp}. 6581This function is closely related to @code{ALIGN(@var{exp})}; unless you 6582use the @code{MEMORY} command to define discontinuous memory for the 6583output file, the two functions are equivalent. 6584 6585@item ORIGIN(@var{memory}) 6586@kindex ORIGIN(@var{memory}) 6587Return the origin of the memory region named @var{memory}. 6588 6589@item SEGMENT_START(@var{segment}, @var{default}) 6590@kindex SEGMENT_START(@var{segment}, @var{default}) 6591Return the base address of the named @var{segment}. If an explicit 6592value has already been given for this segment (with a command-line 6593@samp{-T} option) then that value will be returned otherwise the value 6594will be @var{default}. At present, the @samp{-T} command-line option 6595can only be used to set the base address for the ``text'', ``data'', and 6596``bss'' sections, but you can use @code{SEGMENT_START} with any segment 6597name. 6598 6599@item SIZEOF(@var{section}) 6600@kindex SIZEOF(@var{section}) 6601@cindex section size 6602Return the size in bytes of the named @var{section}, if that section has 6603been allocated. If the section has not been allocated when this is 6604evaluated, the linker will report an error. In the following example, 6605@code{symbol_1} and @code{symbol_2} are assigned identical values: 6606@smallexample 6607@group 6608SECTIONS@{ @dots{} 6609 .output @{ 6610 .start = . ; 6611 @dots{} 6612 .end = . ; 6613 @} 6614 symbol_1 = .end - .start ; 6615 symbol_2 = SIZEOF(.output); 6616@dots{} @} 6617@end group 6618@end smallexample 6619 6620@item SIZEOF_HEADERS 6621@itemx sizeof_headers 6622@kindex SIZEOF_HEADERS 6623@cindex header size 6624Return the size in bytes of the output file's headers. This is 6625information which appears at the start of the output file. You can use 6626this number when setting the start address of the first section, if you 6627choose, to facilitate paging. 6628 6629@cindex not enough room for program headers 6630@cindex program headers, not enough room 6631When producing an ELF output file, if the linker script uses the 6632@code{SIZEOF_HEADERS} builtin function, the linker must compute the 6633number of program headers before it has determined all the section 6634addresses and sizes. If the linker later discovers that it needs 6635additional program headers, it will report an error @samp{not enough 6636room for program headers}. To avoid this error, you must avoid using 6637the @code{SIZEOF_HEADERS} function, or you must rework your linker 6638script to avoid forcing the linker to use additional program headers, or 6639you must define the program headers yourself using the @code{PHDRS} 6640command (@pxref{PHDRS}). 6641@end table 6642 6643@node Implicit Linker Scripts 6644@section Implicit Linker Scripts 6645@cindex implicit linker scripts 6646If you specify a linker input file which the linker can not recognize as 6647an object file or an archive file, it will try to read the file as a 6648linker script. If the file can not be parsed as a linker script, the 6649linker will report an error. 6650 6651An implicit linker script will not replace the default linker script. 6652 6653Typically an implicit linker script would contain only symbol 6654assignments, or the @code{INPUT}, @code{GROUP}, or @code{VERSION} 6655commands. 6656 6657Any input files read because of an implicit linker script will be read 6658at the position in the command line where the implicit linker script was 6659read. This can affect archive searching. 6660 6661@ifset GENERIC 6662@node Machine Dependent 6663@chapter Machine Dependent Features 6664 6665@cindex machine dependencies 6666@command{ld} has additional features on some platforms; the following 6667sections describe them. Machines where @command{ld} has no additional 6668functionality are not listed. 6669 6670@menu 6671@ifset H8300 6672* H8/300:: @command{ld} and the H8/300 6673@end ifset 6674@ifset M68HC11 6675* M68HC11/68HC12:: @code{ld} and the Motorola 68HC11 and 68HC12 families 6676@end ifset 6677@ifset ARM 6678* ARM:: @command{ld} and the ARM family 6679@end ifset 6680@ifset HPPA 6681* HPPA ELF32:: @command{ld} and HPPA 32-bit ELF 6682@end ifset 6683@ifset M68K 6684* M68K:: @command{ld} and the Motorola 68K family 6685@end ifset 6686@ifset MIPS 6687* MIPS:: @command{ld} and the MIPS family 6688@end ifset 6689@ifset MMIX 6690* MMIX:: @command{ld} and MMIX 6691@end ifset 6692@ifset MSP430 6693* MSP430:: @command{ld} and MSP430 6694@end ifset 6695@ifset NDS32 6696* NDS32:: @command{ld} and NDS32 6697@end ifset 6698@ifset NIOSII 6699* Nios II:: @command{ld} and the Altera Nios II 6700@end ifset 6701@ifset POWERPC 6702* PowerPC ELF32:: @command{ld} and PowerPC 32-bit ELF Support 6703@end ifset 6704@ifset POWERPC64 6705* PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support 6706@end ifset 6707@ifset S/390 6708* S/390 ELF:: @command{ld} and S/390 ELF Support 6709@end ifset 6710@ifset SPU 6711* SPU ELF:: @command{ld} and SPU ELF Support 6712@end ifset 6713@ifset TICOFF 6714* TI COFF:: @command{ld} and TI COFF 6715@end ifset 6716@ifset WIN32 6717* WIN32:: @command{ld} and WIN32 (cygwin/mingw) 6718@end ifset 6719@ifset XTENSA 6720* Xtensa:: @command{ld} and Xtensa Processors 6721@end ifset 6722@end menu 6723@end ifset 6724 6725@ifset H8300 6726@ifclear GENERIC 6727@raisesections 6728@end ifclear 6729 6730@node H8/300 6731@section @command{ld} and the H8/300 6732 6733@cindex H8/300 support 6734For the H8/300, @command{ld} can perform these global optimizations when 6735you specify the @samp{--relax} command-line option. 6736 6737@table @emph 6738@cindex relaxing on H8/300 6739@item relaxing address modes 6740@command{ld} finds all @code{jsr} and @code{jmp} instructions whose 6741targets are within eight bits, and turns them into eight-bit 6742program-counter relative @code{bsr} and @code{bra} instructions, 6743respectively. 6744 6745@cindex synthesizing on H8/300 6746@item synthesizing instructions 6747@c FIXME: specifically mov.b, or any mov instructions really? -> mov.b only, at least on H8, H8H, H8S 6748@command{ld} finds all @code{mov.b} instructions which use the 6749sixteen-bit absolute address form, but refer to the top 6750page of memory, and changes them to use the eight-bit address form. 6751(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into 6752@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the 6753top page of memory). 6754 6755@command{ld} finds all @code{mov} instructions which use the register 6756indirect with 32-bit displacement addressing mode, but use a small 6757displacement inside 16-bit displacement range, and changes them to use 6758the 16-bit displacement form. (That is: the linker turns @samp{mov.b 6759@code{@@}@var{d}:32,ERx} into @samp{mov.b @code{@@}@var{d}:16,ERx} 6760whenever the displacement @var{d} is in the 16 bit signed integer 6761range. Only implemented in ELF-format ld). 6762 6763@item bit manipulation instructions 6764@command{ld} finds all bit manipulation instructions like @code{band, bclr, 6765biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, bxor} 6766which use 32 bit and 16 bit absolute address form, but refer to the top 6767page of memory, and changes them to use the 8 bit address form. 6768(That is: the linker turns @samp{bset #xx:3,@code{@@}@var{aa}:32} into 6769@samp{bset #xx:3,@code{@@}@var{aa}:8} whenever the address @var{aa} is in 6770the top page of memory). 6771 6772@item system control instructions 6773@command{ld} finds all @code{ldc.w, stc.w} instructions which use the 677432 bit absolute address form, but refer to the top page of memory, and 6775changes them to use 16 bit address form. 6776(That is: the linker turns @samp{ldc.w @code{@@}@var{aa}:32,ccr} into 6777@samp{ldc.w @code{@@}@var{aa}:16,ccr} whenever the address @var{aa} is in 6778the top page of memory). 6779@end table 6780 6781@ifclear GENERIC 6782@lowersections 6783@end ifclear 6784@end ifset 6785 6786@ifclear GENERIC 6787@ifset Renesas 6788@c This stuff is pointless to say unless you're especially concerned 6789@c with Renesas chips; don't enable it for generic case, please. 6790@node Renesas 6791@chapter @command{ld} and Other Renesas Chips 6792 6793@command{ld} also supports the Renesas (formerly Hitachi) H8/300H, 6794H8/500, and SH chips. No special features, commands, or command-line 6795options are required for these chips. 6796@end ifset 6797@end ifclear 6798 6799@ifset ARM 6800@ifclear GENERIC 6801@raisesections 6802@end ifclear 6803 6804@ifset M68HC11 6805@ifclear GENERIC 6806@raisesections 6807@end ifclear 6808 6809@node M68HC11/68HC12 6810@section @command{ld} and the Motorola 68HC11 and 68HC12 families 6811 6812@cindex M68HC11 and 68HC12 support 6813 6814@subsection Linker Relaxation 6815 6816For the Motorola 68HC11, @command{ld} can perform these global 6817optimizations when you specify the @samp{--relax} command-line option. 6818 6819@table @emph 6820@cindex relaxing on M68HC11 6821@item relaxing address modes 6822@command{ld} finds all @code{jsr} and @code{jmp} instructions whose 6823targets are within eight bits, and turns them into eight-bit 6824program-counter relative @code{bsr} and @code{bra} instructions, 6825respectively. 6826 6827@command{ld} also looks at all 16-bit extended addressing modes and 6828transforms them in a direct addressing mode when the address is in 6829page 0 (between 0 and 0x0ff). 6830 6831@item relaxing gcc instruction group 6832When @command{gcc} is called with @option{-mrelax}, it can emit group 6833of instructions that the linker can optimize to use a 68HC11 direct 6834addressing mode. These instructions consists of @code{bclr} or 6835@code{bset} instructions. 6836 6837@end table 6838 6839@subsection Trampoline Generation 6840 6841@cindex trampoline generation on M68HC11 6842@cindex trampoline generation on M68HC12 6843For 68HC11 and 68HC12, @command{ld} can generate trampoline code to 6844call a far function using a normal @code{jsr} instruction. The linker 6845will also change the relocation to some far function to use the 6846trampoline address instead of the function address. This is typically the 6847case when a pointer to a function is taken. The pointer will in fact 6848point to the function trampoline. 6849 6850@ifclear GENERIC 6851@lowersections 6852@end ifclear 6853@end ifset 6854 6855@node ARM 6856@section @command{ld} and the ARM family 6857 6858@cindex ARM interworking support 6859@kindex --support-old-code 6860For the ARM, @command{ld} will generate code stubs to allow functions calls 6861between ARM and Thumb code. These stubs only work with code that has 6862been compiled and assembled with the @samp{-mthumb-interwork} command 6863line option. If it is necessary to link with old ARM object files or 6864libraries, which have not been compiled with the -mthumb-interwork 6865option then the @samp{--support-old-code} command-line switch should be 6866given to the linker. This will make it generate larger stub functions 6867which will work with non-interworking aware ARM code. Note, however, 6868the linker does not support generating stubs for function calls to 6869non-interworking aware Thumb code. 6870 6871@cindex thumb entry point 6872@cindex entry point, thumb 6873@kindex --thumb-entry=@var{entry} 6874The @samp{--thumb-entry} switch is a duplicate of the generic 6875@samp{--entry} switch, in that it sets the program's starting address. 6876But it also sets the bottom bit of the address, so that it can be 6877branched to using a BX instruction, and the program will start 6878executing in Thumb mode straight away. 6879 6880@cindex PE import table prefixing 6881@kindex --use-nul-prefixed-import-tables 6882The @samp{--use-nul-prefixed-import-tables} switch is specifying, that 6883the import tables idata4 and idata5 have to be generated with a zero 6884element prefix for import libraries. This is the old style to generate 6885import tables. By default this option is turned off. 6886 6887@cindex BE8 6888@kindex --be8 6889The @samp{--be8} switch instructs @command{ld} to generate BE8 format 6890executables. This option is only valid when linking big-endian 6891objects - ie ones which have been assembled with the @option{-EB} 6892option. The resulting image will contain big-endian data and 6893little-endian code. 6894 6895@cindex TARGET1 6896@kindex --target1-rel 6897@kindex --target1-abs 6898The @samp{R_ARM_TARGET1} relocation is typically used for entries in the 6899@samp{.init_array} section. It is interpreted as either @samp{R_ARM_REL32} 6900or @samp{R_ARM_ABS32}, depending on the target. The @samp{--target1-rel} 6901and @samp{--target1-abs} switches override the default. 6902 6903@cindex TARGET2 6904@kindex --target2=@var{type} 6905The @samp{--target2=type} switch overrides the default definition of the 6906@samp{R_ARM_TARGET2} relocation. Valid values for @samp{type}, their 6907meanings, and target defaults are as follows: 6908@table @samp 6909@item rel 6910@samp{R_ARM_REL32} (arm*-*-elf, arm*-*-eabi) 6911@item abs 6912@samp{R_ARM_ABS32} (arm*-*-symbianelf) 6913@item got-rel 6914@samp{R_ARM_GOT_PREL} (arm*-*-linux, arm*-*-*bsd) 6915@end table 6916 6917@cindex FIX_V4BX 6918@kindex --fix-v4bx 6919The @samp{R_ARM_V4BX} relocation (defined by the ARM AAELF 6920specification) enables objects compiled for the ARMv4 architecture to be 6921interworking-safe when linked with other objects compiled for ARMv4t, but 6922also allows pure ARMv4 binaries to be built from the same ARMv4 objects. 6923 6924In the latter case, the switch @option{--fix-v4bx} must be passed to the 6925linker, which causes v4t @code{BX rM} instructions to be rewritten as 6926@code{MOV PC,rM}, since v4 processors do not have a @code{BX} instruction. 6927 6928In the former case, the switch should not be used, and @samp{R_ARM_V4BX} 6929relocations are ignored. 6930 6931@cindex FIX_V4BX_INTERWORKING 6932@kindex --fix-v4bx-interworking 6933Replace @code{BX rM} instructions identified by @samp{R_ARM_V4BX} 6934relocations with a branch to the following veneer: 6935 6936@smallexample 6937TST rM, #1 6938MOVEQ PC, rM 6939BX Rn 6940@end smallexample 6941 6942This allows generation of libraries/applications that work on ARMv4 cores 6943and are still interworking safe. Note that the above veneer clobbers the 6944condition flags, so may cause incorrect program behavior in rare cases. 6945 6946@cindex USE_BLX 6947@kindex --use-blx 6948The @samp{--use-blx} switch enables the linker to use ARM/Thumb 6949BLX instructions (available on ARMv5t and above) in various 6950situations. Currently it is used to perform calls via the PLT from Thumb 6951code using BLX rather than using BX and a mode-switching stub before 6952each PLT entry. This should lead to such calls executing slightly faster. 6953 6954This option is enabled implicitly for SymbianOS, so there is no need to 6955specify it if you are using that target. 6956 6957@cindex VFP11_DENORM_FIX 6958@kindex --vfp11-denorm-fix 6959The @samp{--vfp11-denorm-fix} switch enables a link-time workaround for a 6960bug in certain VFP11 coprocessor hardware, which sometimes allows 6961instructions with denorm operands (which must be handled by support code) 6962to have those operands overwritten by subsequent instructions before 6963the support code can read the intended values. 6964 6965The bug may be avoided in scalar mode if you allow at least one 6966intervening instruction between a VFP11 instruction which uses a register 6967and another instruction which writes to the same register, or at least two 6968intervening instructions if vector mode is in use. The bug only affects 6969full-compliance floating-point mode: you do not need this workaround if 6970you are using "runfast" mode. Please contact ARM for further details. 6971 6972If you know you are using buggy VFP11 hardware, you can 6973enable this workaround by specifying the linker option 6974@samp{--vfp-denorm-fix=scalar} if you are using the VFP11 scalar 6975mode only, or @samp{--vfp-denorm-fix=vector} if you are using 6976vector mode (the latter also works for scalar code). The default is 6977@samp{--vfp-denorm-fix=none}. 6978 6979If the workaround is enabled, instructions are scanned for 6980potentially-troublesome sequences, and a veneer is created for each 6981such sequence which may trigger the erratum. The veneer consists of the 6982first instruction of the sequence and a branch back to the subsequent 6983instruction. The original instruction is then replaced with a branch to 6984the veneer. The extra cycles required to call and return from the veneer 6985are sufficient to avoid the erratum in both the scalar and vector cases. 6986 6987@cindex ARM1176 erratum workaround 6988@kindex --fix-arm1176 6989@kindex --no-fix-arm1176 6990The @samp{--fix-arm1176} switch enables a link-time workaround for an erratum 6991in certain ARM1176 processors. The workaround is enabled by default if you 6992are targeting ARM v6 (excluding ARM v6T2) or earlier. It can be disabled 6993unconditionally by specifying @samp{--no-fix-arm1176}. 6994 6995Further information is available in the ``ARM1176JZ-S and ARM1176JZF-S 6996Programmer Advice Notice'' available on the ARM documentation website at: 6997http://infocenter.arm.com/. 6998 6999@cindex STM32L4xx erratum workaround 7000@kindex --fix-stm32l4xx-629360 7001 7002The @samp{--fix-stm32l4xx-629360} switch enables a link-time 7003workaround for a bug in the bus matrix / memory controller for some of 7004the STM32 Cortex-M4 based products (STM32L4xx). When accessing 7005off-chip memory via the affected bus for bus reads of 9 words or more, 7006the bus can generate corrupt data and/or abort. These are only 7007core-initiated accesses (not DMA), and might affect any access: 7008integer loads such as LDM, POP and floating-point loads such as VLDM, 7009VPOP. Stores are not affected. 7010 7011The bug can be avoided by splitting memory accesses into the 7012necessary chunks to keep bus reads below 8 words. 7013 7014The workaround is not enabled by default, this is equivalent to use 7015@samp{--fix-stm32l4xx-629360=none}. If you know you are using buggy 7016STM32L4xx hardware, you can enable the workaround by specifying the 7017linker option @samp{--fix-stm32l4xx-629360}, or the equivalent 7018@samp{--fix-stm32l4xx-629360=default}. 7019 7020If the workaround is enabled, instructions are scanned for 7021potentially-troublesome sequences, and a veneer is created for each 7022such sequence which may trigger the erratum. The veneer consists in a 7023replacement sequence emulating the behaviour of the original one and a 7024branch back to the subsequent instruction. The original instruction is 7025then replaced with a branch to the veneer. 7026 7027The workaround does not always preserve the memory access order for 7028the LDMDB instruction, when the instruction loads the PC. 7029 7030The workaround is not able to handle problematic instructions when 7031they are in the middle of an IT block, since a branch is not allowed 7032there. In that case, the linker reports a warning and no replacement 7033occurs. 7034 7035The workaround is not able to replace problematic instructions with a 7036PC-relative branch instruction if the @samp{.text} section is too 7037large. In that case, when the branch that replaces the original code 7038cannot be encoded, the linker reports a warning and no replacement 7039occurs. 7040 7041@cindex NO_ENUM_SIZE_WARNING 7042@kindex --no-enum-size-warning 7043The @option{--no-enum-size-warning} switch prevents the linker from 7044warning when linking object files that specify incompatible EABI 7045enumeration size attributes. For example, with this switch enabled, 7046linking of an object file using 32-bit enumeration values with another 7047using enumeration values fitted into the smallest possible space will 7048not be diagnosed. 7049 7050@cindex NO_WCHAR_SIZE_WARNING 7051@kindex --no-wchar-size-warning 7052The @option{--no-wchar-size-warning} switch prevents the linker from 7053warning when linking object files that specify incompatible EABI 7054@code{wchar_t} size attributes. For example, with this switch enabled, 7055linking of an object file using 32-bit @code{wchar_t} values with another 7056using 16-bit @code{wchar_t} values will not be diagnosed. 7057 7058@cindex PIC_VENEER 7059@kindex --pic-veneer 7060The @samp{--pic-veneer} switch makes the linker use PIC sequences for 7061ARM/Thumb interworking veneers, even if the rest of the binary 7062is not PIC. This avoids problems on uClinux targets where 7063@samp{--emit-relocs} is used to generate relocatable binaries. 7064 7065@cindex STUB_GROUP_SIZE 7066@kindex --stub-group-size=@var{N} 7067The linker will automatically generate and insert small sequences of 7068code into a linked ARM ELF executable whenever an attempt is made to 7069perform a function call to a symbol that is too far away. The 7070placement of these sequences of instructions - called stubs - is 7071controlled by the command-line option @option{--stub-group-size=N}. 7072The placement is important because a poor choice can create a need for 7073duplicate stubs, increasing the code size. The linker will try to 7074group stubs together in order to reduce interruptions to the flow of 7075code, but it needs guidance as to how big these groups should be and 7076where they should be placed. 7077 7078The value of @samp{N}, the parameter to the 7079@option{--stub-group-size=} option controls where the stub groups are 7080placed. If it is negative then all stubs are placed after the first 7081branch that needs them. If it is positive then the stubs can be 7082placed either before or after the branches that need them. If the 7083value of @samp{N} is 1 (either +1 or -1) then the linker will choose 7084exactly where to place groups of stubs, using its built in heuristics. 7085A value of @samp{N} greater than 1 (or smaller than -1) tells the 7086linker that a single group of stubs can service at most @samp{N} bytes 7087from the input sections. 7088 7089The default, if @option{--stub-group-size=} is not specified, is 7090@samp{N = +1}. 7091 7092Farcalls stubs insertion is fully supported for the ARM-EABI target 7093only, because it relies on object files properties not present 7094otherwise. 7095 7096@cindex Cortex-A8 erratum workaround 7097@kindex --fix-cortex-a8 7098@kindex --no-fix-cortex-a8 7099The @samp{--fix-cortex-a8} switch enables a link-time workaround for an erratum in certain Cortex-A8 processors. The workaround is enabled by default if you are targeting the ARM v7-A architecture profile. It can be enabled otherwise by specifying @samp{--fix-cortex-a8}, or disabled unconditionally by specifying @samp{--no-fix-cortex-a8}. 7100 7101The erratum only affects Thumb-2 code. Please contact ARM for further details. 7102 7103@cindex Cortex-A53 erratum 835769 workaround 7104@kindex --fix-cortex-a53-835769 7105@kindex --no-fix-cortex-a53-835769 7106The @samp{--fix-cortex-a53-835769} switch enables a link-time workaround for erratum 835769 present on certain early revisions of Cortex-A53 processors. The workaround is disabled by default. It can be enabled by specifying @samp{--fix-cortex-a53-835769}, or disabled unconditionally by specifying @samp{--no-fix-cortex-a53-835769}. 7107 7108Please contact ARM for further details. 7109 7110@kindex --merge-exidx-entries 7111@kindex --no-merge-exidx-entries 7112@cindex Merging exidx entries 7113The @samp{--no-merge-exidx-entries} switch disables the merging of adjacent exidx entries in debuginfo. 7114 7115@kindex --long-plt 7116@cindex 32-bit PLT entries 7117The @samp{--long-plt} option enables the use of 16 byte PLT entries 7118which support up to 4Gb of code. The default is to use 12 byte PLT 7119entries which only support 512Mb of code. 7120 7121@kindex --no-apply-dynamic-relocs 7122@cindex AArch64 rela addend 7123The @samp{--no-apply-dynamic-relocs} option makes AArch64 linker do not apply 7124link-time values for dynamic relocations. 7125 7126@cindex Placement of SG veneers 7127All SG veneers are placed in the special output section @code{.gnu.sgstubs}. 7128Its start address must be set, either with the command-line option 7129@samp{--section-start} or in a linker script, to indicate where to place these 7130veneers in memory. 7131 7132@kindex --cmse-implib 7133@cindex Secure gateway import library 7134The @samp{--cmse-implib} option requests that the import libraries 7135specified by the @samp{--out-implib} and @samp{--in-implib} options are 7136secure gateway import libraries, suitable for linking a non-secure 7137executable against secure code as per ARMv8-M Security Extensions. 7138 7139@kindex --in-implib=@var{file} 7140@cindex Input import library 7141The @samp{--in-implib=file} specifies an input import library whose symbols 7142must keep the same address in the executable being produced. A warning is 7143given if no @samp{--out-implib} is given but new symbols have been introduced 7144in the executable that should be listed in its import library. Otherwise, if 7145@samp{--out-implib} is specified, the symbols are added to the output import 7146library. A warning is also given if some symbols present in the input import 7147library have disappeared from the executable. This option is only effective 7148for Secure Gateway import libraries, ie. when @samp{--cmse-implib} is 7149specified. 7150 7151@ifclear GENERIC 7152@lowersections 7153@end ifclear 7154@end ifset 7155 7156@ifset HPPA 7157@ifclear GENERIC 7158@raisesections 7159@end ifclear 7160 7161@node HPPA ELF32 7162@section @command{ld} and HPPA 32-bit ELF Support 7163@cindex HPPA multiple sub-space stubs 7164@kindex --multi-subspace 7165When generating a shared library, @command{ld} will by default generate 7166import stubs suitable for use with a single sub-space application. 7167The @samp{--multi-subspace} switch causes @command{ld} to generate export 7168stubs, and different (larger) import stubs suitable for use with 7169multiple sub-spaces. 7170 7171@cindex HPPA stub grouping 7172@kindex --stub-group-size=@var{N} 7173Long branch stubs and import/export stubs are placed by @command{ld} in 7174stub sections located between groups of input sections. 7175@samp{--stub-group-size} specifies the maximum size of a group of input 7176sections handled by one stub section. Since branch offsets are signed, 7177a stub section may serve two groups of input sections, one group before 7178the stub section, and one group after it. However, when using 7179conditional branches that require stubs, it may be better (for branch 7180prediction) that stub sections only serve one group of input sections. 7181A negative value for @samp{N} chooses this scheme, ensuring that 7182branches to stubs always use a negative offset. Two special values of 7183@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct 7184@command{ld} to automatically size input section groups for the branch types 7185detected, with the same behaviour regarding stub placement as other 7186positive or negative values of @samp{N} respectively. 7187 7188Note that @samp{--stub-group-size} does not split input sections. A 7189single input section larger than the group size specified will of course 7190create a larger group (of one section). If input sections are too 7191large, it may not be possible for a branch to reach its stub. 7192 7193@ifclear GENERIC 7194@lowersections 7195@end ifclear 7196@end ifset 7197 7198@ifset M68K 7199@ifclear GENERIC 7200@raisesections 7201@end ifclear 7202 7203@node M68K 7204@section @command{ld} and the Motorola 68K family 7205 7206@cindex Motorola 68K GOT generation 7207@kindex --got=@var{type} 7208The @samp{--got=@var{type}} option lets you choose the GOT generation scheme. 7209The choices are @samp{single}, @samp{negative}, @samp{multigot} and 7210@samp{target}. When @samp{target} is selected the linker chooses 7211the default GOT generation scheme for the current target. 7212@samp{single} tells the linker to generate a single GOT with 7213entries only at non-negative offsets. 7214@samp{negative} instructs the linker to generate a single GOT with 7215entries at both negative and positive offsets. Not all environments 7216support such GOTs. 7217@samp{multigot} allows the linker to generate several GOTs in the 7218output file. All GOT references from a single input object 7219file access the same GOT, but references from different input object 7220files might access different GOTs. Not all environments support such GOTs. 7221 7222@ifclear GENERIC 7223@lowersections 7224@end ifclear 7225@end ifset 7226 7227@ifset MIPS 7228@ifclear GENERIC 7229@raisesections 7230@end ifclear 7231 7232@node MIPS 7233@section @command{ld} and the MIPS family 7234 7235@cindex MIPS microMIPS instruction choice selection 7236@kindex --insn32 7237@kindex --no-insn32 7238The @samp{--insn32} and @samp{--no-insn32} options control the choice of 7239microMIPS instructions used in code generated by the linker, such as that 7240in the PLT or lazy binding stubs, or in relaxation. If @samp{--insn32} is 7241used, then the linker only uses 32-bit instruction encodings. By default 7242or if @samp{--no-insn32} is used, all instruction encodings are used, 7243including 16-bit ones where possible. 7244 7245@cindex MIPS branch relocation check control 7246@kindex --ignore-branch-isa 7247@kindex --no-ignore-branch-isa 7248The @samp{--ignore-branch-isa} and @samp{--no-ignore-branch-isa} options 7249control branch relocation checks for invalid ISA mode transitions. If 7250@samp{--ignore-branch-isa} is used, then the linker accepts any branch 7251relocations and any ISA mode transition required is lost in relocation 7252calculation, except for some cases of @code{BAL} instructions which meet 7253relaxation conditions and are converted to equivalent @code{JALX} 7254instructions as the associated relocation is calculated. By default 7255or if @samp{--no-ignore-branch-isa} is used a check is made causing 7256the loss of an ISA mode transition to produce an error. 7257 7258@ifclear GENERIC 7259@lowersections 7260@end ifclear 7261@end ifset 7262 7263@ifset MMIX 7264@ifclear GENERIC 7265@raisesections 7266@end ifclear 7267 7268@node MMIX 7269@section @code{ld} and MMIX 7270For MMIX, there is a choice of generating @code{ELF} object files or 7271@code{mmo} object files when linking. The simulator @code{mmix} 7272understands the @code{mmo} format. The binutils @code{objcopy} utility 7273can translate between the two formats. 7274 7275There is one special section, the @samp{.MMIX.reg_contents} section. 7276Contents in this section is assumed to correspond to that of global 7277registers, and symbols referring to it are translated to special symbols, 7278equal to registers. In a final link, the start address of the 7279@samp{.MMIX.reg_contents} section corresponds to the first allocated 7280global register multiplied by 8. Register @code{$255} is not included in 7281this section; it is always set to the program entry, which is at the 7282symbol @code{Main} for @code{mmo} files. 7283 7284Global symbols with the prefix @code{__.MMIX.start.}, for example 7285@code{__.MMIX.start..text} and @code{__.MMIX.start..data} are special. 7286The default linker script uses these to set the default start address 7287of a section. 7288 7289Initial and trailing multiples of zero-valued 32-bit words in a section, 7290are left out from an mmo file. 7291 7292@ifclear GENERIC 7293@lowersections 7294@end ifclear 7295@end ifset 7296 7297@ifset MSP430 7298@ifclear GENERIC 7299@raisesections 7300@end ifclear 7301 7302@node MSP430 7303@section @code{ld} and MSP430 7304For the MSP430 it is possible to select the MPU architecture. The flag @samp{-m [mpu type]} 7305will select an appropriate linker script for selected MPU type. (To get a list of known MPUs 7306just pass @samp{-m help} option to the linker). 7307 7308@cindex MSP430 extra sections 7309The linker will recognize some extra sections which are MSP430 specific: 7310 7311@table @code 7312@item @samp{.vectors} 7313Defines a portion of ROM where interrupt vectors located. 7314 7315@item @samp{.bootloader} 7316Defines the bootloader portion of the ROM (if applicable). Any code 7317in this section will be uploaded to the MPU. 7318 7319@item @samp{.infomem} 7320Defines an information memory section (if applicable). Any code in 7321this section will be uploaded to the MPU. 7322 7323@item @samp{.infomemnobits} 7324This is the same as the @samp{.infomem} section except that any code 7325in this section will not be uploaded to the MPU. 7326 7327@item @samp{.noinit} 7328Denotes a portion of RAM located above @samp{.bss} section. 7329 7330The last two sections are used by gcc. 7331@end table 7332 7333@table @option 7334@cindex MSP430 Options 7335@kindex --code-region 7336@item --code-region=[either,lower,upper,none] 7337This will transform .text* sections to [either,lower,upper].text* sections. The 7338argument passed to GCC for -mcode-region is propagated to the linker 7339using this option. 7340 7341@kindex --data-region 7342@item --data-region=[either,lower,upper,none] 7343This will transform .data*, .bss* and .rodata* sections to 7344[either,lower,upper].[data,bss,rodata]* sections. The argument passed to GCC 7345for -mdata-region is propagated to the linker using this option. 7346 7347@kindex --disable-sec-transformation 7348@item --disable-sec-transformation 7349Prevent the transformation of sections as specified by the @code{--code-region} 7350and @code{--data-region} options. 7351This is useful if you are compiling and linking using a single call to the GCC 7352wrapper, and want to compile the source files using -m[code,data]-region but 7353not transform the sections for prebuilt libraries and objects. 7354@end table 7355 7356@ifclear GENERIC 7357@lowersections 7358@end ifclear 7359@end ifset 7360 7361@ifset NDS32 7362@ifclear GENERIC 7363@raisesections 7364@end ifclear 7365 7366@node NDS32 7367@section @code{ld} and NDS32 7368@kindex relaxing on NDS32 7369For NDS32, there are some options to select relaxation behavior. The linker 7370relaxes objects according to these options. 7371 7372@table @code 7373@item @samp{--m[no-]fp-as-gp} 7374Disable/enable fp-as-gp relaxation. 7375 7376@item @samp{--mexport-symbols=FILE} 7377Exporting symbols and their address into FILE as linker script. 7378 7379@item @samp{--m[no-]ex9} 7380Disable/enable link-time EX9 relaxation. 7381 7382@item @samp{--mexport-ex9=FILE} 7383Export the EX9 table after linking. 7384 7385@item @samp{--mimport-ex9=FILE} 7386Import the Ex9 table for EX9 relaxation. 7387 7388@item @samp{--mupdate-ex9} 7389Update the existing EX9 table. 7390 7391@item @samp{--mex9-limit=NUM} 7392Maximum number of entries in the ex9 table. 7393 7394@item @samp{--mex9-loop-aware} 7395Avoid generating the EX9 instruction inside the loop. 7396 7397@item @samp{--m[no-]ifc} 7398Disable/enable the link-time IFC optimization. 7399 7400@item @samp{--mifc-loop-aware} 7401Avoid generating the IFC instruction inside the loop. 7402@end table 7403 7404@ifclear GENERIC 7405@lowersections 7406@end ifclear 7407@end ifset 7408 7409@ifset NIOSII 7410@ifclear GENERIC 7411@raisesections 7412@end ifclear 7413 7414@node Nios II 7415@section @command{ld} and the Altera Nios II 7416@cindex Nios II call relaxation 7417@kindex --relax on Nios II 7418 7419Call and immediate jump instructions on Nios II processors are limited to 7420transferring control to addresses in the same 256MB memory segment, 7421which may result in @command{ld} giving 7422@samp{relocation truncated to fit} errors with very large programs. 7423The command-line option @option{--relax} enables the generation of 7424trampolines that can access the entire 32-bit address space for calls 7425outside the normal @code{call} and @code{jmpi} address range. These 7426trampolines are inserted at section boundaries, so may not themselves 7427be reachable if an input section and its associated call trampolines are 7428larger than 256MB. 7429 7430The @option{--relax} option is enabled by default unless @option{-r} 7431is also specified. You can disable trampoline generation by using the 7432@option{--no-relax} linker option. You can also disable this optimization 7433locally by using the @samp{set .noat} directive in assembly-language 7434source files, as the linker-inserted trampolines use the @code{at} 7435register as a temporary. 7436 7437Note that the linker @option{--relax} option is independent of assembler 7438relaxation options, and that using the GNU assembler's @option{-relax-all} 7439option interferes with the linker's more selective call instruction relaxation. 7440 7441@ifclear GENERIC 7442@lowersections 7443@end ifclear 7444@end ifset 7445 7446@ifset POWERPC 7447@ifclear GENERIC 7448@raisesections 7449@end ifclear 7450 7451@node PowerPC ELF32 7452@section @command{ld} and PowerPC 32-bit ELF Support 7453@cindex PowerPC long branches 7454@kindex --relax on PowerPC 7455Branches on PowerPC processors are limited to a signed 26-bit 7456displacement, which may result in @command{ld} giving 7457@samp{relocation truncated to fit} errors with very large programs. 7458@samp{--relax} enables the generation of trampolines that can access 7459the entire 32-bit address space. These trampolines are inserted at 7460section boundaries, so may not themselves be reachable if an input 7461section exceeds 33M in size. You may combine @samp{-r} and 7462@samp{--relax} to add trampolines in a partial link. In that case 7463both branches to undefined symbols and inter-section branches are also 7464considered potentially out of range, and trampolines inserted. 7465 7466@cindex PowerPC ELF32 options 7467@table @option 7468@cindex PowerPC PLT 7469@kindex --bss-plt 7470@item --bss-plt 7471Current PowerPC GCC accepts a @samp{-msecure-plt} option that 7472generates code capable of using a newer PLT and GOT layout that has 7473the security advantage of no executable section ever needing to be 7474writable and no writable section ever being executable. PowerPC 7475@command{ld} will generate this layout, including stubs to access the 7476PLT, if all input files (including startup and static libraries) were 7477compiled with @samp{-msecure-plt}. @samp{--bss-plt} forces the old 7478BSS PLT (and GOT layout) which can give slightly better performance. 7479 7480@kindex --secure-plt 7481@item --secure-plt 7482@command{ld} will use the new PLT and GOT layout if it is linking new 7483@samp{-fpic} or @samp{-fPIC} code, but does not do so automatically 7484when linking non-PIC code. This option requests the new PLT and GOT 7485layout. A warning will be given if some object file requires the old 7486style BSS PLT. 7487 7488@cindex PowerPC GOT 7489@kindex --sdata-got 7490@item --sdata-got 7491The new secure PLT and GOT are placed differently relative to other 7492sections compared to older BSS PLT and GOT placement. The location of 7493@code{.plt} must change because the new secure PLT is an initialized 7494section while the old PLT is uninitialized. The reason for the 7495@code{.got} change is more subtle: The new placement allows 7496@code{.got} to be read-only in applications linked with 7497@samp{-z relro -z now}. However, this placement means that 7498@code{.sdata} cannot always be used in shared libraries, because the 7499PowerPC ABI accesses @code{.sdata} in shared libraries from the GOT 7500pointer. @samp{--sdata-got} forces the old GOT placement. PowerPC 7501GCC doesn't use @code{.sdata} in shared libraries, so this option is 7502really only useful for other compilers that may do so. 7503 7504@cindex PowerPC stub symbols 7505@kindex --emit-stub-syms 7506@item --emit-stub-syms 7507This option causes @command{ld} to label linker stubs with a local 7508symbol that encodes the stub type and destination. 7509 7510@cindex PowerPC TLS optimization 7511@kindex --no-tls-optimize 7512@item --no-tls-optimize 7513PowerPC @command{ld} normally performs some optimization of code 7514sequences used to access Thread-Local Storage. Use this option to 7515disable the optimization. 7516@end table 7517 7518@ifclear GENERIC 7519@lowersections 7520@end ifclear 7521@end ifset 7522 7523@ifset POWERPC64 7524@ifclear GENERIC 7525@raisesections 7526@end ifclear 7527 7528@node PowerPC64 ELF64 7529@section @command{ld} and PowerPC64 64-bit ELF Support 7530 7531@cindex PowerPC64 ELF64 options 7532@table @option 7533@cindex PowerPC64 stub grouping 7534@kindex --stub-group-size 7535@item --stub-group-size 7536Long branch stubs, PLT call stubs and TOC adjusting stubs are placed 7537by @command{ld} in stub sections located between groups of input sections. 7538@samp{--stub-group-size} specifies the maximum size of a group of input 7539sections handled by one stub section. Since branch offsets are signed, 7540a stub section may serve two groups of input sections, one group before 7541the stub section, and one group after it. However, when using 7542conditional branches that require stubs, it may be better (for branch 7543prediction) that stub sections only serve one group of input sections. 7544A negative value for @samp{N} chooses this scheme, ensuring that 7545branches to stubs always use a negative offset. Two special values of 7546@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct 7547@command{ld} to automatically size input section groups for the branch types 7548detected, with the same behaviour regarding stub placement as other 7549positive or negative values of @samp{N} respectively. 7550 7551Note that @samp{--stub-group-size} does not split input sections. A 7552single input section larger than the group size specified will of course 7553create a larger group (of one section). If input sections are too 7554large, it may not be possible for a branch to reach its stub. 7555 7556@cindex PowerPC64 stub symbols 7557@kindex --emit-stub-syms 7558@item --emit-stub-syms 7559This option causes @command{ld} to label linker stubs with a local 7560symbol that encodes the stub type and destination. 7561 7562@cindex PowerPC64 dot symbols 7563@kindex --dotsyms 7564@kindex --no-dotsyms 7565@item --dotsyms 7566@itemx --no-dotsyms 7567These two options control how @command{ld} interprets version patterns 7568in a version script. Older PowerPC64 compilers emitted both a 7569function descriptor symbol with the same name as the function, and a 7570code entry symbol with the name prefixed by a dot (@samp{.}). To 7571properly version a function @samp{foo}, the version script thus needs 7572to control both @samp{foo} and @samp{.foo}. The option 7573@samp{--dotsyms}, on by default, automatically adds the required 7574dot-prefixed patterns. Use @samp{--no-dotsyms} to disable this 7575feature. 7576 7577@cindex PowerPC64 register save/restore functions 7578@kindex --save-restore-funcs 7579@kindex --no-save-restore-funcs 7580@item --save-restore-funcs 7581@itemx --no-save-restore-funcs 7582These two options control whether PowerPC64 @command{ld} automatically 7583provides out-of-line register save and restore functions used by 7584@samp{-Os} code. The default is to provide any such referenced 7585function for a normal final link, and to not do so for a relocatable 7586link. 7587 7588@cindex PowerPC64 TLS optimization 7589@kindex --no-tls-optimize 7590@item --no-tls-optimize 7591PowerPC64 @command{ld} normally performs some optimization of code 7592sequences used to access Thread-Local Storage. Use this option to 7593disable the optimization. 7594 7595@cindex PowerPC64 __tls_get_addr optimization 7596@kindex --tls-get-addr-optimize 7597@kindex --no-tls-get-addr-optimize 7598@item --tls-get-addr-optimize 7599@itemx --no-tls-get-addr-optimize 7600These options control whether PowerPC64 @command{ld} uses a special 7601stub to call __tls_get_addr. PowerPC64 glibc 2.22 and later support 7602an optimization that allows the second and subsequent calls to 7603@code{__tls_get_addr} for a given symbol to be resolved by the special 7604stub without calling in to glibc. By default the linker enables this 7605option when glibc advertises the availability of __tls_get_addr_opt. 7606Forcing this option on when using an older glibc won't do much besides 7607slow down your applications, but may be useful if linking an 7608application against an older glibc with the expectation that it will 7609normally be used on systems having a newer glibc. 7610 7611@cindex PowerPC64 OPD optimization 7612@kindex --no-opd-optimize 7613@item --no-opd-optimize 7614PowerPC64 @command{ld} normally removes @code{.opd} section entries 7615corresponding to deleted link-once functions, or functions removed by 7616the action of @samp{--gc-sections} or linker script @code{/DISCARD/}. 7617Use this option to disable @code{.opd} optimization. 7618 7619@cindex PowerPC64 OPD spacing 7620@kindex --non-overlapping-opd 7621@item --non-overlapping-opd 7622Some PowerPC64 compilers have an option to generate compressed 7623@code{.opd} entries spaced 16 bytes apart, overlapping the third word, 7624the static chain pointer (unused in C) with the first word of the next 7625entry. This option expands such entries to the full 24 bytes. 7626 7627@cindex PowerPC64 TOC optimization 7628@kindex --no-toc-optimize 7629@item --no-toc-optimize 7630PowerPC64 @command{ld} normally removes unused @code{.toc} section 7631entries. Such entries are detected by examining relocations that 7632reference the TOC in code sections. A reloc in a deleted code section 7633marks a TOC word as unneeded, while a reloc in a kept code section 7634marks a TOC word as needed. Since the TOC may reference itself, TOC 7635relocs are also examined. TOC words marked as both needed and 7636unneeded will of course be kept. TOC words without any referencing 7637reloc are assumed to be part of a multi-word entry, and are kept or 7638discarded as per the nearest marked preceding word. This works 7639reliably for compiler generated code, but may be incorrect if assembly 7640code is used to insert TOC entries. Use this option to disable the 7641optimization. 7642 7643@cindex PowerPC64 multi-TOC 7644@kindex --no-multi-toc 7645@item --no-multi-toc 7646If given any toc option besides @code{-mcmodel=medium} or 7647@code{-mcmodel=large}, PowerPC64 GCC generates code for a TOC model 7648where TOC 7649entries are accessed with a 16-bit offset from r2. This limits the 7650total TOC size to 64K. PowerPC64 @command{ld} extends this limit by 7651grouping code sections such that each group uses less than 64K for its 7652TOC entries, then inserts r2 adjusting stubs between inter-group 7653calls. @command{ld} does not split apart input sections, so cannot 7654help if a single input file has a @code{.toc} section that exceeds 765564K, most likely from linking multiple files with @command{ld -r}. 7656Use this option to turn off this feature. 7657 7658@cindex PowerPC64 TOC sorting 7659@kindex --no-toc-sort 7660@item --no-toc-sort 7661By default, @command{ld} sorts TOC sections so that those whose file 7662happens to have a section called @code{.init} or @code{.fini} are 7663placed first, followed by TOC sections referenced by code generated 7664with PowerPC64 gcc's @code{-mcmodel=small}, and lastly TOC sections 7665referenced only by code generated with PowerPC64 gcc's 7666@code{-mcmodel=medium} or @code{-mcmodel=large} options. Doing this 7667results in better TOC grouping for multi-TOC. Use this option to turn 7668off this feature. 7669 7670@cindex PowerPC64 PLT stub alignment 7671@kindex --plt-align 7672@kindex --no-plt-align 7673@item --plt-align 7674@itemx --no-plt-align 7675Use these options to control whether individual PLT call stubs are 7676aligned to a 32-byte boundary, or to the specified power of two 7677boundary when using @code{--plt-align=}. A negative value may be 7678specified to pad PLT call stubs so that they do not cross the 7679specified power of two boundary (or the minimum number of boundaries 7680if a PLT stub is so large that it must cross a boundary). By default 7681PLT call stubs are aligned to 32-byte boundaries. 7682 7683@cindex PowerPC64 PLT call stub static chain 7684@kindex --plt-static-chain 7685@kindex --no-plt-static-chain 7686@item --plt-static-chain 7687@itemx --no-plt-static-chain 7688Use these options to control whether PLT call stubs load the static 7689chain pointer (r11). @code{ld} defaults to not loading the static 7690chain since there is never any need to do so on a PLT call. 7691 7692@cindex PowerPC64 PLT call stub thread safety 7693@kindex --plt-thread-safe 7694@kindex --no-plt-thread-safe 7695@item --plt-thread-safe 7696@itemx --no-plt-thread-safe 7697With power7's weakly ordered memory model, it is possible when using 7698lazy binding for ld.so to update a plt entry in one thread and have 7699another thread see the individual plt entry words update in the wrong 7700order, despite ld.so carefully writing in the correct order and using 7701memory write barriers. To avoid this we need some sort of read 7702barrier in the call stub, or use LD_BIND_NOW=1. By default, @code{ld} 7703looks for calls to commonly used functions that create threads, and if 7704seen, adds the necessary barriers. Use these options to change the 7705default behaviour. 7706 7707@cindex PowerPC64 ELFv2 PLT localentry optimization 7708@kindex --plt-localentry 7709@kindex --no-plt-localentry 7710@item --plt-localentry 7711@itemx --no-localentry 7712ELFv2 functions with localentry:0 are those with a single entry point, 7713ie. global entry == local entry, and that have no requirement on r2 7714(the TOC/GOT pointer) or r12, and guarantee r2 is unchanged on return. 7715Such an external function can be called via the PLT without saving r2 7716or restoring it on return, avoiding a common load-hit-store for small 7717functions. The optimization is attractive, with up to 40% reduction 7718in execution time for a small function, but can result in symbol 7719interposition failures. Also, minor changes in a shared library, 7720including system libraries, can cause a function that was localentry:0 7721to become localentry:8. This will result in a dynamic loader 7722complaint and failure to run. The option is experimental, use with 7723care. @option{--no-plt-localentry} is the default. 7724@end table 7725 7726@ifclear GENERIC 7727@lowersections 7728@end ifclear 7729@end ifset 7730 7731@ifset S/390 7732@ifclear GENERIC 7733@raisesections 7734@end ifclear 7735 7736@node S/390 ELF 7737@section @command{ld} and S/390 ELF Support 7738 7739@cindex S/390 ELF options 7740@table @option 7741 7742@cindex S/390 7743@kindex --s390-pgste 7744@item --s390-pgste 7745This option marks the result file with a @code{PT_S390_PGSTE} 7746segment. The Linux kernel is supposed to allocate 4k page tables for 7747binaries marked that way. 7748@end table 7749 7750@ifclear GENERIC 7751@lowersections 7752@end ifclear 7753@end ifset 7754 7755@ifset SPU 7756@ifclear GENERIC 7757@raisesections 7758@end ifclear 7759 7760@node SPU ELF 7761@section @command{ld} and SPU ELF Support 7762 7763@cindex SPU ELF options 7764@table @option 7765 7766@cindex SPU plugins 7767@kindex --plugin 7768@item --plugin 7769This option marks an executable as a PIC plugin module. 7770 7771@cindex SPU overlays 7772@kindex --no-overlays 7773@item --no-overlays 7774Normally, @command{ld} recognizes calls to functions within overlay 7775regions, and redirects such calls to an overlay manager via a stub. 7776@command{ld} also provides a built-in overlay manager. This option 7777turns off all this special overlay handling. 7778 7779@cindex SPU overlay stub symbols 7780@kindex --emit-stub-syms 7781@item --emit-stub-syms 7782This option causes @command{ld} to label overlay stubs with a local 7783symbol that encodes the stub type and destination. 7784 7785@cindex SPU extra overlay stubs 7786@kindex --extra-overlay-stubs 7787@item --extra-overlay-stubs 7788This option causes @command{ld} to add overlay call stubs on all 7789function calls out of overlay regions. Normally stubs are not added 7790on calls to non-overlay regions. 7791 7792@cindex SPU local store size 7793@kindex --local-store=lo:hi 7794@item --local-store=lo:hi 7795@command{ld} usually checks that a final executable for SPU fits in 7796the address range 0 to 256k. This option may be used to change the 7797range. Disable the check entirely with @option{--local-store=0:0}. 7798 7799@cindex SPU 7800@kindex --stack-analysis 7801@item --stack-analysis 7802SPU local store space is limited. Over-allocation of stack space 7803unnecessarily limits space available for code and data, while 7804under-allocation results in runtime failures. If given this option, 7805@command{ld} will provide an estimate of maximum stack usage. 7806@command{ld} does this by examining symbols in code sections to 7807determine the extents of functions, and looking at function prologues 7808for stack adjusting instructions. A call-graph is created by looking 7809for relocations on branch instructions. The graph is then searched 7810for the maximum stack usage path. Note that this analysis does not 7811find calls made via function pointers, and does not handle recursion 7812and other cycles in the call graph. Stack usage may be 7813under-estimated if your code makes such calls. Also, stack usage for 7814dynamic allocation, e.g. alloca, will not be detected. If a link map 7815is requested, detailed information about each function's stack usage 7816and calls will be given. 7817 7818@cindex SPU 7819@kindex --emit-stack-syms 7820@item --emit-stack-syms 7821This option, if given along with @option{--stack-analysis} will result 7822in @command{ld} emitting stack sizing symbols for each function. 7823These take the form @code{__stack_<function_name>} for global 7824functions, and @code{__stack_<number>_<function_name>} for static 7825functions. @code{<number>} is the section id in hex. The value of 7826such symbols is the stack requirement for the corresponding function. 7827The symbol size will be zero, type @code{STT_NOTYPE}, binding 7828@code{STB_LOCAL}, and section @code{SHN_ABS}. 7829@end table 7830 7831@ifclear GENERIC 7832@lowersections 7833@end ifclear 7834@end ifset 7835 7836@ifset TICOFF 7837@ifclear GENERIC 7838@raisesections 7839@end ifclear 7840 7841@node TI COFF 7842@section @command{ld}'s Support for Various TI COFF Versions 7843@cindex TI COFF versions 7844@kindex --format=@var{version} 7845The @samp{--format} switch allows selection of one of the various 7846TI COFF versions. The latest of this writing is 2; versions 0 and 1 are 7847also supported. The TI COFF versions also vary in header byte-order 7848format; @command{ld} will read any version or byte order, but the output 7849header format depends on the default specified by the specific target. 7850 7851@ifclear GENERIC 7852@lowersections 7853@end ifclear 7854@end ifset 7855 7856@ifset WIN32 7857@ifclear GENERIC 7858@raisesections 7859@end ifclear 7860 7861@node WIN32 7862@section @command{ld} and WIN32 (cygwin/mingw) 7863 7864This section describes some of the win32 specific @command{ld} issues. 7865See @ref{Options,,Command-line Options} for detailed description of the 7866command-line options mentioned here. 7867 7868@table @emph 7869@cindex import libraries 7870@item import libraries 7871The standard Windows linker creates and uses so-called import 7872libraries, which contains information for linking to dll's. They are 7873regular static archives and are handled as any other static 7874archive. The cygwin and mingw ports of @command{ld} have specific 7875support for creating such libraries provided with the 7876@samp{--out-implib} command-line option. 7877 7878@item exporting DLL symbols 7879@cindex exporting DLL symbols 7880The cygwin/mingw @command{ld} has several ways to export symbols for dll's. 7881 7882@table @emph 7883@item using auto-export functionality 7884@cindex using auto-export functionality 7885By default @command{ld} exports symbols with the auto-export functionality, 7886which is controlled by the following command-line options: 7887 7888@itemize 7889@item --export-all-symbols [This is the default] 7890@item --exclude-symbols 7891@item --exclude-libs 7892@item --exclude-modules-for-implib 7893@item --version-script 7894@end itemize 7895 7896When auto-export is in operation, @command{ld} will export all the non-local 7897(global and common) symbols it finds in a DLL, with the exception of a few 7898symbols known to belong to the system's runtime and libraries. As it will 7899often not be desirable to export all of a DLL's symbols, which may include 7900private functions that are not part of any public interface, the command-line 7901options listed above may be used to filter symbols out from the list for 7902exporting. The @samp{--output-def} option can be used in order to see the 7903final list of exported symbols with all exclusions taken into effect. 7904 7905If @samp{--export-all-symbols} is not given explicitly on the 7906command line, then the default auto-export behavior will be @emph{disabled} 7907if either of the following are true: 7908 7909@itemize 7910@item A DEF file is used. 7911@item Any symbol in any object file was marked with the __declspec(dllexport) attribute. 7912@end itemize 7913 7914@item using a DEF file 7915@cindex using a DEF file 7916Another way of exporting symbols is using a DEF file. A DEF file is 7917an ASCII file containing definitions of symbols which should be 7918exported when a dll is created. Usually it is named @samp{<dll 7919name>.def} and is added as any other object file to the linker's 7920command line. The file's name must end in @samp{.def} or @samp{.DEF}. 7921 7922@example 7923gcc -o <output> <objectfiles> <dll name>.def 7924@end example 7925 7926Using a DEF file turns off the normal auto-export behavior, unless the 7927@samp{--export-all-symbols} option is also used. 7928 7929Here is an example of a DEF file for a shared library called @samp{xyz.dll}: 7930 7931@example 7932LIBRARY "xyz.dll" BASE=0x20000000 7933 7934EXPORTS 7935foo 7936bar 7937_bar = bar 7938another_foo = abc.dll.afoo 7939var1 DATA 7940doo = foo == foo2 7941eoo DATA == var1 7942@end example 7943 7944This example defines a DLL with a non-default base address and seven 7945symbols in the export table. The third exported symbol @code{_bar} is an 7946alias for the second. The fourth symbol, @code{another_foo} is resolved 7947by "forwarding" to another module and treating it as an alias for 7948@code{afoo} exported from the DLL @samp{abc.dll}. The final symbol 7949@code{var1} is declared to be a data object. The @samp{doo} symbol in 7950export library is an alias of @samp{foo}, which gets the string name 7951in export table @samp{foo2}. The @samp{eoo} symbol is an data export 7952symbol, which gets in export table the name @samp{var1}. 7953 7954The optional @code{LIBRARY <name>} command indicates the @emph{internal} 7955name of the output DLL. If @samp{<name>} does not include a suffix, 7956the default library suffix, @samp{.DLL} is appended. 7957 7958When the .DEF file is used to build an application, rather than a 7959library, the @code{NAME <name>} command should be used instead of 7960@code{LIBRARY}. If @samp{<name>} does not include a suffix, the default 7961executable suffix, @samp{.EXE} is appended. 7962 7963With either @code{LIBRARY <name>} or @code{NAME <name>} the optional 7964specification @code{BASE = <number>} may be used to specify a 7965non-default base address for the image. 7966 7967If neither @code{LIBRARY <name>} nor @code{NAME <name>} is specified, 7968or they specify an empty string, the internal name is the same as the 7969filename specified on the command line. 7970 7971The complete specification of an export symbol is: 7972 7973@example 7974EXPORTS 7975 ( ( ( <name1> [ = <name2> ] ) 7976 | ( <name1> = <module-name> . <external-name>)) 7977 [ @@ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] [== <name3>] ) * 7978@end example 7979 7980Declares @samp{<name1>} as an exported symbol from the DLL, or declares 7981@samp{<name1>} as an exported alias for @samp{<name2>}; or declares 7982@samp{<name1>} as a "forward" alias for the symbol 7983@samp{<external-name>} in the DLL @samp{<module-name>}. 7984Optionally, the symbol may be exported by the specified ordinal 7985@samp{<integer>} alias. The optional @samp{<name3>} is the to be used 7986string in import/export table for the symbol. 7987 7988The optional keywords that follow the declaration indicate: 7989 7990@code{NONAME}: Do not put the symbol name in the DLL's export table. It 7991will still be exported by its ordinal alias (either the value specified 7992by the .def specification or, otherwise, the value assigned by the 7993linker). The symbol name, however, does remain visible in the import 7994library (if any), unless @code{PRIVATE} is also specified. 7995 7996@code{DATA}: The symbol is a variable or object, rather than a function. 7997The import lib will export only an indirect reference to @code{foo} as 7998the symbol @code{_imp__foo} (ie, @code{foo} must be resolved as 7999@code{*_imp__foo}). 8000 8001@code{CONSTANT}: Like @code{DATA}, but put the undecorated @code{foo} as 8002well as @code{_imp__foo} into the import library. Both refer to the 8003read-only import address table's pointer to the variable, not to the 8004variable itself. This can be dangerous. If the user code fails to add 8005the @code{dllimport} attribute and also fails to explicitly add the 8006extra indirection that the use of the attribute enforces, the 8007application will behave unexpectedly. 8008 8009@code{PRIVATE}: Put the symbol in the DLL's export table, but do not put 8010it into the static import library used to resolve imports at link time. The 8011symbol can still be imported using the @code{LoadLibrary/GetProcAddress} 8012API at runtime or by using the GNU ld extension of linking directly to 8013the DLL without an import library. 8014 8015See ld/deffilep.y in the binutils sources for the full specification of 8016other DEF file statements 8017 8018@cindex creating a DEF file 8019While linking a shared dll, @command{ld} is able to create a DEF file 8020with the @samp{--output-def <file>} command-line option. 8021 8022@item Using decorations 8023@cindex Using decorations 8024Another way of marking symbols for export is to modify the source code 8025itself, so that when building the DLL each symbol to be exported is 8026declared as: 8027 8028@example 8029__declspec(dllexport) int a_variable 8030__declspec(dllexport) void a_function(int with_args) 8031@end example 8032 8033All such symbols will be exported from the DLL. If, however, 8034any of the object files in the DLL contain symbols decorated in 8035this way, then the normal auto-export behavior is disabled, unless 8036the @samp{--export-all-symbols} option is also used. 8037 8038Note that object files that wish to access these symbols must @emph{not} 8039decorate them with dllexport. Instead, they should use dllimport, 8040instead: 8041 8042@example 8043__declspec(dllimport) int a_variable 8044__declspec(dllimport) void a_function(int with_args) 8045@end example 8046 8047This complicates the structure of library header files, because 8048when included by the library itself the header must declare the 8049variables and functions as dllexport, but when included by client 8050code the header must declare them as dllimport. There are a number 8051of idioms that are typically used to do this; often client code can 8052omit the __declspec() declaration completely. See 8053@samp{--enable-auto-import} and @samp{automatic data imports} for more 8054information. 8055@end table 8056 8057@cindex automatic data imports 8058@item automatic data imports 8059The standard Windows dll format supports data imports from dlls only 8060by adding special decorations (dllimport/dllexport), which let the 8061compiler produce specific assembler instructions to deal with this 8062issue. This increases the effort necessary to port existing Un*x 8063code to these platforms, especially for large 8064c++ libraries and applications. The auto-import feature, which was 8065initially provided by Paul Sokolovsky, allows one to omit the 8066decorations to achieve a behavior that conforms to that on POSIX/Un*x 8067platforms. This feature is enabled with the @samp{--enable-auto-import} 8068command-line option, although it is enabled by default on cygwin/mingw. 8069The @samp{--enable-auto-import} option itself now serves mainly to 8070suppress any warnings that are ordinarily emitted when linked objects 8071trigger the feature's use. 8072 8073auto-import of variables does not always work flawlessly without 8074additional assistance. Sometimes, you will see this message 8075 8076"variable '<var>' can't be auto-imported. Please read the 8077documentation for ld's @code{--enable-auto-import} for details." 8078 8079The @samp{--enable-auto-import} documentation explains why this error 8080occurs, and several methods that can be used to overcome this difficulty. 8081One of these methods is the @emph{runtime pseudo-relocs} feature, described 8082below. 8083 8084@cindex runtime pseudo-relocation 8085For complex variables imported from DLLs (such as structs or classes), 8086object files typically contain a base address for the variable and an 8087offset (@emph{addend}) within the variable--to specify a particular 8088field or public member, for instance. Unfortunately, the runtime loader used 8089in win32 environments is incapable of fixing these references at runtime 8090without the additional information supplied by dllimport/dllexport decorations. 8091The standard auto-import feature described above is unable to resolve these 8092references. 8093 8094The @samp{--enable-runtime-pseudo-relocs} switch allows these references to 8095be resolved without error, while leaving the task of adjusting the references 8096themselves (with their non-zero addends) to specialized code provided by the 8097runtime environment. Recent versions of the cygwin and mingw environments and 8098compilers provide this runtime support; older versions do not. However, the 8099support is only necessary on the developer's platform; the compiled result will 8100run without error on an older system. 8101 8102@samp{--enable-runtime-pseudo-relocs} is not the default; it must be explicitly 8103enabled as needed. 8104 8105@cindex direct linking to a dll 8106@item direct linking to a dll 8107The cygwin/mingw ports of @command{ld} support the direct linking, 8108including data symbols, to a dll without the usage of any import 8109libraries. This is much faster and uses much less memory than does the 8110traditional import library method, especially when linking large 8111libraries or applications. When @command{ld} creates an import lib, each 8112function or variable exported from the dll is stored in its own bfd, even 8113though a single bfd could contain many exports. The overhead involved in 8114storing, loading, and processing so many bfd's is quite large, and explains the 8115tremendous time, memory, and storage needed to link against particularly 8116large or complex libraries when using import libs. 8117 8118Linking directly to a dll uses no extra command-line switches other than 8119@samp{-L} and @samp{-l}, because @command{ld} already searches for a number 8120of names to match each library. All that is needed from the developer's 8121perspective is an understanding of this search, in order to force ld to 8122select the dll instead of an import library. 8123 8124 8125For instance, when ld is called with the argument @samp{-lxxx} it will attempt 8126to find, in the first directory of its search path, 8127 8128@example 8129libxxx.dll.a 8130xxx.dll.a 8131libxxx.a 8132xxx.lib 8133libxxx.lib 8134cygxxx.dll (*) 8135libxxx.dll 8136xxx.dll 8137@end example 8138 8139before moving on to the next directory in the search path. 8140 8141(*) Actually, this is not @samp{cygxxx.dll} but in fact is @samp{<prefix>xxx.dll}, 8142where @samp{<prefix>} is set by the @command{ld} option 8143@samp{--dll-search-prefix=<prefix>}. In the case of cygwin, the standard gcc spec 8144file includes @samp{--dll-search-prefix=cyg}, so in effect we actually search for 8145@samp{cygxxx.dll}. 8146 8147Other win32-based unix environments, such as mingw or pw32, may use other 8148@samp{<prefix>}es, although at present only cygwin makes use of this feature. It 8149was originally intended to help avoid name conflicts among dll's built for the 8150various win32/un*x environments, so that (for example) two versions of a zlib dll 8151could coexist on the same machine. 8152 8153The generic cygwin/mingw path layout uses a @samp{bin} directory for 8154applications and dll's and a @samp{lib} directory for the import 8155libraries (using cygwin nomenclature): 8156 8157@example 8158bin/ 8159 cygxxx.dll 8160lib/ 8161 libxxx.dll.a (in case of dll's) 8162 libxxx.a (in case of static archive) 8163@end example 8164 8165Linking directly to a dll without using the import library can be 8166done two ways: 8167 81681. Use the dll directly by adding the @samp{bin} path to the link line 8169@example 8170gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx 8171@end example 8172 8173However, as the dll's often have version numbers appended to their names 8174(@samp{cygncurses-5.dll}) this will often fail, unless one specifies 8175@samp{-L../bin -lncurses-5} to include the version. Import libs are generally 8176not versioned, and do not have this difficulty. 8177 81782. Create a symbolic link from the dll to a file in the @samp{lib} 8179directory according to the above mentioned search pattern. This 8180should be used to avoid unwanted changes in the tools needed for 8181making the app/dll. 8182 8183@example 8184ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] 8185@end example 8186 8187Then you can link without any make environment changes. 8188 8189@example 8190gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx 8191@end example 8192 8193This technique also avoids the version number problems, because the following is 8194perfectly legal 8195 8196@example 8197bin/ 8198 cygxxx-5.dll 8199lib/ 8200 libxxx.dll.a -> ../bin/cygxxx-5.dll 8201@end example 8202 8203Linking directly to a dll without using an import lib will work 8204even when auto-import features are exercised, and even when 8205@samp{--enable-runtime-pseudo-relocs} is used. 8206 8207Given the improvements in speed and memory usage, one might justifiably 8208wonder why import libraries are used at all. There are three reasons: 8209 82101. Until recently, the link-directly-to-dll functionality did @emph{not} 8211work with auto-imported data. 8212 82132. Sometimes it is necessary to include pure static objects within the 8214import library (which otherwise contains only bfd's for indirection 8215symbols that point to the exports of a dll). Again, the import lib 8216for the cygwin kernel makes use of this ability, and it is not 8217possible to do this without an import lib. 8218 82193. Symbol aliases can only be resolved using an import lib. This is 8220critical when linking against OS-supplied dll's (eg, the win32 API) 8221in which symbols are usually exported as undecorated aliases of their 8222stdcall-decorated assembly names. 8223 8224So, import libs are not going away. But the ability to replace 8225true import libs with a simple symbolic link to (or a copy of) 8226a dll, in many cases, is a useful addition to the suite of tools 8227binutils makes available to the win32 developer. Given the 8228massive improvements in memory requirements during linking, storage 8229requirements, and linking speed, we expect that many developers 8230will soon begin to use this feature whenever possible. 8231 8232@item symbol aliasing 8233@table @emph 8234@item adding additional names 8235Sometimes, it is useful to export symbols with additional names. 8236A symbol @samp{foo} will be exported as @samp{foo}, but it can also be 8237exported as @samp{_foo} by using special directives in the DEF file 8238when creating the dll. This will affect also the optional created 8239import library. Consider the following DEF file: 8240 8241@example 8242LIBRARY "xyz.dll" BASE=0x61000000 8243 8244EXPORTS 8245foo 8246_foo = foo 8247@end example 8248 8249The line @samp{_foo = foo} maps the symbol @samp{foo} to @samp{_foo}. 8250 8251Another method for creating a symbol alias is to create it in the 8252source code using the "weak" attribute: 8253 8254@example 8255void foo () @{ /* Do something. */; @} 8256void _foo () __attribute__ ((weak, alias ("foo"))); 8257@end example 8258 8259See the gcc manual for more information about attributes and weak 8260symbols. 8261 8262@item renaming symbols 8263Sometimes it is useful to rename exports. For instance, the cygwin 8264kernel does this regularly. A symbol @samp{_foo} can be exported as 8265@samp{foo} but not as @samp{_foo} by using special directives in the 8266DEF file. (This will also affect the import library, if it is 8267created). In the following example: 8268 8269@example 8270LIBRARY "xyz.dll" BASE=0x61000000 8271 8272EXPORTS 8273_foo = foo 8274@end example 8275 8276The line @samp{_foo = foo} maps the exported symbol @samp{foo} to 8277@samp{_foo}. 8278@end table 8279 8280Note: using a DEF file disables the default auto-export behavior, 8281unless the @samp{--export-all-symbols} command-line option is used. 8282If, however, you are trying to rename symbols, then you should list 8283@emph{all} desired exports in the DEF file, including the symbols 8284that are not being renamed, and do @emph{not} use the 8285@samp{--export-all-symbols} option. If you list only the 8286renamed symbols in the DEF file, and use @samp{--export-all-symbols} 8287to handle the other symbols, then the both the new names @emph{and} 8288the original names for the renamed symbols will be exported. 8289In effect, you'd be aliasing those symbols, not renaming them, 8290which is probably not what you wanted. 8291 8292@cindex weak externals 8293@item weak externals 8294The Windows object format, PE, specifies a form of weak symbols called 8295weak externals. When a weak symbol is linked and the symbol is not 8296defined, the weak symbol becomes an alias for some other symbol. There 8297are three variants of weak externals: 8298@itemize 8299@item Definition is searched for in objects and libraries, historically 8300called lazy externals. 8301@item Definition is searched for only in other objects, not in libraries. 8302This form is not presently implemented. 8303@item No search; the symbol is an alias. This form is not presently 8304implemented. 8305@end itemize 8306As a GNU extension, weak symbols that do not specify an alternate symbol 8307are supported. If the symbol is undefined when linking, the symbol 8308uses a default value. 8309 8310@cindex aligned common symbols 8311@item aligned common symbols 8312As a GNU extension to the PE file format, it is possible to specify the 8313desired alignment for a common symbol. This information is conveyed from 8314the assembler or compiler to the linker by means of GNU-specific commands 8315carried in the object file's @samp{.drectve} section, which are recognized 8316by @command{ld} and respected when laying out the common symbols. Native 8317tools will be able to process object files employing this GNU extension, 8318but will fail to respect the alignment instructions, and may issue noisy 8319warnings about unknown linker directives. 8320 8321@end table 8322 8323@ifclear GENERIC 8324@lowersections 8325@end ifclear 8326@end ifset 8327 8328@ifset XTENSA 8329@ifclear GENERIC 8330@raisesections 8331@end ifclear 8332 8333@node Xtensa 8334@section @code{ld} and Xtensa Processors 8335 8336@cindex Xtensa processors 8337The default @command{ld} behavior for Xtensa processors is to interpret 8338@code{SECTIONS} commands so that lists of explicitly named sections in a 8339specification with a wildcard file will be interleaved when necessary to 8340keep literal pools within the range of PC-relative load offsets. For 8341example, with the command: 8342 8343@smallexample 8344SECTIONS 8345@{ 8346 .text : @{ 8347 *(.literal .text) 8348 @} 8349@} 8350@end smallexample 8351 8352@noindent 8353@command{ld} may interleave some of the @code{.literal} 8354and @code{.text} sections from different object files to ensure that the 8355literal pools are within the range of PC-relative load offsets. A valid 8356interleaving might place the @code{.literal} sections from an initial 8357group of files followed by the @code{.text} sections of that group of 8358files. Then, the @code{.literal} sections from the rest of the files 8359and the @code{.text} sections from the rest of the files would follow. 8360 8361@cindex @option{--relax} on Xtensa 8362@cindex relaxing on Xtensa 8363Relaxation is enabled by default for the Xtensa version of @command{ld} and 8364provides two important link-time optimizations. The first optimization 8365is to combine identical literal values to reduce code size. A redundant 8366literal will be removed and all the @code{L32R} instructions that use it 8367will be changed to reference an identical literal, as long as the 8368location of the replacement literal is within the offset range of all 8369the @code{L32R} instructions. The second optimization is to remove 8370unnecessary overhead from assembler-generated ``longcall'' sequences of 8371@code{L32R}/@code{CALLX@var{n}} when the target functions are within 8372range of direct @code{CALL@var{n}} instructions. 8373 8374For each of these cases where an indirect call sequence can be optimized 8375to a direct call, the linker will change the @code{CALLX@var{n}} 8376instruction to a @code{CALL@var{n}} instruction, remove the @code{L32R} 8377instruction, and remove the literal referenced by the @code{L32R} 8378instruction if it is not used for anything else. Removing the 8379@code{L32R} instruction always reduces code size but can potentially 8380hurt performance by changing the alignment of subsequent branch targets. 8381By default, the linker will always preserve alignments, either by 8382switching some instructions between 24-bit encodings and the equivalent 8383density instructions or by inserting a no-op in place of the @code{L32R} 8384instruction that was removed. If code size is more important than 8385performance, the @option{--size-opt} option can be used to prevent the 8386linker from widening density instructions or inserting no-ops, except in 8387a few cases where no-ops are required for correctness. 8388 8389The following Xtensa-specific command-line options can be used to 8390control the linker: 8391 8392@cindex Xtensa options 8393@table @option 8394@item --size-opt 8395When optimizing indirect calls to direct calls, optimize for code size 8396more than performance. With this option, the linker will not insert 8397no-ops or widen density instructions to preserve branch target 8398alignment. There may still be some cases where no-ops are required to 8399preserve the correctness of the code. 8400@end table 8401 8402@ifclear GENERIC 8403@lowersections 8404@end ifclear 8405@end ifset 8406 8407@ifclear SingleFormat 8408@node BFD 8409@chapter BFD 8410 8411@cindex back end 8412@cindex object file management 8413@cindex object formats available 8414@kindex objdump -i 8415The linker accesses object and archive files using the BFD libraries. 8416These libraries allow the linker to use the same routines to operate on 8417object files whatever the object file format. A different object file 8418format can be supported simply by creating a new BFD back end and adding 8419it to the library. To conserve runtime memory, however, the linker and 8420associated tools are usually configured to support only a subset of the 8421object file formats available. You can use @code{objdump -i} 8422(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to 8423list all the formats available for your configuration. 8424 8425@cindex BFD requirements 8426@cindex requirements for BFD 8427As with most implementations, BFD is a compromise between 8428several conflicting requirements. The major factor influencing 8429BFD design was efficiency: any time used converting between 8430formats is time which would not have been spent had BFD not 8431been involved. This is partly offset by abstraction payback; since 8432BFD simplifies applications and back ends, more time and care 8433may be spent optimizing algorithms for a greater speed. 8434 8435One minor artifact of the BFD solution which you should bear in 8436mind is the potential for information loss. There are two places where 8437useful information can be lost using the BFD mechanism: during 8438conversion and during output. @xref{BFD information loss}. 8439 8440@menu 8441* BFD outline:: How it works: an outline of BFD 8442@end menu 8443 8444@node BFD outline 8445@section How It Works: An Outline of BFD 8446@cindex opening object files 8447@include bfdsumm.texi 8448@end ifclear 8449 8450@node Reporting Bugs 8451@chapter Reporting Bugs 8452@cindex bugs in @command{ld} 8453@cindex reporting bugs in @command{ld} 8454 8455Your bug reports play an essential role in making @command{ld} reliable. 8456 8457Reporting a bug may help you by bringing a solution to your problem, or 8458it may not. But in any case the principal function of a bug report is 8459to help the entire community by making the next version of @command{ld} 8460work better. Bug reports are your contribution to the maintenance of 8461@command{ld}. 8462 8463In order for a bug report to serve its purpose, you must include the 8464information that enables us to fix the bug. 8465 8466@menu 8467* Bug Criteria:: Have you found a bug? 8468* Bug Reporting:: How to report bugs 8469@end menu 8470 8471@node Bug Criteria 8472@section Have You Found a Bug? 8473@cindex bug criteria 8474 8475If you are not sure whether you have found a bug, here are some guidelines: 8476 8477@itemize @bullet 8478@cindex fatal signal 8479@cindex linker crash 8480@cindex crash of linker 8481@item 8482If the linker gets a fatal signal, for any input whatever, that is a 8483@command{ld} bug. Reliable linkers never crash. 8484 8485@cindex error on valid input 8486@item 8487If @command{ld} produces an error message for valid input, that is a bug. 8488 8489@cindex invalid input 8490@item 8491If @command{ld} does not produce an error message for invalid input, that 8492may be a bug. In the general case, the linker can not verify that 8493object files are correct. 8494 8495@item 8496If you are an experienced user of linkers, your suggestions for 8497improvement of @command{ld} are welcome in any case. 8498@end itemize 8499 8500@node Bug Reporting 8501@section How to Report Bugs 8502@cindex bug reports 8503@cindex @command{ld} bugs, reporting 8504 8505A number of companies and individuals offer support for @sc{gnu} 8506products. If you obtained @command{ld} from a support organization, we 8507recommend you contact that organization first. 8508 8509You can find contact information for many support companies and 8510individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs 8511distribution. 8512 8513@ifset BUGURL 8514Otherwise, send bug reports for @command{ld} to 8515@value{BUGURL}. 8516@end ifset 8517 8518The fundamental principle of reporting bugs usefully is this: 8519@strong{report all the facts}. If you are not sure whether to state a 8520fact or leave it out, state it! 8521 8522Often people omit facts because they think they know what causes the 8523problem and assume that some details do not matter. Thus, you might 8524assume that the name of a symbol you use in an example does not 8525matter. Well, probably it does not, but one cannot be sure. Perhaps 8526the bug is a stray memory reference which happens to fetch from the 8527location where that name is stored in memory; perhaps, if the name 8528were different, the contents of that location would fool the linker 8529into doing the right thing despite the bug. Play it safe and give a 8530specific, complete example. That is the easiest thing for you to do, 8531and the most helpful. 8532 8533Keep in mind that the purpose of a bug report is to enable us to fix 8534the bug if it is new to us. Therefore, always write your bug reports 8535on the assumption that the bug has not been reported previously. 8536 8537Sometimes people give a few sketchy facts and ask, ``Does this ring a 8538bell?'' This cannot help us fix a bug, so it is basically useless. We 8539respond by asking for enough details to enable us to investigate. 8540You might as well expedite matters by sending them to begin with. 8541 8542To enable us to fix the bug, you should include all these things: 8543 8544@itemize @bullet 8545@item 8546The version of @command{ld}. @command{ld} announces it if you start it with 8547the @samp{--version} argument. 8548 8549Without this, we will not know whether there is any point in looking for 8550the bug in the current version of @command{ld}. 8551 8552@item 8553Any patches you may have applied to the @command{ld} source, including any 8554patches made to the @code{BFD} library. 8555 8556@item 8557The type of machine you are using, and the operating system name and 8558version number. 8559 8560@item 8561What compiler (and its version) was used to compile @command{ld}---e.g. 8562``@code{gcc-2.7}''. 8563 8564@item 8565The command arguments you gave the linker to link your example and 8566observe the bug. To guarantee you will not omit something important, 8567list them all. A copy of the Makefile (or the output from make) is 8568sufficient. 8569 8570If we were to try to guess the arguments, we would probably guess wrong 8571and then we might not encounter the bug. 8572 8573@item 8574A complete input file, or set of input files, that will reproduce the 8575bug. It is generally most helpful to send the actual object files 8576provided that they are reasonably small. Say no more than 10K. For 8577bigger files you can either make them available by FTP or HTTP or else 8578state that you are willing to send the object file(s) to whomever 8579requests them. (Note - your email will be going to a mailing list, so 8580we do not want to clog it up with large attachments). But small 8581attachments are best. 8582 8583If the source files were assembled using @code{gas} or compiled using 8584@code{gcc}, then it may be OK to send the source files rather than the 8585object files. In this case, be sure to say exactly what version of 8586@code{gas} or @code{gcc} was used to produce the object files. Also say 8587how @code{gas} or @code{gcc} were configured. 8588 8589@item 8590A description of what behavior you observe that you believe is 8591incorrect. For example, ``It gets a fatal signal.'' 8592 8593Of course, if the bug is that @command{ld} gets a fatal signal, then we 8594will certainly notice it. But if the bug is incorrect output, we might 8595not notice unless it is glaringly wrong. You might as well not give us 8596a chance to make a mistake. 8597 8598Even if the problem you experience is a fatal signal, you should still 8599say so explicitly. Suppose something strange is going on, such as, your 8600copy of @command{ld} is out of sync, or you have encountered a bug in the 8601C library on your system. (This has happened!) Your copy might crash 8602and ours would not. If you told us to expect a crash, then when ours 8603fails to crash, we would know that the bug was not happening for us. If 8604you had not told us to expect a crash, then we would not be able to draw 8605any conclusion from our observations. 8606 8607@item 8608If you wish to suggest changes to the @command{ld} source, send us context 8609diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or 8610@samp{-p} option. Always send diffs from the old file to the new file. 8611If you even discuss something in the @command{ld} source, refer to it by 8612context, not by line number. 8613 8614The line numbers in our development sources will not match those in your 8615sources. Your line numbers would convey no useful information to us. 8616@end itemize 8617 8618Here are some things that are not necessary: 8619 8620@itemize @bullet 8621@item 8622A description of the envelope of the bug. 8623 8624Often people who encounter a bug spend a lot of time investigating 8625which changes to the input file will make the bug go away and which 8626changes will not affect it. 8627 8628This is often time consuming and not very useful, because the way we 8629will find the bug is by running a single example under the debugger 8630with breakpoints, not by pure deduction from a series of examples. 8631We recommend that you save your time for something else. 8632 8633Of course, if you can find a simpler example to report @emph{instead} 8634of the original one, that is a convenience for us. Errors in the 8635output will be easier to spot, running under the debugger will take 8636less time, and so on. 8637 8638However, simplification is not vital; if you do not want to do this, 8639report the bug anyway and send us the entire test case you used. 8640 8641@item 8642A patch for the bug. 8643 8644A patch for the bug does help us if it is a good one. But do not omit 8645the necessary information, such as the test case, on the assumption that 8646a patch is all we need. We might see problems with your patch and decide 8647to fix the problem another way, or we might not understand it at all. 8648 8649Sometimes with a program as complicated as @command{ld} it is very hard to 8650construct an example that will make the program follow a certain path 8651through the code. If you do not send us the example, we will not be 8652able to construct one, so we will not be able to verify that the bug is 8653fixed. 8654 8655And if we cannot understand what bug you are trying to fix, or why your 8656patch should be an improvement, we will not install it. A test case will 8657help us to understand. 8658 8659@item 8660A guess about what the bug is or what it depends on. 8661 8662Such guesses are usually wrong. Even we cannot guess right about such 8663things without first using the debugger to find the facts. 8664@end itemize 8665 8666@node MRI 8667@appendix MRI Compatible Script Files 8668@cindex MRI compatibility 8669To aid users making the transition to @sc{gnu} @command{ld} from the MRI 8670linker, @command{ld} can use MRI compatible linker scripts as an 8671alternative to the more general-purpose linker scripting language 8672described in @ref{Scripts}. MRI compatible linker scripts have a much 8673simpler command set than the scripting language otherwise used with 8674@command{ld}. @sc{gnu} @command{ld} supports the most commonly used MRI 8675linker commands; these commands are described here. 8676 8677In general, MRI scripts aren't of much use with the @code{a.out} object 8678file format, since it only has three sections and MRI scripts lack some 8679features to make use of them. 8680 8681You can specify a file containing an MRI-compatible script using the 8682@samp{-c} command-line option. 8683 8684Each command in an MRI-compatible script occupies its own line; each 8685command line starts with the keyword that identifies the command (though 8686blank lines are also allowed for punctuation). If a line of an 8687MRI-compatible script begins with an unrecognized keyword, @command{ld} 8688issues a warning message, but continues processing the script. 8689 8690Lines beginning with @samp{*} are comments. 8691 8692You can write these commands using all upper-case letters, or all 8693lower case; for example, @samp{chip} is the same as @samp{CHIP}. 8694The following list shows only the upper-case form of each command. 8695 8696@table @code 8697@cindex @code{ABSOLUTE} (MRI) 8698@item ABSOLUTE @var{secname} 8699@itemx ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname} 8700Normally, @command{ld} includes in the output file all sections from all 8701the input files. However, in an MRI-compatible script, you can use the 8702@code{ABSOLUTE} command to restrict the sections that will be present in 8703your output program. If the @code{ABSOLUTE} command is used at all in a 8704script, then only the sections named explicitly in @code{ABSOLUTE} 8705commands will appear in the linker output. You can still use other 8706input sections (whatever you select on the command line, or using 8707@code{LOAD}) to resolve addresses in the output file. 8708 8709@cindex @code{ALIAS} (MRI) 8710@item ALIAS @var{out-secname}, @var{in-secname} 8711Use this command to place the data from input section @var{in-secname} 8712in a section called @var{out-secname} in the linker output file. 8713 8714@var{in-secname} may be an integer. 8715 8716@cindex @code{ALIGN} (MRI) 8717@item ALIGN @var{secname} = @var{expression} 8718Align the section called @var{secname} to @var{expression}. The 8719@var{expression} should be a power of two. 8720 8721@cindex @code{BASE} (MRI) 8722@item BASE @var{expression} 8723Use the value of @var{expression} as the lowest address (other than 8724absolute addresses) in the output file. 8725 8726@cindex @code{CHIP} (MRI) 8727@item CHIP @var{expression} 8728@itemx CHIP @var{expression}, @var{expression} 8729This command does nothing; it is accepted only for compatibility. 8730 8731@cindex @code{END} (MRI) 8732@item END 8733This command does nothing whatever; it's only accepted for compatibility. 8734 8735@cindex @code{FORMAT} (MRI) 8736@item FORMAT @var{output-format} 8737Similar to the @code{OUTPUT_FORMAT} command in the more general linker 8738language, but restricted to S-records, if @var{output-format} is @samp{S} 8739 8740@cindex @code{LIST} (MRI) 8741@item LIST @var{anything}@dots{} 8742Print (to the standard output file) a link map, as produced by the 8743@command{ld} command-line option @samp{-M}. 8744 8745The keyword @code{LIST} may be followed by anything on the 8746same line, with no change in its effect. 8747 8748@cindex @code{LOAD} (MRI) 8749@item LOAD @var{filename} 8750@itemx LOAD @var{filename}, @var{filename}, @dots{} @var{filename} 8751Include one or more object file @var{filename} in the link; this has the 8752same effect as specifying @var{filename} directly on the @command{ld} 8753command line. 8754 8755@cindex @code{NAME} (MRI) 8756@item NAME @var{output-name} 8757@var{output-name} is the name for the program produced by @command{ld}; the 8758MRI-compatible command @code{NAME} is equivalent to the command-line 8759option @samp{-o} or the general script language command @code{OUTPUT}. 8760 8761@cindex @code{ORDER} (MRI) 8762@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname} 8763@itemx ORDER @var{secname} @var{secname} @var{secname} 8764Normally, @command{ld} orders the sections in its output file in the 8765order in which they first appear in the input files. In an MRI-compatible 8766script, you can override this ordering with the @code{ORDER} command. The 8767sections you list with @code{ORDER} will appear first in your output 8768file, in the order specified. 8769 8770@cindex @code{PUBLIC} (MRI) 8771@item PUBLIC @var{name}=@var{expression} 8772@itemx PUBLIC @var{name},@var{expression} 8773@itemx PUBLIC @var{name} @var{expression} 8774Supply a value (@var{expression}) for external symbol 8775@var{name} used in the linker input files. 8776 8777@cindex @code{SECT} (MRI) 8778@item SECT @var{secname}, @var{expression} 8779@itemx SECT @var{secname}=@var{expression} 8780@itemx SECT @var{secname} @var{expression} 8781You can use any of these three forms of the @code{SECT} command to 8782specify the start address (@var{expression}) for section @var{secname}. 8783If you have more than one @code{SECT} statement for the same 8784@var{secname}, only the @emph{first} sets the start address. 8785@end table 8786 8787@node GNU Free Documentation License 8788@appendix GNU Free Documentation License 8789@include fdl.texi 8790 8791@node LD Index 8792@unnumbered LD Index 8793 8794@printindex cp 8795 8796@tex 8797% I think something like @@colophon should be in texinfo. In the 8798% meantime: 8799\long\def\colophon{\hbox to0pt{}\vfill 8800\centerline{The body of this manual is set in} 8801\centerline{\fontname\tenrm,} 8802\centerline{with headings in {\bf\fontname\tenbf}} 8803\centerline{and examples in {\tt\fontname\tentt}.} 8804\centerline{{\it\fontname\tenit\/} and} 8805\centerline{{\sl\fontname\tensl\/}} 8806\centerline{are used for emphasis.}\vfill} 8807\page\colophon 8808% Blame: doc@@cygnus.com, 28mar91. 8809@end tex 8810 8811@bye 8812