|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087 |
- .\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
- .\"
- .\" Standard preamble:
- .\" ========================================================================
- .de Sp \" Vertical space (when we can't use .PP)
- .if t .sp .5v
- .if n .sp
- ..
- .de Vb \" Begin verbatim text
- .ft CW
- .nf
- .ne \\$1
- ..
- .de Ve \" End verbatim text
- .ft R
- .fi
- ..
- .\" Set up some character translations and predefined strings. \*(-- will
- .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
- .\" double quote, and \*(R" will give a right double quote. \*(C+ will
- .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
- .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
- .\" nothing in troff, for use with C<>.
- .tr \(*W-
- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
- .ie n \{\
- . ds -- \(*W-
- . ds PI pi
- . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
- . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- . ds L" ""
- . ds R" ""
- . ds C` ""
- . ds C' ""
- 'br\}
- .el\{\
- . ds -- \|\(em\|
- . ds PI \(*p
- . ds L" ``
- . ds R" ''
- . ds C`
- . ds C'
- 'br\}
- .\"
- .\" Escape single quotes in literal strings from groff's Unicode transform.
- .ie \n(.g .ds Aq \(aq
- .el .ds Aq '
- .\"
- .\" If the F register is turned on, we'll generate index entries on stderr for
- .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
- .\" entries marked with X<> in POD. Of course, you'll have to process the
- .\" output yourself in some meaningful fashion.
- .\"
- .\" Avoid warning from groff about undefined register 'F'.
- .de IX
- ..
- .nr rF 0
- .if \n(.g .if rF .nr rF 1
- .if (\n(rF:(\n(.g==0)) \{
- . if \nF \{
- . de IX
- . tm Index:\\$1\t\\n%\t"\\$2"
- ..
- . if !\nF==2 \{
- . nr % 0
- . nr F 2
- . \}
- . \}
- .\}
- .rr rF
- .\"
- .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
- .\" Fear. Run. Save yourself. No user-serviceable parts.
- . \" fudge factors for nroff and troff
- .if n \{\
- . ds #H 0
- . ds #V .8m
- . ds #F .3m
- . ds #[ \f1
- . ds #] \fP
- .\}
- .if t \{\
- . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
- . ds #V .6m
- . ds #F 0
- . ds #[ \&
- . ds #] \&
- .\}
- . \" simple accents for nroff and troff
- .if n \{\
- . ds ' \&
- . ds ` \&
- . ds ^ \&
- . ds , \&
- . ds ~ ~
- . ds /
- .\}
- .if t \{\
- . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
- . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
- . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
- . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
- . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
- . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
- .\}
- . \" troff and (daisy-wheel) nroff accents
- .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
- .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
- .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
- .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
- .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
- .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
- .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
- .ds ae a\h'-(\w'a'u*4/10)'e
- .ds Ae A\h'-(\w'A'u*4/10)'E
- . \" corrections for vroff
- .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
- .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
- . \" for low resolution devices (crt and lpr)
- .if \n(.H>23 .if \n(.V>19 \
- \{\
- . ds : e
- . ds 8 ss
- . ds o a
- . ds d- d\h'-1'\(ga
- . ds D- D\h'-1'\(hy
- . ds th \o'bp'
- . ds Th \o'LP'
- . ds ae ae
- . ds Ae AE
- .\}
- .rm #[ #] #H #V #F C
- .\" ========================================================================
- .\"
- .IX Title "LD 1"
- .TH LD 1 "2020-11-24" "binutils-2.35.1" "GNU Development Tools"
- .\" For nroff, turn off justification. Always turn off hyphenation; it makes
- .\" way too many mistakes in technical documents.
- .if n .ad l
- .nh
- .SH "NAME"
- ld \- The GNU linker
- .SH "SYNOPSIS"
- .IX Header "SYNOPSIS"
- ld [\fBoptions\fR] \fIobjfile\fR ...
- .SH "DESCRIPTION"
- .IX Header "DESCRIPTION"
- \&\fBld\fR combines a number of object and archive files, relocates
- their data and ties up symbol references. Usually the last step in
- compiling a program is to run \fBld\fR.
- .PP
- \&\fBld\fR accepts Linker Command Language files written in
- a superset of \s-1AT&T\s0's Link Editor Command Language syntax,
- to provide explicit and total control over the linking process.
- .PP
- This man page does not describe the command language; see the
- \&\fBld\fR entry in \f(CW\*(C`info\*(C'\fR for full details on the command
- language and on other aspects of the \s-1GNU\s0 linker.
- .PP
- This version of \fBld\fR uses the general purpose \s-1BFD\s0 libraries
- to operate on object files. This allows \fBld\fR to read, combine, and
- write object files in many different formats\-\-\-for example, \s-1COFF\s0 or
- \&\f(CW\*(C`a.out\*(C'\fR. Different formats may be linked together to produce any
- available kind of object file.
- .PP
- Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other
- linkers in providing diagnostic information. Many linkers abandon
- execution immediately upon encountering an error; whenever possible,
- \&\fBld\fR continues executing, allowing you to identify other errors
- (or, in some cases, to get an output file in spite of the error).
- .PP
- The \s-1GNU\s0 linker \fBld\fR is meant to cover a broad range of situations,
- and to be as compatible as possible with other linkers. As a result,
- you have many choices to control its behavior.
- .SH "OPTIONS"
- .IX Header "OPTIONS"
- The linker supports a plethora of command-line options, but in actual
- practice few of them are used in any particular context.
- For instance, a frequent use of \fBld\fR is to link standard Unix
- object files on a standard, supported Unix system. On such a system, to
- link a file \f(CW\*(C`hello.o\*(C'\fR:
- .PP
- .Vb 1
- \& ld \-o <output> /lib/crt0.o hello.o \-lc
- .Ve
- .PP
- This tells \fBld\fR to produce a file called \fIoutput\fR as the
- result of linking the file \f(CW\*(C`/lib/crt0.o\*(C'\fR with \f(CW\*(C`hello.o\*(C'\fR and
- the library \f(CW\*(C`libc.a\*(C'\fR, which will come from the standard search
- directories. (See the discussion of the \fB\-l\fR option below.)
- .PP
- Some of the command-line options to \fBld\fR may be specified at any
- point in the command line. However, options which refer to files, such
- as \fB\-l\fR or \fB\-T\fR, cause the file to be read at the point at
- which the option appears in the command line, relative to the object
- files and other file options. Repeating non-file options with a
- different argument will either have no further effect, or override prior
- occurrences (those further to the left on the command line) of that
- option. Options which may be meaningfully specified more than once are
- noted in the descriptions below.
- .PP
- Non-option arguments are object files or archives which are to be linked
- together. They may follow, precede, or be mixed in with command-line
- options, except that an object file argument may not be placed between
- an option and its argument.
- .PP
- Usually the linker is invoked with at least one object file, but you can
- specify other forms of binary input files using \fB\-l\fR, \fB\-R\fR,
- and the script command language. If \fIno\fR binary input files at all
- are specified, the linker does not produce any output, and issues the
- message \fBNo input files\fR.
- .PP
- If the linker cannot recognize the format of an object file, it will
- assume that it is a linker script. A script specified in this way
- augments the main linker script used for the link (either the default
- linker script or the one specified by using \fB\-T\fR). This feature
- permits the linker to link against a file which appears to be an object
- or an archive, but actually merely defines some symbol values, or uses
- \&\f(CW\*(C`INPUT\*(C'\fR or \f(CW\*(C`GROUP\*(C'\fR to load other objects. Specifying a
- script in this way merely augments the main linker script, with the
- extra commands placed after the main script; use the \fB\-T\fR option
- to replace the default linker script entirely, but note the effect of
- the \f(CW\*(C`INSERT\*(C'\fR command.
- .PP
- For options whose names are a single letter,
- option arguments must either follow the option letter without intervening
- whitespace, or be given as separate arguments immediately following the
- option that requires them.
- .PP
- For options whose names are multiple letters, either one dash or two can
- precede the option name; for example, \fB\-trace\-symbol\fR and
- \&\fB\-\-trace\-symbol\fR are equivalent. Note\-\-\-there is one exception to
- this rule. Multiple letter options that start with a lower case 'o' can
- only be preceded by two dashes. This is to reduce confusion with the
- \&\fB\-o\fR option. So for example \fB\-omagic\fR sets the output file
- name to \fBmagic\fR whereas \fB\-\-omagic\fR sets the \s-1NMAGIC\s0 flag on the
- output.
- .PP
- Arguments to multiple-letter options must either be separated from the
- option name by an equals sign, or be given as separate arguments
- immediately following the option that requires them. For example,
- \&\fB\-\-trace\-symbol foo\fR and \fB\-\-trace\-symbol=foo\fR are equivalent.
- Unique abbreviations of the names of multiple-letter options are
- accepted.
- .PP
- Note\-\-\-if the linker is being invoked indirectly, via a compiler driver
- (e.g. \fBgcc\fR) then all the linker command-line options should be
- prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular
- compiler driver) like this:
- .PP
- .Vb 1
- \& gcc \-Wl,\-\-start\-group foo.o bar.o \-Wl,\-\-end\-group
- .Ve
- .PP
- This is important, because otherwise the compiler driver program may
- silently drop the linker options, resulting in a bad link. Confusion
- may also arise when passing options that require values through a
- driver, as the use of a space between option and argument acts as
- a separator, and causes the driver to pass only the option to the linker
- and the argument to the compiler. In this case, it is simplest to use
- the joined forms of both single\- and multiple-letter options, such as:
- .PP
- .Vb 1
- \& gcc foo.o bar.o \-Wl,\-eENTRY \-Wl,\-Map=a.map
- .Ve
- .PP
- Here is a table of the generic command-line switches accepted by the \s-1GNU\s0
- linker:
- .IP "\fB@\fR\fIfile\fR" 4
- .IX Item "@file"
- Read command-line options from \fIfile\fR. The options read are
- inserted in place of the original @\fIfile\fR option. If \fIfile\fR
- does not exist, or cannot be read, then the option will be treated
- literally, and not removed.
- .Sp
- Options in \fIfile\fR are separated by whitespace. A whitespace
- character may be included in an option by surrounding the entire
- option in either single or double quotes. Any character (including a
- backslash) may be included by prefixing the character to be included
- with a backslash. The \fIfile\fR may itself contain additional
- @\fIfile\fR options; any such options will be processed recursively.
- .IP "\fB\-a\fR \fIkeyword\fR" 4
- .IX Item "-a keyword"
- This option is supported for \s-1HP/UX\s0 compatibility. The \fIkeyword\fR
- argument must be one of the strings \fBarchive\fR, \fBshared\fR, or
- \&\fBdefault\fR. \fB\-aarchive\fR is functionally equivalent to
- \&\fB\-Bstatic\fR, and the other two keywords are functionally equivalent
- to \fB\-Bdynamic\fR. This option may be used any number of times.
- .IP "\fB\-\-audit\fR \fI\s-1AUDITLIB\s0\fR" 4
- .IX Item "--audit AUDITLIB"
- Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_AUDIT\*(C'\fR entry of the dynamic section.
- \&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
- specified in the library. If specified multiple times \f(CW\*(C`DT_AUDIT\*(C'\fR
- will contain a colon separated list of audit interfaces to use. If the linker
- finds an object with an audit entry while searching for shared libraries,
- it will add a corresponding \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry in the output file.
- This option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit
- interface.
- .IP "\fB\-b\fR \fIinput-format\fR" 4
- .IX Item "-b input-format"
- .PD 0
- .IP "\fB\-\-format=\fR\fIinput-format\fR" 4
- .IX Item "--format=input-format"
- .PD
- \&\fBld\fR may be configured to support more than one kind of object
- file. If your \fBld\fR is configured this way, you can use the
- \&\fB\-b\fR option to specify the binary format for input object files
- that follow this option on the command line. Even when \fBld\fR is
- configured to support alternative object formats, you don't usually need
- to specify this, as \fBld\fR should be configured to expect as a
- default input format the most usual format on each machine.
- \&\fIinput-format\fR is a text string, the name of a particular format
- supported by the \s-1BFD\s0 libraries. (You can list the available binary
- formats with \fBobjdump \-i\fR.)
- .Sp
- You may want to use this option if you are linking files with an unusual
- binary format. You can also use \fB\-b\fR to switch formats explicitly (when
- linking object files of different formats), by including
- \&\fB\-b\fR \fIinput-format\fR before each group of object files in a
- particular format.
- .Sp
- The default format is taken from the environment variable
- \&\f(CW\*(C`GNUTARGET\*(C'\fR.
- .Sp
- You can also define the input format from a script, using the command
- \&\f(CW\*(C`TARGET\*(C'\fR;
- .IP "\fB\-c\fR \fIMRI-commandfile\fR" 4
- .IX Item "-c MRI-commandfile"
- .PD 0
- .IP "\fB\-\-mri\-script=\fR\fIMRI-commandfile\fR" 4
- .IX Item "--mri-script=MRI-commandfile"
- .PD
- For compatibility with linkers produced by \s-1MRI, \s0\fBld\fR accepts script
- files written in an alternate, restricted command language, described in
- the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation.
- Introduce \s-1MRI\s0 script files with
- the option \fB\-c\fR; use the \fB\-T\fR option to run linker
- scripts written in the general-purpose \fBld\fR scripting language.
- If \fIMRI-cmdfile\fR does not exist, \fBld\fR looks for it in the directories
- specified by any \fB\-L\fR options.
- .IP "\fB\-d\fR" 4
- .IX Item "-d"
- .PD 0
- .IP "\fB\-dc\fR" 4
- .IX Item "-dc"
- .IP "\fB\-dp\fR" 4
- .IX Item "-dp"
- .PD
- These three options are equivalent; multiple forms are supported for
- compatibility with other linkers. They assign space to common symbols
- even if a relocatable output file is specified (with \fB\-r\fR). The
- script command \f(CW\*(C`FORCE_COMMON_ALLOCATION\*(C'\fR has the same effect.
- .IP "\fB\-\-depaudit\fR \fI\s-1AUDITLIB\s0\fR" 4
- .IX Item "--depaudit AUDITLIB"
- .PD 0
- .IP "\fB\-P\fR \fI\s-1AUDITLIB\s0\fR" 4
- .IX Item "-P AUDITLIB"
- .PD
- Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry of the dynamic section.
- \&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
- specified in the library. If specified multiple times \f(CW\*(C`DT_DEPAUDIT\*(C'\fR
- will contain a colon separated list of audit interfaces to use. This
- option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit interface.
- The \-P option is provided for Solaris compatibility.
- .IP "\fB\-\-enable\-non\-contiguous\-regions\fR" 4
- .IX Item "--enable-non-contiguous-regions"
- This option avoids generating an error if an input section does not
- fit a matching output section. The linker tries to allocate the input
- section to subseque nt matching output sections, and generates an
- error only if no output section is large enough. This is useful when
- several non-contiguous memory regions are available and the input
- section does not require a particular one. The order in which input
- sections are evaluated does not change, for instance:
- .Sp
- .Vb 10
- \& MEMORY {
- \& MEM1 (rwx) : ORIGIN : 0x1000, LENGTH = 0x14
- \& MEM2 (rwx) : ORIGIN : 0x1000, LENGTH = 0x40
- \& MEM3 (rwx) : ORIGIN : 0x2000, LENGTH = 0x40
- \& }
- \& SECTIONS {
- \& mem1 : { *(.data.*); } > MEM1
- \& mem2 : { *(.data.*); } > MEM2
- \& mem3 : { *(.data.*); } > MEM2
- \& }
- \&
- \& with input sections:
- \& .data.1: size 8
- \& .data.2: size 0x10
- \& .data.3: size 4
- \&
- \& results in .data.1 affected to mem1, and .data.2 and .data.3
- \& affected to mem2, even though .data.3 would fit in mem3.
- .Ve
- .Sp
- This option is incompatible with \s-1INSERT\s0 statements because it changes
- the way input sections are mapped to output sections.
- .IP "\fB\-\-enable\-non\-contiguous\-regions\-warnings\fR" 4
- .IX Item "--enable-non-contiguous-regions-warnings"
- This option enables warnings when
- \&\f(CW\*(C`\-\-enable\-non\-contiguous\-regions\*(C'\fR allows possibly unexpected
- matches in sections mapping, potentially leading to silently
- discarding a section instead of failing because it does not fit any
- output region.
- .IP "\fB\-e\fR \fIentry\fR" 4
- .IX Item "-e entry"
- .PD 0
- .IP "\fB\-\-entry=\fR\fIentry\fR" 4
- .IX Item "--entry=entry"
- .PD
- Use \fIentry\fR as the explicit symbol for beginning execution of your
- program, rather than the default entry point. If there is no symbol
- named \fIentry\fR, the linker will try to parse \fIentry\fR as a number,
- and use that as the entry address (the number will be interpreted in
- base 10; you may use a leading \fB0x\fR for base 16, or a leading
- \&\fB0\fR for base 8).
- .IP "\fB\-\-exclude\-libs\fR \fIlib\fR\fB,\fR\fIlib\fR\fB,...\fR" 4
- .IX Item "--exclude-libs lib,lib,..."
- Specifies a list of archive libraries from which symbols should not be automatically
- exported. The library names may be delimited by commas or colons. Specifying
- \&\f(CW\*(C`\-\-exclude\-libs ALL\*(C'\fR excludes symbols in all archive libraries from
- automatic export. This option is available only for the i386 \s-1PE\s0 targeted
- port of the linker and for \s-1ELF\s0 targeted ports. For i386 \s-1PE,\s0 symbols
- explicitly listed in a .def file are still exported, regardless of this
- option. For \s-1ELF\s0 targeted ports, symbols affected by this option will
- be treated as hidden.
- .IP "\fB\-\-exclude\-modules\-for\-implib\fR \fImodule\fR\fB,\fR\fImodule\fR\fB,...\fR" 4
- .IX Item "--exclude-modules-for-implib module,module,..."
- Specifies a list of object files or archive members, from which symbols
- should not be automatically exported, but which should be copied wholesale
- into the import library being generated during the link. The module names
- may be delimited by commas or colons, and must match exactly the filenames
- used by \fBld\fR to open the files; for archive members, this is simply
- the member name, but for object files the name listed must include and
- match precisely any path used to specify the input file on the linker's
- command-line. This option is available only for the i386 \s-1PE\s0 targeted port
- of the linker. Symbols explicitly listed in a .def file are still exported,
- regardless of this option.
- .IP "\fB\-E\fR" 4
- .IX Item "-E"
- .PD 0
- .IP "\fB\-\-export\-dynamic\fR" 4
- .IX Item "--export-dynamic"
- .IP "\fB\-\-no\-export\-dynamic\fR" 4
- .IX Item "--no-export-dynamic"
- .PD
- When creating a dynamically linked executable, using the \fB\-E\fR
- option or the \fB\-\-export\-dynamic\fR option causes the linker to add
- all symbols to the dynamic symbol table. The dynamic symbol table is the
- set of symbols which are visible from dynamic objects at run time.
- .Sp
- If you do not use either of these options (or use the
- \&\fB\-\-no\-export\-dynamic\fR option to restore the default behavior), the
- dynamic symbol table will normally contain only those symbols which are
- referenced by some dynamic object mentioned in the link.
- .Sp
- If you use \f(CW\*(C`dlopen\*(C'\fR to load a dynamic object which needs to refer
- back to the symbols defined by the program, rather than some other
- dynamic object, then you will probably need to use this option when
- linking the program itself.
- .Sp
- You can also use the dynamic list to control what symbols should
- be added to the dynamic symbol table if the output format supports it.
- See the description of \fB\-\-dynamic\-list\fR.
- .Sp
- Note that this option is specific to \s-1ELF\s0 targeted ports. \s-1PE\s0 targets
- support a similar function to export all symbols from a \s-1DLL\s0 or \s-1EXE\s0; see
- the description of \fB\-\-export\-all\-symbols\fR below.
- .IP "\fB\-\-export\-dynamic\-symbol=\fR\fIglob\fR" 4
- .IX Item "--export-dynamic-symbol=glob"
- When creating a dynamically linked executable, symbols matching
- \&\fIglob\fR will be added to the dynamic symbol table. When creating a
- shared library, references to symbols matching \fIglob\fR will not be
- bound to the definitions within the shared library. This option is a
- no-op when creating a shared library and \fB\-Bsymbolic\fR or
- \&\fB\-\-dynamic\-list\fR are not specified. This option is only meaningful
- on \s-1ELF\s0 platforms which support shared libraries.
- .IP "\fB\-\-export\-dynamic\-symbol\-list=\fR\fIfile\fR" 4
- .IX Item "--export-dynamic-symbol-list=file"
- Specify a \fB\-\-export\-dynamic\-symbol\fR for each pattern in the file.
- The format of the file is the same as the version node without
- scope and node name. See \fB\s-1VERSION\s0\fR for more information.
- .IP "\fB\-EB\fR" 4
- .IX Item "-EB"
- Link big-endian objects. This affects the default output format.
- .IP "\fB\-EL\fR" 4
- .IX Item "-EL"
- Link little-endian objects. This affects the default output format.
- .IP "\fB\-f\fR \fIname\fR" 4
- .IX Item "-f name"
- .PD 0
- .IP "\fB\-\-auxiliary=\fR\fIname\fR" 4
- .IX Item "--auxiliary=name"
- .PD
- When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_AUXILIARY\s0 field
- to the specified name. This tells the dynamic linker that the symbol
- table of the shared object should be used as an auxiliary filter on the
- symbol table of the shared object \fIname\fR.
- .Sp
- If you later link a program against this filter object, then, when you
- run the program, the dynamic linker will see the \s-1DT_AUXILIARY\s0 field. If
- the dynamic linker resolves any symbols from the filter object, it will
- first check whether there is a definition in the shared object
- \&\fIname\fR. If there is one, it will be used instead of the definition
- in the filter object. The shared object \fIname\fR need not exist.
- Thus the shared object \fIname\fR may be used to provide an alternative
- implementation of certain functions, perhaps for debugging or for
- machine-specific performance.
- .Sp
- This option may be specified more than once. The \s-1DT_AUXILIARY\s0 entries
- will be created in the order in which they appear on the command line.
- .IP "\fB\-F\fR \fIname\fR" 4
- .IX Item "-F name"
- .PD 0
- .IP "\fB\-\-filter=\fR\fIname\fR" 4
- .IX Item "--filter=name"
- .PD
- When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_FILTER\s0 field to
- the specified name. This tells the dynamic linker that the symbol table
- of the shared object which is being created should be used as a filter
- on the symbol table of the shared object \fIname\fR.
- .Sp
- If you later link a program against this filter object, then, when you
- run the program, the dynamic linker will see the \s-1DT_FILTER\s0 field. The
- dynamic linker will resolve symbols according to the symbol table of the
- filter object as usual, but it will actually link to the definitions
- found in the shared object \fIname\fR. Thus the filter object can be
- used to select a subset of the symbols provided by the object
- \&\fIname\fR.
- .Sp
- Some older linkers used the \fB\-F\fR option throughout a compilation
- toolchain for specifying object-file format for both input and output
- object files.
- The \s-1GNU\s0 linker uses other mechanisms for this purpose: the
- \&\fB\-b\fR, \fB\-\-format\fR, \fB\-\-oformat\fR options, the
- \&\f(CW\*(C`TARGET\*(C'\fR command in linker scripts, and the \f(CW\*(C`GNUTARGET\*(C'\fR
- environment variable.
- The \s-1GNU\s0 linker will ignore the \fB\-F\fR option when not
- creating an \s-1ELF\s0 shared object.
- .IP "\fB\-fini=\fR\fIname\fR" 4
- .IX Item "-fini=name"
- When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
- executable or shared object is unloaded, by setting \s-1DT_FINI\s0 to the
- address of the function. By default, the linker uses \f(CW\*(C`_fini\*(C'\fR as
- the function to call.
- .IP "\fB\-g\fR" 4
- .IX Item "-g"
- Ignored. Provided for compatibility with other tools.
- .IP "\fB\-G\fR \fIvalue\fR" 4
- .IX Item "-G value"
- .PD 0
- .IP "\fB\-\-gpsize=\fR\fIvalue\fR" 4
- .IX Item "--gpsize=value"
- .PD
- Set the maximum size of objects to be optimized using the \s-1GP\s0 register to
- \&\fIsize\fR. This is only meaningful for object file formats such as
- \&\s-1MIPS ELF\s0 that support putting large and small objects into different
- sections. This is ignored for other object file formats.
- .IP "\fB\-h\fR \fIname\fR" 4
- .IX Item "-h name"
- .PD 0
- .IP "\fB\-soname=\fR\fIname\fR" 4
- .IX Item "-soname=name"
- .PD
- When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_SONAME\s0 field to
- the specified name. When an executable is linked with a shared object
- which has a \s-1DT_SONAME\s0 field, then when the executable is run the dynamic
- linker will attempt to load the shared object specified by the \s-1DT_SONAME\s0
- field rather than the using the file name given to the linker.
- .IP "\fB\-i\fR" 4
- .IX Item "-i"
- Perform an incremental link (same as option \fB\-r\fR).
- .IP "\fB\-init=\fR\fIname\fR" 4
- .IX Item "-init=name"
- When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
- executable or shared object is loaded, by setting \s-1DT_INIT\s0 to the address
- of the function. By default, the linker uses \f(CW\*(C`_init\*(C'\fR as the
- function to call.
- .IP "\fB\-l\fR \fInamespec\fR" 4
- .IX Item "-l namespec"
- .PD 0
- .IP "\fB\-\-library=\fR\fInamespec\fR" 4
- .IX Item "--library=namespec"
- .PD
- Add the archive or object file specified by \fInamespec\fR to the
- list of files to link. This option may be used any number of times.
- If \fInamespec\fR is of the form \fI:\fIfilename\fI\fR, \fBld\fR
- will search the library path for a file called \fIfilename\fR, otherwise it
- will search the library path for a file called \fIlib\fInamespec\fI.a\fR.
- .Sp
- On systems which support shared libraries, \fBld\fR may also search for
- files other than \fIlib\fInamespec\fI.a\fR. Specifically, on \s-1ELF\s0
- and SunOS systems, \fBld\fR will search a directory for a library
- called \fIlib\fInamespec\fI.so\fR before searching for one called
- \&\fIlib\fInamespec\fI.a\fR. (By convention, a \f(CW\*(C`.so\*(C'\fR extension
- indicates a shared library.) Note that this behavior does not apply
- to \fI:\fIfilename\fI\fR, which always specifies a file called
- \&\fIfilename\fR.
- .Sp
- The linker will search an archive only once, at the location where it is
- specified on the command line. If the archive defines a symbol which
- was undefined in some object which appeared before the archive on the
- command line, the linker will include the appropriate file(s) from the
- archive. However, an undefined symbol in an object appearing later on
- the command line will not cause the linker to search the archive again.
- .Sp
- See the \fB\-(\fR option for a way to force the linker to search
- archives multiple times.
- .Sp
- You may list the same archive multiple times on the command line.
- .Sp
- This type of archive searching is standard for Unix linkers. However,
- if you are using \fBld\fR on \s-1AIX,\s0 note that it is different from the
- behaviour of the \s-1AIX\s0 linker.
- .IP "\fB\-L\fR \fIsearchdir\fR" 4
- .IX Item "-L searchdir"
- .PD 0
- .IP "\fB\-\-library\-path=\fR\fIsearchdir\fR" 4
- .IX Item "--library-path=searchdir"
- .PD
- Add path \fIsearchdir\fR to the list of paths that \fBld\fR will search
- for archive libraries and \fBld\fR control scripts. You may use this
- option any number of times. The directories are searched in the order
- in which they are specified on the command line. Directories specified
- on the command line are searched before the default directories. All
- \&\fB\-L\fR options apply to all \fB\-l\fR options, regardless of the
- order in which the options appear. \fB\-L\fR options do not affect
- how \fBld\fR searches for a linker script unless \fB\-T\fR
- option is specified.
- .Sp
- If \fIsearchdir\fR begins with \f(CW\*(C`=\*(C'\fR or \f(CW$SYSROOT\fR, then this
- prefix will be replaced by the \fIsysroot prefix\fR, controlled by the
- \&\fB\-\-sysroot\fR option, or specified when the linker is configured.
- .Sp
- The default set of paths searched (without being specified with
- \&\fB\-L\fR) depends on which emulation mode \fBld\fR is using, and in
- some cases also on how it was configured.
- .Sp
- The paths can also be specified in a link script with the
- \&\f(CW\*(C`SEARCH_DIR\*(C'\fR command. Directories specified this way are searched
- at the point in which the linker script appears in the command line.
- .IP "\fB\-m\fR \fIemulation\fR" 4
- .IX Item "-m emulation"
- Emulate the \fIemulation\fR linker. You can list the available
- emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.
- .Sp
- If the \fB\-m\fR option is not used, the emulation is taken from the
- \&\f(CW\*(C`LDEMULATION\*(C'\fR environment variable, if that is defined.
- .Sp
- Otherwise, the default emulation depends upon how the linker was
- configured.
- .IP "\fB\-M\fR" 4
- .IX Item "-M"
- .PD 0
- .IP "\fB\-\-print\-map\fR" 4
- .IX Item "--print-map"
- .PD
- Print a link map to the standard output. A link map provides
- information about the link, including the following:
- .RS 4
- .IP "\(bu" 4
- Where object files are mapped into memory.
- .IP "\(bu" 4
- How common symbols are allocated.
- .IP "\(bu" 4
- All archive members included in the link, with a mention of the symbol
- which caused the archive member to be brought in.
- .IP "\(bu" 4
- The values assigned to symbols.
- .Sp
- Note \- symbols whose values are computed by an expression which
- involves a reference to a previous value of the same symbol may not
- have correct result displayed in the link map. This is because the
- linker discards intermediate results and only retains the final value
- of an expression. Under such circumstances the linker will display
- the final value enclosed by square brackets. Thus for example a
- linker script containing:
- .Sp
- .Vb 3
- \& foo = 1
- \& foo = foo * 4
- \& foo = foo + 8
- .Ve
- .Sp
- will produce the following output in the link map if the \fB\-M\fR
- option is used:
- .Sp
- .Vb 3
- \& 0x00000001 foo = 0x1
- \& [0x0000000c] foo = (foo * 0x4)
- \& [0x0000000c] foo = (foo + 0x8)
- .Ve
- .Sp
- See \fBExpressions\fR for more information about expressions in linker
- scripts.
- .IP "\(bu" 4
- How \s-1GNU\s0 properties are merged.
- .Sp
- When the linker merges input .note.gnu.property sections into one output
- \&.note.gnu.property section, some properties are removed or updated.
- These actions are reported in the link map. For example:
- .Sp
- .Vb 1
- \& Removed property 0xc0000002 to merge foo.o (0x1) and bar.o (not found)
- .Ve
- .Sp
- This indicates that property 0xc0000002 is removed from output when
- merging properties in \fIfoo.o\fR, whose property 0xc0000002 value
- is 0x1, and \fIbar.o\fR, which doesn't have property 0xc0000002.
- .Sp
- .Vb 1
- \& Updated property 0xc0010001 (0x1) to merge foo.o (0x1) and bar.o (0x1)
- .Ve
- .Sp
- This indicates that property 0xc0010001 value is updated to 0x1 in output
- when merging properties in \fIfoo.o\fR, whose 0xc0010001 property value
- is 0x1, and \fIbar.o\fR, whose 0xc0010001 property value is 0x1.
- .RE
- .RS 4
- .RE
- .IP "\fB\-\-print\-map\-discarded\fR" 4
- .IX Item "--print-map-discarded"
- .PD 0
- .IP "\fB\-\-no\-print\-map\-discarded\fR" 4
- .IX Item "--no-print-map-discarded"
- .PD
- Print (or do not print) the list of discarded and garbage collected sections
- in the link map. Enabled by default.
- .IP "\fB\-n\fR" 4
- .IX Item "-n"
- .PD 0
- .IP "\fB\-\-nmagic\fR" 4
- .IX Item "--nmagic"
- .PD
- Turn off page alignment of sections, and disable linking against shared
- libraries. If the output format supports Unix style magic numbers,
- mark the output as \f(CW\*(C`NMAGIC\*(C'\fR.
- .IP "\fB\-N\fR" 4
- .IX Item "-N"
- .PD 0
- .IP "\fB\-\-omagic\fR" 4
- .IX Item "--omagic"
- .PD
- Set the text and data sections to be readable and writable. Also, do
- not page-align the data segment, and disable linking against shared
- libraries. If the output format supports Unix style magic numbers,
- mark the output as \f(CW\*(C`OMAGIC\*(C'\fR. Note: Although a writable text section
- is allowed for PE-COFF targets, it does not conform to the format
- specification published by Microsoft.
- .IP "\fB\-\-no\-omagic\fR" 4
- .IX Item "--no-omagic"
- This option negates most of the effects of the \fB\-N\fR option. It
- sets the text section to be read-only, and forces the data segment to
- be page-aligned. Note \- this option does not enable linking against
- shared libraries. Use \fB\-Bdynamic\fR for this.
- .IP "\fB\-o\fR \fIoutput\fR" 4
- .IX Item "-o output"
- .PD 0
- .IP "\fB\-\-output=\fR\fIoutput\fR" 4
- .IX Item "--output=output"
- .PD
- Use \fIoutput\fR as the name for the program produced by \fBld\fR; if this
- option is not specified, the name \fIa.out\fR is used by default. The
- script command \f(CW\*(C`OUTPUT\*(C'\fR can also specify the output file name.
- .IP "\fB\-\-dependency\-file=\fR\fIdepfile\fR" 4
- .IX Item "--dependency-file=depfile"
- Write a \fIdependency file\fR to \fIdepfile\fR. This file contains a rule
- suitable for \f(CW\*(C`make\*(C'\fR describing the output file and all the input files
- that were read to produce it. The output is similar to the compiler's
- output with \fB\-M \-MP\fR. Note that there is no option like the compiler's \fB\-MM\fR,
- to exclude \*(L"system files\*(R" (which is not a well-specified concept in the
- linker, unlike \*(L"system headers\*(R" in the compiler). So the output from
- \&\fB\-\-dependency\-file\fR is always specific to the exact state of the
- installation where it was produced, and should not be copied into
- distributed makefiles without careful editing.
- .IP "\fB\-O\fR \fIlevel\fR" 4
- .IX Item "-O level"
- If \fIlevel\fR is a numeric values greater than zero \fBld\fR optimizes
- the output. This might take significantly longer and therefore probably
- should only be enabled for the final binary. At the moment this
- option only affects \s-1ELF\s0 shared library generation. Future releases of
- the linker may make more use of this option. Also currently there is
- no difference in the linker's behaviour for different non-zero values
- of this option. Again this may change with future releases.
- .IP "\fB\-plugin\fR \fIname\fR" 4
- .IX Item "-plugin name"
- Involve a plugin in the linking process. The \fIname\fR parameter is
- the absolute filename of the plugin. Usually this parameter is
- automatically added by the complier, when using link time
- optimization, but users can also add their own plugins if they so
- wish.
- .Sp
- Note that the location of the compiler originated plugins is different
- from the place where the \fBar\fR, \fBnm\fR and
- \&\fBranlib\fR programs search for their plugins. In order for
- those commands to make use of a compiler based plugin it must first be
- copied into the \fI${libdir}/bfd\-plugins\fR directory. All gcc
- based linker plugins are backward compatible, so it is sufficient to
- just copy in the newest one.
- .IP "\fB\-\-push\-state\fR" 4
- .IX Item "--push-state"
- The \fB\-\-push\-state\fR allows to preserve the current state of the
- flags which govern the input file handling so that they can all be
- restored with one corresponding \fB\-\-pop\-state\fR option.
- .Sp
- The option which are covered are: \fB\-Bdynamic\fR, \fB\-Bstatic\fR,
- \&\fB\-dn\fR, \fB\-dy\fR, \fB\-call_shared\fR, \fB\-non_shared\fR,
- \&\fB\-static\fR, \fB\-N\fR, \fB\-n\fR, \fB\-\-whole\-archive\fR,
- \&\fB\-\-no\-whole\-archive\fR, \fB\-r\fR, \fB\-Ur\fR,
- \&\fB\-\-copy\-dt\-needed\-entries\fR, \fB\-\-no\-copy\-dt\-needed\-entries\fR,
- \&\fB\-\-as\-needed\fR, \fB\-\-no\-as\-needed\fR, and \fB\-a\fR.
- .Sp
- One target for this option are specifications for \fIpkg-config\fR. When
- used with the \fB\-\-libs\fR option all possibly needed libraries are
- listed and then possibly linked with all the time. It is better to return
- something as follows:
- .Sp
- .Vb 1
- \& \-Wl,\-\-push\-state,\-\-as\-needed \-libone \-libtwo \-Wl,\-\-pop\-state
- .Ve
- .IP "\fB\-\-pop\-state\fR" 4
- .IX Item "--pop-state"
- Undoes the effect of \-\-push\-state, restores the previous values of the
- flags governing input file handling.
- .IP "\fB\-q\fR" 4
- .IX Item "-q"
- .PD 0
- .IP "\fB\-\-emit\-relocs\fR" 4
- .IX Item "--emit-relocs"
- .PD
- Leave relocation sections and contents in fully linked executables.
- Post link analysis and optimization tools may need this information in
- order to perform correct modifications of executables. This results
- in larger executables.
- .Sp
- This option is currently only supported on \s-1ELF\s0 platforms.
- .IP "\fB\-\-force\-dynamic\fR" 4
- .IX Item "--force-dynamic"
- Force the output file to have dynamic sections. This option is specific
- to VxWorks targets.
- .IP "\fB\-r\fR" 4
- .IX Item "-r"
- .PD 0
- .IP "\fB\-\-relocatable\fR" 4
- .IX Item "--relocatable"
- .PD
- Generate relocatable output\-\-\-i.e., generate an output file that can in
- turn serve as input to \fBld\fR. This is often called \fIpartial
- linking\fR. As a side effect, in environments that support standard Unix
- magic numbers, this option also sets the output file's magic number to
- \&\f(CW\*(C`OMAGIC\*(C'\fR.
- If this option is not specified, an absolute file is produced. When
- linking \*(C+ programs, this option \fIwill not\fR resolve references to
- constructors; to do that, use \fB\-Ur\fR.
- .Sp
- When an input file does not have the same format as the output file,
- partial linking is only supported if that input file does not contain any
- relocations. Different output formats can have further restrictions; for
- example some \f(CW\*(C`a.out\*(C'\fR\-based formats do not support partial linking
- with input files in other formats at all.
- .Sp
- This option does the same thing as \fB\-i\fR.
- .IP "\fB\-R\fR \fIfilename\fR" 4
- .IX Item "-R filename"
- .PD 0
- .IP "\fB\-\-just\-symbols=\fR\fIfilename\fR" 4
- .IX Item "--just-symbols=filename"
- .PD
- Read symbol names and their addresses from \fIfilename\fR, but do not
- relocate it or include it in the output. This allows your output file
- to refer symbolically to absolute locations of memory defined in other
- programs. You may use this option more than once.
- .Sp
- For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
- followed by a directory name, rather than a file name, it is treated as
- the \fB\-rpath\fR option.
- .IP "\fB\-s\fR" 4
- .IX Item "-s"
- .PD 0
- .IP "\fB\-\-strip\-all\fR" 4
- .IX Item "--strip-all"
- .PD
- Omit all symbol information from the output file.
- .IP "\fB\-S\fR" 4
- .IX Item "-S"
- .PD 0
- .IP "\fB\-\-strip\-debug\fR" 4
- .IX Item "--strip-debug"
- .PD
- Omit debugger symbol information (but not all symbols) from the output file.
- .IP "\fB\-\-strip\-discarded\fR" 4
- .IX Item "--strip-discarded"
- .PD 0
- .IP "\fB\-\-no\-strip\-discarded\fR" 4
- .IX Item "--no-strip-discarded"
- .PD
- Omit (or do not omit) global symbols defined in discarded sections.
- Enabled by default.
- .IP "\fB\-t\fR" 4
- .IX Item "-t"
- .PD 0
- .IP "\fB\-\-trace\fR" 4
- .IX Item "--trace"
- .PD
- Print the names of the input files as \fBld\fR processes them. If
- \&\fB\-t\fR is given twice then members within archives are also printed.
- \&\fB\-t\fR output is useful to generate a list of all the object files
- and scripts involved in linking, for example, when packaging files for
- a linker bug report.
- .IP "\fB\-T\fR \fIscriptfile\fR" 4
- .IX Item "-T scriptfile"
- .PD 0
- .IP "\fB\-\-script=\fR\fIscriptfile\fR" 4
- .IX Item "--script=scriptfile"
- .PD
- Use \fIscriptfile\fR as the linker script. This script replaces
- \&\fBld\fR's default linker script (rather than adding to it), so
- \&\fIcommandfile\fR must specify everything necessary to describe the
- output file. If \fIscriptfile\fR does not exist in
- the current directory, \f(CW\*(C`ld\*(C'\fR looks for it in the directories
- specified by any preceding \fB\-L\fR options. Multiple \fB\-T\fR
- options accumulate.
- .IP "\fB\-dT\fR \fIscriptfile\fR" 4
- .IX Item "-dT scriptfile"
- .PD 0
- .IP "\fB\-\-default\-script=\fR\fIscriptfile\fR" 4
- .IX Item "--default-script=scriptfile"
- .PD
- Use \fIscriptfile\fR as the default linker script.
- .Sp
- This option is similar to the \fB\-\-script\fR option except that
- processing of the script is delayed until after the rest of the
- command line has been processed. This allows options placed after the
- \&\fB\-\-default\-script\fR option on the command line to affect the
- behaviour of the linker script, which can be important when the linker
- command line cannot be directly controlled by the user. (eg because
- the command line is being constructed by another tool, such as
- \&\fBgcc\fR).
- .IP "\fB\-u\fR \fIsymbol\fR" 4
- .IX Item "-u symbol"
- .PD 0
- .IP "\fB\-\-undefined=\fR\fIsymbol\fR" 4
- .IX Item "--undefined=symbol"
- .PD
- Force \fIsymbol\fR to be entered in the output file as an undefined
- symbol. Doing this may, for example, trigger linking of additional
- modules from standard libraries. \fB\-u\fR may be repeated with
- different option arguments to enter additional undefined symbols. This
- option is equivalent to the \f(CW\*(C`EXTERN\*(C'\fR linker script command.
- .Sp
- If this option is being used to force additional modules to be pulled
- into the link, and if it is an error for the symbol to remain
- undefined, then the option \fB\-\-require\-defined\fR should be used
- instead.
- .IP "\fB\-\-require\-defined=\fR\fIsymbol\fR" 4
- .IX Item "--require-defined=symbol"
- Require that \fIsymbol\fR is defined in the output file. This option
- is the same as option \fB\-\-undefined\fR except that if \fIsymbol\fR
- is not defined in the output file then the linker will issue an error
- and exit. The same effect can be achieved in a linker script by using
- \&\f(CW\*(C`EXTERN\*(C'\fR, \f(CW\*(C`ASSERT\*(C'\fR and \f(CW\*(C`DEFINED\*(C'\fR together. This option
- can be used multiple times to require additional symbols.
- .IP "\fB\-Ur\fR" 4
- .IX Item "-Ur"
- For anything other than \*(C+ programs, this option is equivalent to
- \&\fB\-r\fR: it generates relocatable output\-\-\-i.e., an output file that can in
- turn serve as input to \fBld\fR. When linking \*(C+ programs, \fB\-Ur\fR
- \&\fIdoes\fR resolve references to constructors, unlike \fB\-r\fR.
- It does not work to use \fB\-Ur\fR on files that were themselves linked
- with \fB\-Ur\fR; once the constructor table has been built, it cannot
- be added to. Use \fB\-Ur\fR only for the last partial link, and
- \&\fB\-r\fR for the others.
- .IP "\fB\-\-orphan\-handling=\fR\fI\s-1MODE\s0\fR" 4
- .IX Item "--orphan-handling=MODE"
- Control how orphan sections are handled. An orphan section is one not
- specifically mentioned in a linker script.
- .Sp
- \&\fI\s-1MODE\s0\fR can have any of the following values:
- .RS 4
- .ie n .IP """place""" 4
- .el .IP "\f(CWplace\fR" 4
- .IX Item "place"
- Orphan sections are placed into a suitable output section following
- the strategy described in \fBOrphan Sections\fR. The option
- \&\fB\-\-unique\fR also affects how sections are placed.
- .ie n .IP """discard""" 4
- .el .IP "\f(CWdiscard\fR" 4
- .IX Item "discard"
- All orphan sections are discarded, by placing them in the
- \&\fB/DISCARD/\fR section.
- .ie n .IP """warn""" 4
- .el .IP "\f(CWwarn\fR" 4
- .IX Item "warn"
- The linker will place the orphan section as for \f(CW\*(C`place\*(C'\fR and also
- issue a warning.
- .ie n .IP """error""" 4
- .el .IP "\f(CWerror\fR" 4
- .IX Item "error"
- The linker will exit with an error if any orphan section is found.
- .RE
- .RS 4
- .Sp
- The default if \fB\-\-orphan\-handling\fR is not given is \f(CW\*(C`place\*(C'\fR.
- .RE
- .IP "\fB\-\-unique[=\fR\fI\s-1SECTION\s0\fR\fB]\fR" 4
- .IX Item "--unique[=SECTION]"
- Creates a separate output section for every input section matching
- \&\fI\s-1SECTION\s0\fR, or if the optional wildcard \fI\s-1SECTION\s0\fR argument is
- missing, for every orphan input section. An orphan section is one not
- specifically mentioned in a linker script. You may use this option
- multiple times on the command line; It prevents the normal merging of
- input sections with the same name, overriding output section assignments
- in a linker script.
- .IP "\fB\-v\fR" 4
- .IX Item "-v"
- .PD 0
- .IP "\fB\-\-version\fR" 4
- .IX Item "--version"
- .IP "\fB\-V\fR" 4
- .IX Item "-V"
- .PD
- Display the version number for \fBld\fR. The \fB\-V\fR option also
- lists the supported emulations.
- .IP "\fB\-x\fR" 4
- .IX Item "-x"
- .PD 0
- .IP "\fB\-\-discard\-all\fR" 4
- .IX Item "--discard-all"
- .PD
- Delete all local symbols.
- .IP "\fB\-X\fR" 4
- .IX Item "-X"
- .PD 0
- .IP "\fB\-\-discard\-locals\fR" 4
- .IX Item "--discard-locals"
- .PD
- Delete all temporary local symbols. (These symbols start with
- system-specific local label prefixes, typically \fB.L\fR for \s-1ELF\s0 systems
- or \fBL\fR for traditional a.out systems.)
- .IP "\fB\-y\fR \fIsymbol\fR" 4
- .IX Item "-y symbol"
- .PD 0
- .IP "\fB\-\-trace\-symbol=\fR\fIsymbol\fR" 4
- .IX Item "--trace-symbol=symbol"
- .PD
- Print the name of each linked file in which \fIsymbol\fR appears. This
- option may be given any number of times. On many systems it is necessary
- to prepend an underscore.
- .Sp
- This option is useful when you have an undefined symbol in your link but
- don't know where the reference is coming from.
- .IP "\fB\-Y\fR \fIpath\fR" 4
- .IX Item "-Y path"
- Add \fIpath\fR to the default library search path. This option exists
- for Solaris compatibility.
- .IP "\fB\-z\fR \fIkeyword\fR" 4
- .IX Item "-z keyword"
- The recognized keywords are:
- .RS 4
- .IP "\fBbndplt\fR" 4
- .IX Item "bndplt"
- Always generate \s-1BND\s0 prefix in \s-1PLT\s0 entries. Supported for Linux/x86_64.
- .IP "\fBcall\-nop=prefix\-addr\fR" 4
- .IX Item "call-nop=prefix-addr"
- .PD 0
- .IP "\fBcall\-nop=suffix\-nop\fR" 4
- .IX Item "call-nop=suffix-nop"
- .IP "\fBcall\-nop=prefix\-\fR\fIbyte\fR" 4
- .IX Item "call-nop=prefix-byte"
- .IP "\fBcall\-nop=suffix\-\fR\fIbyte\fR" 4
- .IX Item "call-nop=suffix-byte"
- .PD
- Specify the 1\-byte \f(CW\*(C`NOP\*(C'\fR padding when transforming indirect call
- to a locally defined function, foo, via its \s-1GOT\s0 slot.
- \&\fBcall\-nop=prefix\-addr\fR generates \f(CW\*(C`0x67 call foo\*(C'\fR.
- \&\fBcall\-nop=suffix\-nop\fR generates \f(CW\*(C`call foo 0x90\*(C'\fR.
- \&\fBcall\-nop=prefix\-\fR\fIbyte\fR generates \f(CW\*(C`\f(CIbyte\f(CW call foo\*(C'\fR.
- \&\fBcall\-nop=suffix\-\fR\fIbyte\fR generates \f(CW\*(C`call foo \f(CIbyte\f(CW\*(C'\fR.
- Supported for i386 and x86_64.
- .IP "\fBcet\-report=none\fR" 4
- .IX Item "cet-report=none"
- .PD 0
- .IP "\fBcet\-report=warning\fR" 4
- .IX Item "cet-report=warning"
- .IP "\fBcet\-report=error\fR" 4
- .IX Item "cet-report=error"
- .PD
- Specify how to report the missing \s-1GNU_PROPERTY_X86_FEATURE_1_IBT\s0 and
- \&\s-1GNU_PROPERTY_X86_FEATURE_1_SHSTK\s0 properties in input .note.gnu.property
- section. \fBcet\-report=none\fR, which is the default, will make the
- linker not report missing properties in input files.
- \&\fBcet\-report=warning\fR will make the linker issue a warning for
- missing properties in input files. \fBcet\-report=error\fR will make
- the linker issue an error for missing properties in input files.
- Note that \fBibt\fR will turn off the missing
- \&\s-1GNU_PROPERTY_X86_FEATURE_1_IBT\s0 property report and \fBshstk\fR will
- turn off the missing \s-1GNU_PROPERTY_X86_FEATURE_1_SHSTK\s0 property report.
- Supported for Linux/i386 and Linux/x86_64.
- .IP "\fBcombreloc\fR" 4
- .IX Item "combreloc"
- .PD 0
- .IP "\fBnocombreloc\fR" 4
- .IX Item "nocombreloc"
- .PD
- Combine multiple dynamic relocation sections and sort to improve
- dynamic symbol lookup caching. Do not do this if \fBnocombreloc\fR.
- .IP "\fBcommon\fR" 4
- .IX Item "common"
- .PD 0
- .IP "\fBnocommon\fR" 4
- .IX Item "nocommon"
- .PD
- Generate common symbols with \s-1STT_COMMON\s0 type during a relocatable
- link. Use \s-1STT_OBJECT\s0 type if \fBnocommon\fR.
- .IP "\fBcommon\-page\-size=\fR\fIvalue\fR" 4
- .IX Item "common-page-size=value"
- Set the page size most commonly used to \fIvalue\fR. Memory image
- layout will be optimized to minimize memory pages if the system is
- using pages of this size.
- .IP "\fBdefs\fR" 4
- .IX Item "defs"
- Report unresolved symbol references from regular object files. This
- is done even if the linker is creating a non-symbolic shared library.
- This option is the inverse of \fB\-z undefs\fR.
- .IP "\fBdynamic-undefined-weak\fR" 4
- .IX Item "dynamic-undefined-weak"
- .PD 0
- .IP "\fBnodynamic-undefined-weak\fR" 4
- .IX Item "nodynamic-undefined-weak"
- .PD
- Make undefined weak symbols dynamic when building a dynamic object,
- if they are referenced from a regular object file and not forced local
- by symbol visibility or versioning. Do not make them dynamic if
- \&\fBnodynamic-undefined-weak\fR. If neither option is given, a target
- may default to either option being in force, or make some other
- selection of undefined weak symbols dynamic. Not all targets support
- these options.
- .IP "\fBexecstack\fR" 4
- .IX Item "execstack"
- Marks the object as requiring executable stack.
- .IP "\fBglobal\fR" 4
- .IX Item "global"
- This option is only meaningful when building a shared object. It makes
- the symbols defined by this shared object available for symbol resolution
- of subsequently loaded libraries.
- .IP "\fBglobalaudit\fR" 4
- .IX Item "globalaudit"
- This option is only meaningful when building a dynamic executable.
- This option marks the executable as requiring global auditing by
- setting the \f(CW\*(C`DF_1_GLOBAUDIT\*(C'\fR bit in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR dynamic
- tag. Global auditing requires that any auditing library defined via
- the \fB\-\-depaudit\fR or \fB\-P\fR command-line options be run for
- all dynamic objects loaded by the application.
- .IP "\fBibtplt\fR" 4
- .IX Item "ibtplt"
- Generate Intel Indirect Branch Tracking (\s-1IBT\s0) enabled \s-1PLT\s0 entries.
- Supported for Linux/i386 and Linux/x86_64.
- .IP "\fBibt\fR" 4
- .IX Item "ibt"
- Generate \s-1GNU_PROPERTY_X86_FEATURE_1_IBT\s0 in .note.gnu.property section
- to indicate compatibility with \s-1IBT. \s0 This also implies \fBibtplt\fR.
- Supported for Linux/i386 and Linux/x86_64.
- .IP "\fBinitfirst\fR" 4
- .IX Item "initfirst"
- This option is only meaningful when building a shared object.
- It marks the object so that its runtime initialization will occur
- before the runtime initialization of any other objects brought into
- the process at the same time. Similarly the runtime finalization of
- the object will occur after the runtime finalization of any other
- objects.
- .IP "\fBinterpose\fR" 4
- .IX Item "interpose"
- Specify that the dynamic loader should modify its symbol search order
- so that symbols in this shared library interpose all other shared
- libraries not so marked.
- .IP "\fBlazy\fR" 4
- .IX Item "lazy"
- When generating an executable or shared library, mark it to tell the
- dynamic linker to defer function call resolution to the point when
- the function is called (lazy binding), rather than at load time.
- Lazy binding is the default.
- .IP "\fBloadfltr\fR" 4
- .IX Item "loadfltr"
- Specify that the object's filters be processed immediately at runtime.
- .IP "\fBmax\-page\-size=\fR\fIvalue\fR" 4
- .IX Item "max-page-size=value"
- Set the maximum memory page size supported to \fIvalue\fR.
- .IP "\fBmuldefs\fR" 4
- .IX Item "muldefs"
- Allow multiple definitions.
- .IP "\fBnocopyreloc\fR" 4
- .IX Item "nocopyreloc"
- Disable linker generated .dynbss variables used in place of variables
- defined in shared libraries. May result in dynamic text relocations.
- .IP "\fBnodefaultlib\fR" 4
- .IX Item "nodefaultlib"
- Specify that the dynamic loader search for dependencies of this object
- should ignore any default library search paths.
- .IP "\fBnodelete\fR" 4
- .IX Item "nodelete"
- Specify that the object shouldn't be unloaded at runtime.
- .IP "\fBnodlopen\fR" 4
- .IX Item "nodlopen"
- Specify that the object is not available to \f(CW\*(C`dlopen\*(C'\fR.
- .IP "\fBnodump\fR" 4
- .IX Item "nodump"
- Specify that the object can not be dumped by \f(CW\*(C`dldump\*(C'\fR.
- .IP "\fBnoexecstack\fR" 4
- .IX Item "noexecstack"
- Marks the object as not requiring executable stack.
- .IP "\fBnoextern-protected-data\fR" 4
- .IX Item "noextern-protected-data"
- Don't treat protected data symbols as external when building a shared
- library. This option overrides the linker backend default. It can be
- used to work around incorrect relocations against protected data symbols
- generated by compiler. Updates on protected data symbols by another
- module aren't visible to the resulting shared library. Supported for
- i386 and x86\-64.
- .IP "\fBnoreloc-overflow\fR" 4
- .IX Item "noreloc-overflow"
- Disable relocation overflow check. This can be used to disable
- relocation overflow check if there will be no dynamic relocation
- overflow at run-time. Supported for x86_64.
- .IP "\fBnow\fR" 4
- .IX Item "now"
- When generating an executable or shared library, mark it to tell the
- dynamic linker to resolve all symbols when the program is started, or
- when the shared library is loaded by dlopen, instead of deferring
- function call resolution to the point when the function is first
- called.
- .IP "\fBorigin\fR" 4
- .IX Item "origin"
- Specify that the object requires \fB\f(CB$ORIGIN\fB\fR handling in paths.
- .IP "\fBrelro\fR" 4
- .IX Item "relro"
- .PD 0
- .IP "\fBnorelro\fR" 4
- .IX Item "norelro"
- .PD
- Create an \s-1ELF \s0\f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object. This
- specifies a memory segment that should be made read-only after
- relocation, if supported. Specifying \fBcommon-page-size\fR smaller
- than the system page size will render this protection ineffective.
- Don't create an \s-1ELF \s0\f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment if \fBnorelro\fR.
- .IP "\fBseparate-code\fR" 4
- .IX Item "separate-code"
- .PD 0
- .IP "\fBnoseparate-code\fR" 4
- .IX Item "noseparate-code"
- .PD
- Create separate code \f(CW\*(C`PT_LOAD\*(C'\fR segment header in the object. This
- specifies a memory segment that should contain only instructions and must
- be in wholly disjoint pages from any other data. Don't create separate
- code \f(CW\*(C`PT_LOAD\*(C'\fR segment if \fBnoseparate-code\fR is used.
- .IP "\fBshstk\fR" 4
- .IX Item "shstk"
- Generate \s-1GNU_PROPERTY_X86_FEATURE_1_SHSTK\s0 in .note.gnu.property section
- to indicate compatibility with Intel Shadow Stack. Supported for
- Linux/i386 and Linux/x86_64.
- .IP "\fBstack\-size=\fR\fIvalue\fR" 4
- .IX Item "stack-size=value"
- Specify a stack size for an \s-1ELF \s0\f(CW\*(C`PT_GNU_STACK\*(C'\fR segment.
- Specifying zero will override any default non-zero sized
- \&\f(CW\*(C`PT_GNU_STACK\*(C'\fR segment creation.
- .IP "\fBstart\-stop\-visibility=\fR\fIvalue\fR" 4
- .IX Item "start-stop-visibility=value"
- Specify the \s-1ELF\s0 symbol visibility for synthesized
- \&\f(CW\*(C`_\|_start_SECNAME\*(C'\fR and \f(CW\*(C`_\|_stop_SECNAME\*(C'\fR symbols. \fIvalue\fR must be exactly \fBdefault\fR,
- \&\fBinternal\fR, \fBhidden\fR, or \fBprotected\fR. If no \fB\-z
- start-stop-visibility\fR option is given, \fBprotected\fR is used for
- compatibility with historical practice. However, it's highly
- recommended to use \fB\-z start\-stop\-visibility=hidden\fR in new
- programs and shared libraries so that these symbols are not exported
- between shared objects, which is not usually what's intended.
- .IP "\fBtext\fR" 4
- .IX Item "text"
- .PD 0
- .IP "\fBnotext\fR" 4
- .IX Item "notext"
- .IP "\fBtextoff\fR" 4
- .IX Item "textoff"
- .PD
- Report an error if \s-1DT_TEXTREL\s0 is set, i.e., if the position-independent
- or shared object has dynamic relocations in read-only sections. Don't
- report an error if \fBnotext\fR or \fBtextoff\fR.
- .IP "\fBundefs\fR" 4
- .IX Item "undefs"
- Do not report unresolved symbol references from regular object files,
- either when creating an executable, or when creating a shared library.
- This option is the inverse of \fB\-z defs\fR.
- .RE
- .RS 4
- .Sp
- Other keywords are ignored for Solaris compatibility.
- .RE
- .IP "\fB\-(\fR \fIarchives\fR \fB\-)\fR" 4
- .IX Item "-( archives -)"
- .PD 0
- .IP "\fB\-\-start\-group\fR \fIarchives\fR \fB\-\-end\-group\fR" 4
- .IX Item "--start-group archives --end-group"
- .PD
- The \fIarchives\fR should be a list of archive files. They may be
- either explicit file names, or \fB\-l\fR options.
- .Sp
- The specified archives are searched repeatedly until no new undefined
- references are created. Normally, an archive is searched only once in
- the order that it is specified on the command line. If a symbol in that
- archive is needed to resolve an undefined symbol referred to by an
- object in an archive that appears later on the command line, the linker
- would not be able to resolve that reference. By grouping the archives,
- they will all be searched repeatedly until all possible references are
- resolved.
- .Sp
- Using this option has a significant performance cost. It is best to use
- it only when there are unavoidable circular references between two or
- more archives.
- .IP "\fB\-\-accept\-unknown\-input\-arch\fR" 4
- .IX Item "--accept-unknown-input-arch"
- .PD 0
- .IP "\fB\-\-no\-accept\-unknown\-input\-arch\fR" 4
- .IX Item "--no-accept-unknown-input-arch"
- .PD
- Tells the linker to accept input files whose architecture cannot be
- recognised. The assumption is that the user knows what they are doing
- and deliberately wants to link in these unknown input files. This was
- the default behaviour of the linker, before release 2.14. The default
- behaviour from release 2.14 onwards is to reject such input files, and
- so the \fB\-\-accept\-unknown\-input\-arch\fR option has been added to
- restore the old behaviour.
- .IP "\fB\-\-as\-needed\fR" 4
- .IX Item "--as-needed"
- .PD 0
- .IP "\fB\-\-no\-as\-needed\fR" 4
- .IX Item "--no-as-needed"
- .PD
- This option affects \s-1ELF DT_NEEDED\s0 tags for dynamic libraries mentioned
- on the command line after the \fB\-\-as\-needed\fR option. Normally
- the linker will add a \s-1DT_NEEDED\s0 tag for each dynamic library mentioned
- on the command line, regardless of whether the library is actually
- needed or not. \fB\-\-as\-needed\fR causes a \s-1DT_NEEDED\s0 tag to only be
- emitted for a library that \fIat that point in the link\fR satisfies a
- non-weak undefined symbol reference from a regular object file or, if
- the library is not found in the \s-1DT_NEEDED\s0 lists of other needed libraries, a
- non-weak undefined symbol reference from another needed dynamic library.
- Object files or libraries appearing on the command line \fIafter\fR
- the library in question do not affect whether the library is seen as
- needed. This is similar to the rules for extraction of object files
- from archives. \fB\-\-no\-as\-needed\fR restores the default behaviour.
- .IP "\fB\-\-add\-needed\fR" 4
- .IX Item "--add-needed"
- .PD 0
- .IP "\fB\-\-no\-add\-needed\fR" 4
- .IX Item "--no-add-needed"
- .PD
- These two options have been deprecated because of the similarity of
- their names to the \fB\-\-as\-needed\fR and \fB\-\-no\-as\-needed\fR
- options. They have been replaced by \fB\-\-copy\-dt\-needed\-entries\fR
- and \fB\-\-no\-copy\-dt\-needed\-entries\fR.
- .IP "\fB\-assert\fR \fIkeyword\fR" 4
- .IX Item "-assert keyword"
- This option is ignored for SunOS compatibility.
- .IP "\fB\-Bdynamic\fR" 4
- .IX Item "-Bdynamic"
- .PD 0
- .IP "\fB\-dy\fR" 4
- .IX Item "-dy"
- .IP "\fB\-call_shared\fR" 4
- .IX Item "-call_shared"
- .PD
- Link against dynamic libraries. This is only meaningful on platforms
- for which shared libraries are supported. This option is normally the
- default on such platforms. The different variants of this option are
- for compatibility with various systems. You may use this option
- multiple times on the command line: it affects library searching for
- \&\fB\-l\fR options which follow it.
- .IP "\fB\-Bgroup\fR" 4
- .IX Item "-Bgroup"
- Set the \f(CW\*(C`DF_1_GROUP\*(C'\fR flag in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR entry in the dynamic
- section. This causes the runtime linker to handle lookups in this
- object and its dependencies to be performed only inside the group.
- \&\fB\-\-unresolved\-symbols=report\-all\fR is implied. This option is
- only meaningful on \s-1ELF\s0 platforms which support shared libraries.
- .IP "\fB\-Bstatic\fR" 4
- .IX Item "-Bstatic"
- .PD 0
- .IP "\fB\-dn\fR" 4
- .IX Item "-dn"
- .IP "\fB\-non_shared\fR" 4
- .IX Item "-non_shared"
- .IP "\fB\-static\fR" 4
- .IX Item "-static"
- .PD
- Do not link against shared libraries. This is only meaningful on
- platforms for which shared libraries are supported. The different
- variants of this option are for compatibility with various systems. You
- may use this option multiple times on the command line: it affects
- library searching for \fB\-l\fR options which follow it. This
- option also implies \fB\-\-unresolved\-symbols=report\-all\fR. This
- option can be used with \fB\-shared\fR. Doing so means that a
- shared library is being created but that all of the library's external
- references must be resolved by pulling in entries from static
- libraries.
- .IP "\fB\-Bsymbolic\fR" 4
- .IX Item "-Bsymbolic"
- When creating a shared library, bind references to global symbols to the
- definition within the shared library, if any. Normally, it is possible
- for a program linked against a shared library to override the definition
- within the shared library. This option is only meaningful on \s-1ELF\s0
- platforms which support shared libraries.
- .IP "\fB\-Bsymbolic\-functions\fR" 4
- .IX Item "-Bsymbolic-functions"
- When creating a shared library, bind references to global function
- symbols to the definition within the shared library, if any.
- This option is only meaningful on \s-1ELF\s0 platforms which support shared
- libraries.
- .IP "\fB\-\-dynamic\-list=\fR\fIdynamic-list-file\fR" 4
- .IX Item "--dynamic-list=dynamic-list-file"
- Specify the name of a dynamic list file to the linker. This is
- typically used when creating shared libraries to specify a list of
- global symbols whose references shouldn't be bound to the definition
- within the shared library, or creating dynamically linked executables
- to specify a list of symbols which should be added to the symbol table
- in the executable. This option is only meaningful on \s-1ELF\s0 platforms
- which support shared libraries.
- .Sp
- The format of the dynamic list is the same as the version node without
- scope and node name. See \fB\s-1VERSION\s0\fR for more information.
- .IP "\fB\-\-dynamic\-list\-data\fR" 4
- .IX Item "--dynamic-list-data"
- Include all global data symbols to the dynamic list.
- .IP "\fB\-\-dynamic\-list\-cpp\-new\fR" 4
- .IX Item "--dynamic-list-cpp-new"
- Provide the builtin dynamic list for \*(C+ operator new and delete. It
- is mainly useful for building shared libstdc++.
- .IP "\fB\-\-dynamic\-list\-cpp\-typeinfo\fR" 4
- .IX Item "--dynamic-list-cpp-typeinfo"
- Provide the builtin dynamic list for \*(C+ runtime type identification.
- .IP "\fB\-\-check\-sections\fR" 4
- .IX Item "--check-sections"
- .PD 0
- .IP "\fB\-\-no\-check\-sections\fR" 4
- .IX Item "--no-check-sections"
- .PD
- Asks the linker \fInot\fR to check section addresses after they have
- been assigned to see if there are any overlaps. Normally the linker will
- perform this check, and if it finds any overlaps it will produce
- suitable error messages. The linker does know about, and does make
- allowances for sections in overlays. The default behaviour can be
- restored by using the command-line switch \fB\-\-check\-sections\fR.
- Section overlap is not usually checked for relocatable links. You can
- force checking in that case by using the \fB\-\-check\-sections\fR
- option.
- .IP "\fB\-\-copy\-dt\-needed\-entries\fR" 4
- .IX Item "--copy-dt-needed-entries"
- .PD 0
- .IP "\fB\-\-no\-copy\-dt\-needed\-entries\fR" 4
- .IX Item "--no-copy-dt-needed-entries"
- .PD
- This option affects the treatment of dynamic libraries referred to
- by \s-1DT_NEEDED\s0 tags \fIinside\fR \s-1ELF\s0 dynamic libraries mentioned on the
- command line. Normally the linker won't add a \s-1DT_NEEDED\s0 tag to the
- output binary for each library mentioned in a \s-1DT_NEEDED\s0 tag in an
- input dynamic library. With \fB\-\-copy\-dt\-needed\-entries\fR
- specified on the command line however any dynamic libraries that
- follow it will have their \s-1DT_NEEDED\s0 entries added. The default
- behaviour can be restored with \fB\-\-no\-copy\-dt\-needed\-entries\fR.
- .Sp
- This option also has an effect on the resolution of symbols in dynamic
- libraries. With \fB\-\-copy\-dt\-needed\-entries\fR dynamic libraries
- mentioned on the command line will be recursively searched, following
- their \s-1DT_NEEDED\s0 tags to other libraries, in order to resolve symbols
- required by the output binary. With the default setting however
- the searching of dynamic libraries that follow it will stop with the
- dynamic library itself. No \s-1DT_NEEDED\s0 links will be traversed to resolve
- symbols.
- .IP "\fB\-\-cref\fR" 4
- .IX Item "--cref"
- Output a cross reference table. If a linker map file is being
- generated, the cross reference table is printed to the map file.
- Otherwise, it is printed on the standard output.
- .Sp
- The format of the table is intentionally simple, so that it may be
- easily processed by a script if necessary. The symbols are printed out,
- sorted by name. For each symbol, a list of file names is given. If the
- symbol is defined, the first file listed is the location of the
- definition. If the symbol is defined as a common value then any files
- where this happens appear next. Finally any files that reference the
- symbol are listed.
- .IP "\fB\-\-no\-define\-common\fR" 4
- .IX Item "--no-define-common"
- This option inhibits the assignment of addresses to common symbols.
- The script command \f(CW\*(C`INHIBIT_COMMON_ALLOCATION\*(C'\fR has the same effect.
- .Sp
- The \fB\-\-no\-define\-common\fR option allows decoupling
- the decision to assign addresses to Common symbols from the choice
- of the output file type; otherwise a non-Relocatable output type
- forces assigning addresses to Common symbols.
- Using \fB\-\-no\-define\-common\fR allows Common symbols that are referenced
- from a shared library to be assigned addresses only in the main program.
- This eliminates the unused duplicate space in the shared library,
- and also prevents any possible confusion over resolving to the wrong
- duplicate when there are many dynamic modules with specialized search
- paths for runtime symbol resolution.
- .IP "\fB\-\-force\-group\-allocation\fR" 4
- .IX Item "--force-group-allocation"
- This option causes the linker to place section group members like
- normal input sections, and to delete the section groups. This is the
- default behaviour for a final link but this option can be used to
- change the behaviour of a relocatable link (\fB\-r\fR). The script
- command \f(CW\*(C`FORCE_GROUP_ALLOCATION\*(C'\fR has the same
- effect.
- .IP "\fB\-\-defsym=\fR\fIsymbol\fR\fB=\fR\fIexpression\fR" 4
- .IX Item "--defsym=symbol=expression"
- Create a global symbol in the output file, containing the absolute
- address given by \fIexpression\fR. You may use this option as many
- times as necessary to define multiple symbols in the command line. A
- limited form of arithmetic is supported for the \fIexpression\fR in this
- context: you may give a hexadecimal constant or the name of an existing
- symbol, or use \f(CW\*(C`+\*(C'\fR and \f(CW\*(C`\-\*(C'\fR to add or subtract hexadecimal
- constants or symbols. If you need more elaborate expressions, consider
- using the linker command language from a script.
- \&\fINote:\fR there should be no white space between \fIsymbol\fR, the
- equals sign ("\fB=\fR"), and \fIexpression\fR.
- .IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
- .IX Item "--demangle[=style]"
- .PD 0
- .IP "\fB\-\-no\-demangle\fR" 4
- .IX Item "--no-demangle"
- .PD
- These options control whether to demangle symbol names in error messages
- and other output. When the linker is told to demangle, it tries to
- present symbol names in a readable fashion: it strips leading
- underscores if they are used by the object file format, and converts \*(C+
- mangled symbol names into user readable names. Different compilers have
- different mangling styles. The optional demangling style argument can be used
- to choose an appropriate demangling style for your compiler. The linker will
- demangle by default unless the environment variable \fB\s-1COLLECT_NO_DEMANGLE\s0\fR
- is set. These options may be used to override the default.
- .IP "\fB\-I\fR\fIfile\fR" 4
- .IX Item "-Ifile"
- .PD 0
- .IP "\fB\-\-dynamic\-linker=\fR\fIfile\fR" 4
- .IX Item "--dynamic-linker=file"
- .PD
- Set the name of the dynamic linker. This is only meaningful when
- generating dynamically linked \s-1ELF\s0 executables. The default dynamic
- linker is normally correct; don't use this unless you know what you are
- doing.
- .IP "\fB\-\-no\-dynamic\-linker\fR" 4
- .IX Item "--no-dynamic-linker"
- When producing an executable file, omit the request for a dynamic
- linker to be used at load-time. This is only meaningful for \s-1ELF\s0
- executables that contain dynamic relocations, and usually requires
- entry point code that is capable of processing these relocations.
- .IP "\fB\-\-embedded\-relocs\fR" 4
- .IX Item "--embedded-relocs"
- This option is similar to the \fB\-\-emit\-relocs\fR option except
- that the relocs are stored in a target-specific section. This option
- is only supported by the \fB\s-1BFIN\s0\fR, \fB\s-1CR16\s0\fR and \fIM68K\fR
- targets.
- .IP "\fB\-\-disable\-multiple\-abs\-defs\fR" 4
- .IX Item "--disable-multiple-abs-defs"
- Do not allow multiple definitions with symbols included
- in filename invoked by \-R or \-\-just\-symbols
- .IP "\fB\-\-fatal\-warnings\fR" 4
- .IX Item "--fatal-warnings"
- .PD 0
- .IP "\fB\-\-no\-fatal\-warnings\fR" 4
- .IX Item "--no-fatal-warnings"
- .PD
- Treat all warnings as errors. The default behaviour can be restored
- with the option \fB\-\-no\-fatal\-warnings\fR.
- .IP "\fB\-\-force\-exe\-suffix\fR" 4
- .IX Item "--force-exe-suffix"
- Make sure that an output file has a .exe suffix.
- .Sp
- If a successfully built fully linked output file does not have a
- \&\f(CW\*(C`.exe\*(C'\fR or \f(CW\*(C`.dll\*(C'\fR suffix, this option forces the linker to copy
- the output file to one of the same name with a \f(CW\*(C`.exe\*(C'\fR suffix. This
- option is useful when using unmodified Unix makefiles on a Microsoft
- Windows host, since some versions of Windows won't run an image unless
- it ends in a \f(CW\*(C`.exe\*(C'\fR suffix.
- .IP "\fB\-\-gc\-sections\fR" 4
- .IX Item "--gc-sections"
- .PD 0
- .IP "\fB\-\-no\-gc\-sections\fR" 4
- .IX Item "--no-gc-sections"
- .PD
- Enable garbage collection of unused input sections. It is ignored on
- targets that do not support this option. The default behaviour (of not
- performing this garbage collection) can be restored by specifying
- \&\fB\-\-no\-gc\-sections\fR on the command line. Note that garbage
- collection for \s-1COFF\s0 and \s-1PE\s0 format targets is supported, but the
- implementation is currently considered to be experimental.
- .Sp
- \&\fB\-\-gc\-sections\fR decides which input sections are used by
- examining symbols and relocations. The section containing the entry
- symbol and all sections containing symbols undefined on the
- command-line will be kept, as will sections containing symbols
- referenced by dynamic objects. Note that when building shared
- libraries, the linker must assume that any visible symbol is
- referenced. Once this initial set of sections has been determined,
- the linker recursively marks as used any section referenced by their
- relocations. See \fB\-\-entry\fR, \fB\-\-undefined\fR, and
- \&\fB\-\-gc\-keep\-exported\fR.
- .Sp
- This option can be set when doing a partial link (enabled with option
- \&\fB\-r\fR). In this case the root of symbols kept must be explicitly
- specified either by one of the options \fB\-\-entry\fR,
- \&\fB\-\-undefined\fR, or \fB\-\-gc\-keep\-exported\fR or by a \f(CW\*(C`ENTRY\*(C'\fR
- command in the linker script.
- .IP "\fB\-\-print\-gc\-sections\fR" 4
- .IX Item "--print-gc-sections"
- .PD 0
- .IP "\fB\-\-no\-print\-gc\-sections\fR" 4
- .IX Item "--no-print-gc-sections"
- .PD
- List all sections removed by garbage collection. The listing is
- printed on stderr. This option is only effective if garbage
- collection has been enabled via the \fB\-\-gc\-sections\fR) option. The
- default behaviour (of not listing the sections that are removed) can
- be restored by specifying \fB\-\-no\-print\-gc\-sections\fR on the command
- line.
- .IP "\fB\-\-gc\-keep\-exported\fR" 4
- .IX Item "--gc-keep-exported"
- When \fB\-\-gc\-sections\fR is enabled, this option prevents garbage
- collection of unused input sections that contain global symbols having
- default or protected visibility. This option is intended to be used for
- executables where unreferenced sections would otherwise be garbage
- collected regardless of the external visibility of contained symbols.
- Note that this option has no effect when linking shared objects since
- it is already the default behaviour. This option is only supported for
- \&\s-1ELF\s0 format targets.
- .IP "\fB\-\-print\-output\-format\fR" 4
- .IX Item "--print-output-format"
- Print the name of the default output format (perhaps influenced by
- other command-line options). This is the string that would appear
- in an \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR linker script command.
- .IP "\fB\-\-print\-memory\-usage\fR" 4
- .IX Item "--print-memory-usage"
- Print used size, total size and used size of memory regions created with
- the \fB\s-1MEMORY\s0\fR command. This is useful on embedded targets to have a
- quick view of amount of free memory. The format of the output has one
- headline and one line per region. It is both human readable and easily
- parsable by tools. Here is an example of an output:
- .Sp
- .Vb 3
- \& Memory region Used Size Region Size %age Used
- \& ROM: 256 KB 1 MB 25.00%
- \& RAM: 32 B 2 GB 0.00%
- .Ve
- .IP "\fB\-\-help\fR" 4
- .IX Item "--help"
- Print a summary of the command-line options on the standard output and exit.
- .IP "\fB\-\-target\-help\fR" 4
- .IX Item "--target-help"
- Print a summary of all target-specific options on the standard output and exit.
- .IP "\fB\-Map=\fR\fImapfile\fR" 4
- .IX Item "-Map=mapfile"
- Print a link map to the file \fImapfile\fR. See the description of the
- \&\fB\-M\fR option, above. Specifying a directory as \fImapfile\fR
- causes the linker map to be written into a file inside the directory.
- The name of the file is based upon the \fIoutput\fR filename with
- \&\f(CW\*(C`.map\*(C'\fR appended.
- .IP "\fB\-\-no\-keep\-memory\fR" 4
- .IX Item "--no-keep-memory"
- \&\fBld\fR normally optimizes for speed over memory usage by caching the
- symbol tables of input files in memory. This option tells \fBld\fR to
- instead optimize for memory usage, by rereading the symbol tables as
- necessary. This may be required if \fBld\fR runs out of memory space
- while linking a large executable.
- .IP "\fB\-\-no\-undefined\fR" 4
- .IX Item "--no-undefined"
- .PD 0
- .IP "\fB\-z defs\fR" 4
- .IX Item "-z defs"
- .PD
- Report unresolved symbol references from regular object files. This
- is done even if the linker is creating a non-symbolic shared library.
- The switch \fB\-\-[no\-]allow\-shlib\-undefined\fR controls the
- behaviour for reporting unresolved references found in shared
- libraries being linked in.
- .Sp
- The effects of this option can be reverted by using \f(CW\*(C`\-z undefs\*(C'\fR.
- .IP "\fB\-\-allow\-multiple\-definition\fR" 4
- .IX Item "--allow-multiple-definition"
- .PD 0
- .IP "\fB\-z muldefs\fR" 4
- .IX Item "-z muldefs"
- .PD
- Normally when a symbol is defined multiple times, the linker will
- report a fatal error. These options allow multiple definitions and the
- first definition will be used.
- .IP "\fB\-\-allow\-shlib\-undefined\fR" 4
- .IX Item "--allow-shlib-undefined"
- .PD 0
- .IP "\fB\-\-no\-allow\-shlib\-undefined\fR" 4
- .IX Item "--no-allow-shlib-undefined"
- .PD
- Allows or disallows undefined symbols in shared libraries.
- This switch is similar to \fB\-\-no\-undefined\fR except that it
- determines the behaviour when the undefined symbols are in a
- shared library rather than a regular object file. It does not affect
- how undefined symbols in regular object files are handled.
- .Sp
- The default behaviour is to report errors for any undefined symbols
- referenced in shared libraries if the linker is being used to create
- an executable, but to allow them if the linker is being used to create
- a shared library.
- .Sp
- The reasons for allowing undefined symbol references in shared
- libraries specified at link time are that:
- .RS 4
- .IP "\(bu" 4
- A shared library specified at link time may not be the same as the one
- that is available at load time, so the symbol might actually be
- resolvable at load time.
- .IP "\(bu" 4
- There are some operating systems, eg BeOS and \s-1HPPA,\s0 where undefined
- symbols in shared libraries are normal.
- .Sp
- The BeOS kernel for example patches shared libraries at load time to
- select whichever function is most appropriate for the current
- architecture. This is used, for example, to dynamically select an
- appropriate memset function.
- .RE
- .RS 4
- .RE
- .IP "\fB\-\-no\-undefined\-version\fR" 4
- .IX Item "--no-undefined-version"
- Normally when a symbol has an undefined version, the linker will ignore
- it. This option disallows symbols with undefined version and a fatal error
- will be issued instead.
- .IP "\fB\-\-default\-symver\fR" 4
- .IX Item "--default-symver"
- Create and use a default symbol version (the soname) for unversioned
- exported symbols.
- .IP "\fB\-\-default\-imported\-symver\fR" 4
- .IX Item "--default-imported-symver"
- Create and use a default symbol version (the soname) for unversioned
- imported symbols.
- .IP "\fB\-\-no\-warn\-mismatch\fR" 4
- .IX Item "--no-warn-mismatch"
- Normally \fBld\fR will give an error if you try to link together input
- files that are mismatched for some reason, perhaps because they have
- been compiled for different processors or for different endiannesses.
- This option tells \fBld\fR that it should silently permit such possible
- errors. This option should only be used with care, in cases when you
- have taken some special action that ensures that the linker errors are
- inappropriate.
- .IP "\fB\-\-no\-warn\-search\-mismatch\fR" 4
- .IX Item "--no-warn-search-mismatch"
- Normally \fBld\fR will give a warning if it finds an incompatible
- library during a library search. This option silences the warning.
- .IP "\fB\-\-no\-whole\-archive\fR" 4
- .IX Item "--no-whole-archive"
- Turn off the effect of the \fB\-\-whole\-archive\fR option for subsequent
- archive files.
- .IP "\fB\-\-noinhibit\-exec\fR" 4
- .IX Item "--noinhibit-exec"
- Retain the executable output file whenever it is still usable.
- Normally, the linker will not produce an output file if it encounters
- errors during the link process; it exits without writing an output file
- when it issues any error whatsoever.
- .IP "\fB\-nostdlib\fR" 4
- .IX Item "-nostdlib"
- Only search library directories explicitly specified on the
- command line. Library directories specified in linker scripts
- (including linker scripts specified on the command line) are ignored.
- .IP "\fB\-\-oformat=\fR\fIoutput-format\fR" 4
- .IX Item "--oformat=output-format"
- \&\fBld\fR may be configured to support more than one kind of object
- file. If your \fBld\fR is configured this way, you can use the
- \&\fB\-\-oformat\fR option to specify the binary format for the output
- object file. Even when \fBld\fR is configured to support alternative
- object formats, you don't usually need to specify this, as \fBld\fR
- should be configured to produce as a default output format the most
- usual format on each machine. \fIoutput-format\fR is a text string, the
- name of a particular format supported by the \s-1BFD\s0 libraries. (You can
- list the available binary formats with \fBobjdump \-i\fR.) The script
- command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but
- this option overrides it.
- .IP "\fB\-\-out\-implib\fR \fIfile\fR" 4
- .IX Item "--out-implib file"
- Create an import library in \fIfile\fR corresponding to the executable
- the linker is generating (eg. a \s-1DLL\s0 or \s-1ELF\s0 program). This import
- library (which should be called \f(CW\*(C`*.dll.a\*(C'\fR or \f(CW\*(C`*.a\*(C'\fR for DLLs)
- may be used to link clients against the generated executable; this
- behaviour makes it possible to skip a separate import library creation
- step (eg. \f(CW\*(C`dlltool\*(C'\fR for DLLs). This option is only available for
- the i386 \s-1PE\s0 and \s-1ELF\s0 targetted ports of the linker.
- .IP "\fB\-pie\fR" 4
- .IX Item "-pie"
- .PD 0
- .IP "\fB\-\-pic\-executable\fR" 4
- .IX Item "--pic-executable"
- .PD
- Create a position independent executable. This is currently only supported on
- \&\s-1ELF\s0 platforms. Position independent executables are similar to shared
- libraries in that they are relocated by the dynamic linker to the virtual
- address the \s-1OS\s0 chooses for them (which can vary between invocations). Like
- normal dynamically linked executables they can be executed and symbols
- defined in the executable cannot be overridden by shared libraries.
- .IP "\fB\-qmagic\fR" 4
- .IX Item "-qmagic"
- This option is ignored for Linux compatibility.
- .IP "\fB\-Qy\fR" 4
- .IX Item "-Qy"
- This option is ignored for \s-1SVR4\s0 compatibility.
- .IP "\fB\-\-relax\fR" 4
- .IX Item "--relax"
- .PD 0
- .IP "\fB\-\-no\-relax\fR" 4
- .IX Item "--no-relax"
- .PD
- An option with machine dependent effects.
- This option is only supported on a few targets.
- .Sp
- On some platforms the \fB\-\-relax\fR option performs target-specific,
- global optimizations that become possible when the linker resolves
- addressing in the program, such as relaxing address modes,
- synthesizing new instructions, selecting shorter version of current
- instructions, and combining constant values.
- .Sp
- On some platforms these link time global optimizations may make symbolic
- debugging of the resulting executable impossible.
- This is known to be the case for the Matsushita \s-1MN10200\s0 and \s-1MN10300\s0
- family of processors.
- .Sp
- On platforms where this is not supported, \fB\-\-relax\fR is accepted,
- but ignored.
- .Sp
- On platforms where \fB\-\-relax\fR is accepted the option
- \&\fB\-\-no\-relax\fR can be used to disable the feature.
- .IP "\fB\-\-retain\-symbols\-file=\fR\fIfilename\fR" 4
- .IX Item "--retain-symbols-file=filename"
- Retain \fIonly\fR the symbols listed in the file \fIfilename\fR,
- discarding all others. \fIfilename\fR is simply a flat file, with one
- symbol name per line. This option is especially useful in environments
- (such as VxWorks)
- where a large global symbol table is accumulated gradually, to conserve
- run-time memory.
- .Sp
- \&\fB\-\-retain\-symbols\-file\fR does \fInot\fR discard undefined symbols,
- or symbols needed for relocations.
- .Sp
- You may only specify \fB\-\-retain\-symbols\-file\fR once in the command
- line. It overrides \fB\-s\fR and \fB\-S\fR.
- .IP "\fB\-rpath=\fR\fIdir\fR" 4
- .IX Item "-rpath=dir"
- Add a directory to the runtime library search path. This is used when
- linking an \s-1ELF\s0 executable with shared objects. All \fB\-rpath\fR
- arguments are concatenated and passed to the runtime linker, which uses
- them to locate shared objects at runtime.
- .Sp
- The \fB\-rpath\fR option is also used when locating shared objects which
- are needed by shared objects explicitly included in the link; see the
- description of the \fB\-rpath\-link\fR option. Searching \fB\-rpath\fR
- in this way is only supported by native linkers and cross linkers which
- have been configured with the \fB\-\-with\-sysroot\fR option.
- .Sp
- If \fB\-rpath\fR is not used when linking an \s-1ELF\s0 executable, the
- contents of the environment variable \f(CW\*(C`LD_RUN_PATH\*(C'\fR will be used if it
- is defined.
- .Sp
- The \fB\-rpath\fR option may also be used on SunOS. By default, on
- SunOS, the linker will form a runtime search path out of all the
- \&\fB\-L\fR options it is given. If a \fB\-rpath\fR option is used, the
- runtime search path will be formed exclusively using the \fB\-rpath\fR
- options, ignoring the \fB\-L\fR options. This can be useful when using
- gcc, which adds many \fB\-L\fR options which may be on \s-1NFS\s0 mounted
- file systems.
- .Sp
- For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
- followed by a directory name, rather than a file name, it is treated as
- the \fB\-rpath\fR option.
- .IP "\fB\-rpath\-link=\fR\fIdir\fR" 4
- .IX Item "-rpath-link=dir"
- When using \s-1ELF\s0 or SunOS, one shared library may require another. This
- happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one
- of the input files.
- .Sp
- When the linker encounters such a dependency when doing a non-shared,
- non-relocatable link, it will automatically try to locate the required
- shared library and include it in the link, if it is not included
- explicitly. In such a case, the \fB\-rpath\-link\fR option
- specifies the first set of directories to search. The
- \&\fB\-rpath\-link\fR option may specify a sequence of directory names
- either by specifying a list of names separated by colons, or by
- appearing multiple times.
- .Sp
- The tokens \fI\f(CI$ORIGIN\fI\fR and \fI\f(CI$LIB\fI\fR can appear in these search
- directories. They will be replaced by the full path to the directory
- containing the program or shared object in the case of \fI\f(CI$ORIGIN\fI\fR
- and either \fBlib\fR \- for 32\-bit binaries \- or \fBlib64\fR \- for
- 64\-bit binaries \- in the case of \fI\f(CI$LIB\fI\fR.
- .Sp
- The alternative form of these tokens \- \fI${\s-1ORIGIN\s0}\fR and
- \&\fI${\s-1LIB\s0}\fR can also be used. The token \fI\f(CI$PLATFORM\fI\fR is not
- supported.
- .Sp
- This option should be used with caution as it overrides the search path
- that may have been hard compiled into a shared library. In such a case it
- is possible to use unintentionally a different search path than the
- runtime linker would do.
- .Sp
- The linker uses the following search paths to locate required shared
- libraries:
- .RS 4
- .IP "1." 4
- Any directories specified by \fB\-rpath\-link\fR options.
- .IP "2." 4
- Any directories specified by \fB\-rpath\fR options. The difference
- between \fB\-rpath\fR and \fB\-rpath\-link\fR is that directories
- specified by \fB\-rpath\fR options are included in the executable and
- used at runtime, whereas the \fB\-rpath\-link\fR option is only effective
- at link time. Searching \fB\-rpath\fR in this way is only supported
- by native linkers and cross linkers which have been configured with
- the \fB\-\-with\-sysroot\fR option.
- .IP "3." 4
- On an \s-1ELF\s0 system, for native linkers, if the \fB\-rpath\fR and
- \&\fB\-rpath\-link\fR options were not used, search the contents of the
- environment variable \f(CW\*(C`LD_RUN_PATH\*(C'\fR.
- .IP "4." 4
- On SunOS, if the \fB\-rpath\fR option was not used, search any
- directories specified using \fB\-L\fR options.
- .IP "5." 4
- For a native linker, search the contents of the environment
- variable \f(CW\*(C`LD_LIBRARY_PATH\*(C'\fR.
- .IP "6." 4
- For a native \s-1ELF\s0 linker, the directories in \f(CW\*(C`DT_RUNPATH\*(C'\fR or
- \&\f(CW\*(C`DT_RPATH\*(C'\fR of a shared library are searched for shared
- libraries needed by it. The \f(CW\*(C`DT_RPATH\*(C'\fR entries are ignored if
- \&\f(CW\*(C`DT_RUNPATH\*(C'\fR entries exist.
- .IP "7." 4
- The default directories, normally \fI/lib\fR and \fI/usr/lib\fR.
- .IP "8." 4
- For a linker for a Linux system, if the file \fI/etc/ld.so.conf\fR
- exists, the list of directories found in that file. Note: the path
- to this file is prefixed with the \f(CW\*(C`sysroot\*(C'\fR value, if that is
- defined, and then any \f(CW\*(C`prefix\*(C'\fR string if the linker was
- configured with the \fB\-\-prefix=<path>\fR option.
- .IP "9." 4
- For a native linker on a FreeBSD system, any directories specified by
- the \f(CW\*(C`_PATH_ELF_HINTS\*(C'\fR macro defined in the \fIelf\-hints.h\fR
- header file.
- .IP "10." 4
- Any directories specifed by a \f(CW\*(C`SEARCH_DIR\*(C'\fR command in the
- linker script being used.
- .RE
- .RS 4
- .Sp
- If the required shared library is not found, the linker will issue a
- warning and continue with the link.
- .RE
- .IP "\fB\-shared\fR" 4
- .IX Item "-shared"
- .PD 0
- .IP "\fB\-Bshareable\fR" 4
- .IX Item "-Bshareable"
- .PD
- Create a shared library. This is currently only supported on \s-1ELF, XCOFF\s0
- and SunOS platforms. On SunOS, the linker will automatically create a
- shared library if the \fB\-e\fR option is not used and there are
- undefined symbols in the link.
- .IP "\fB\-\-sort\-common\fR" 4
- .IX Item "--sort-common"
- .PD 0
- .IP "\fB\-\-sort\-common=ascending\fR" 4
- .IX Item "--sort-common=ascending"
- .IP "\fB\-\-sort\-common=descending\fR" 4
- .IX Item "--sort-common=descending"
- .PD
- This option tells \fBld\fR to sort the common symbols by alignment in
- ascending or descending order when it places them in the appropriate output
- sections. The symbol alignments considered are sixteen-byte or larger,
- eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps
- between symbols due to alignment constraints. If no sorting order is
- specified, then descending order is assumed.
- .IP "\fB\-\-sort\-section=name\fR" 4
- .IX Item "--sort-section=name"
- This option will apply \f(CW\*(C`SORT_BY_NAME\*(C'\fR to all wildcard section
- patterns in the linker script.
- .IP "\fB\-\-sort\-section=alignment\fR" 4
- .IX Item "--sort-section=alignment"
- This option will apply \f(CW\*(C`SORT_BY_ALIGNMENT\*(C'\fR to all wildcard section
- patterns in the linker script.
- .IP "\fB\-\-spare\-dynamic\-tags=\fR\fIcount\fR" 4
- .IX Item "--spare-dynamic-tags=count"
- This option specifies the number of empty slots to leave in the
- \&.dynamic section of \s-1ELF\s0 shared objects. Empty slots may be needed by
- post processing tools, such as the prelinker. The default is 5.
- .IP "\fB\-\-split\-by\-file[=\fR\fIsize\fR\fB]\fR" 4
- .IX Item "--split-by-file[=size]"
- Similar to \fB\-\-split\-by\-reloc\fR but creates a new output section for
- each input file when \fIsize\fR is reached. \fIsize\fR defaults to a
- size of 1 if not given.
- .IP "\fB\-\-split\-by\-reloc[=\fR\fIcount\fR\fB]\fR" 4
- .IX Item "--split-by-reloc[=count]"
- Tries to creates extra sections in the output file so that no single
- output section in the file contains more than \fIcount\fR relocations.
- This is useful when generating huge relocatable files for downloading into
- certain real time kernels with the \s-1COFF\s0 object file format; since \s-1COFF\s0
- cannot represent more than 65535 relocations in a single section. Note
- that this will fail to work with object file formats which do not
- support arbitrary sections. The linker will not split up individual
- input sections for redistribution, so if a single input section contains
- more than \fIcount\fR relocations one output section will contain that
- many relocations. \fIcount\fR defaults to a value of 32768.
- .IP "\fB\-\-stats\fR" 4
- .IX Item "--stats"
- Compute and display statistics about the operation of the linker, such
- as execution time and memory usage.
- .IP "\fB\-\-sysroot=\fR\fIdirectory\fR" 4
- .IX Item "--sysroot=directory"
- Use \fIdirectory\fR as the location of the sysroot, overriding the
- configure-time default. This option is only supported by linkers
- that were configured using \fB\-\-with\-sysroot\fR.
- .IP "\fB\-\-task\-link\fR" 4
- .IX Item "--task-link"
- This is used by \s-1COFF/PE\s0 based targets to create a task-linked object
- file where all of the global symbols have been converted to statics.
- .IP "\fB\-\-traditional\-format\fR" 4
- .IX Item "--traditional-format"
- For some targets, the output of \fBld\fR is different in some ways from
- the output of some existing linker. This switch requests \fBld\fR to
- use the traditional format instead.
- .Sp
- For example, on SunOS, \fBld\fR combines duplicate entries in the
- symbol string table. This can reduce the size of an output file with
- full debugging information by over 30 percent. Unfortunately, the SunOS
- \&\f(CW\*(C`dbx\*(C'\fR program can not read the resulting program (\f(CW\*(C`gdb\*(C'\fR has no
- trouble). The \fB\-\-traditional\-format\fR switch tells \fBld\fR to not
- combine duplicate entries.
- .IP "\fB\-\-section\-start=\fR\fIsectionname\fR\fB=\fR\fIorg\fR" 4
- .IX Item "--section-start=sectionname=org"
- Locate a section in the output file at the absolute
- address given by \fIorg\fR. You may use this option as many
- times as necessary to locate multiple sections in the command
- line.
- \&\fIorg\fR must be a single hexadecimal integer;
- for compatibility with other linkers, you may omit the leading
- \&\fB0x\fR usually associated with hexadecimal values. \fINote:\fR there
- should be no white space between \fIsectionname\fR, the equals
- sign ("\fB=\fR"), and \fIorg\fR.
- .IP "\fB\-Tbss=\fR\fIorg\fR" 4
- .IX Item "-Tbss=org"
- .PD 0
- .IP "\fB\-Tdata=\fR\fIorg\fR" 4
- .IX Item "-Tdata=org"
- .IP "\fB\-Ttext=\fR\fIorg\fR" 4
- .IX Item "-Ttext=org"
- .PD
- Same as \fB\-\-section\-start\fR, with \f(CW\*(C`.bss\*(C'\fR, \f(CW\*(C`.data\*(C'\fR or
- \&\f(CW\*(C`.text\*(C'\fR as the \fIsectionname\fR.
- .IP "\fB\-Ttext\-segment=\fR\fIorg\fR" 4
- .IX Item "-Ttext-segment=org"
- When creating an \s-1ELF\s0 executable, it will set the address of the first
- byte of the text segment.
- .IP "\fB\-Trodata\-segment=\fR\fIorg\fR" 4
- .IX Item "-Trodata-segment=org"
- When creating an \s-1ELF\s0 executable or shared object for a target where
- the read-only data is in its own segment separate from the executable
- text, it will set the address of the first byte of the read-only data segment.
- .IP "\fB\-Tldata\-segment=\fR\fIorg\fR" 4
- .IX Item "-Tldata-segment=org"
- When creating an \s-1ELF\s0 executable or shared object for x86\-64 medium memory
- model, it will set the address of the first byte of the ldata segment.
- .IP "\fB\-\-unresolved\-symbols=\fR\fImethod\fR" 4
- .IX Item "--unresolved-symbols=method"
- Determine how to handle unresolved symbols. There are four possible
- values for \fBmethod\fR:
- .RS 4
- .IP "\fBignore-all\fR" 4
- .IX Item "ignore-all"
- Do not report any unresolved symbols.
- .IP "\fBreport-all\fR" 4
- .IX Item "report-all"
- Report all unresolved symbols. This is the default.
- .IP "\fBignore-in-object-files\fR" 4
- .IX Item "ignore-in-object-files"
- Report unresolved symbols that are contained in shared libraries, but
- ignore them if they come from regular object files.
- .IP "\fBignore-in-shared-libs\fR" 4
- .IX Item "ignore-in-shared-libs"
- Report unresolved symbols that come from regular object files, but
- ignore them if they come from shared libraries. This can be useful
- when creating a dynamic binary and it is known that all the shared
- libraries that it should be referencing are included on the linker's
- command line.
- .RE
- .RS 4
- .Sp
- The behaviour for shared libraries on their own can also be controlled
- by the \fB\-\-[no\-]allow\-shlib\-undefined\fR option.
- .Sp
- Normally the linker will generate an error message for each reported
- unresolved symbol but the option \fB\-\-warn\-unresolved\-symbols\fR
- can change this to a warning.
- .RE
- .IP "\fB\-\-dll\-verbose\fR" 4
- .IX Item "--dll-verbose"
- .PD 0
- .IP "\fB\-\-verbose[=\fR\fI\s-1NUMBER\s0\fR\fB]\fR" 4
- .IX Item "--verbose[=NUMBER]"
- .PD
- Display the version number for \fBld\fR and list the linker emulations
- supported. Display which input files can and cannot be opened. Display
- the linker script being used by the linker. If the optional \fI\s-1NUMBER\s0\fR
- argument > 1, plugin symbol status will also be displayed.
- .IP "\fB\-\-version\-script=\fR\fIversion-scriptfile\fR" 4
- .IX Item "--version-script=version-scriptfile"
- Specify the name of a version script to the linker. This is typically
- used when creating shared libraries to specify additional information
- about the version hierarchy for the library being created. This option
- is only fully supported on \s-1ELF\s0 platforms which support shared libraries;
- see \fB\s-1VERSION\s0\fR. It is partially supported on \s-1PE\s0 platforms, which can
- use version scripts to filter symbol visibility in auto-export mode: any
- symbols marked \fBlocal\fR in the version script will not be exported.
- .IP "\fB\-\-warn\-common\fR" 4
- .IX Item "--warn-common"
- Warn when a common symbol is combined with another common symbol or with
- a symbol definition. Unix linkers allow this somewhat sloppy practice,
- but linkers on some other operating systems do not. This option allows
- you to find potential problems from combining global symbols.
- Unfortunately, some C libraries use this practice, so you may get some
- warnings about symbols in the libraries as well as in your programs.
- .Sp
- There are three kinds of global symbols, illustrated here by C examples:
- .RS 4
- .IP "\fBint i = 1;\fR" 4
- .IX Item "int i = 1;"
- A definition, which goes in the initialized data section of the output
- file.
- .IP "\fBextern int i;\fR" 4
- .IX Item "extern int i;"
- An undefined reference, which does not allocate space.
- There must be either a definition or a common symbol for the
- variable somewhere.
- .IP "\fBint i;\fR" 4
- .IX Item "int i;"
- A common symbol. If there are only (one or more) common symbols for a
- variable, it goes in the uninitialized data area of the output file.
- The linker merges multiple common symbols for the same variable into a
- single symbol. If they are of different sizes, it picks the largest
- size. The linker turns a common symbol into a declaration, if there is
- a definition of the same variable.
- .RE
- .RS 4
- .Sp
- The \fB\-\-warn\-common\fR option can produce five kinds of warnings.
- Each warning consists of a pair of lines: the first describes the symbol
- just encountered, and the second describes the previous symbol
- encountered with the same name. One or both of the two symbols will be
- a common symbol.
- .IP "1." 4
- Turning a common symbol into a reference, because there is already a
- definition for the symbol.
- .Sp
- .Vb 3
- \& <file>(<section>): warning: common of \`<symbol>\*(Aq
- \& overridden by definition
- \& <file>(<section>): warning: defined here
- .Ve
- .IP "2." 4
- Turning a common symbol into a reference, because a later definition for
- the symbol is encountered. This is the same as the previous case,
- except that the symbols are encountered in a different order.
- .Sp
- .Vb 3
- \& <file>(<section>): warning: definition of \`<symbol>\*(Aq
- \& overriding common
- \& <file>(<section>): warning: common is here
- .Ve
- .IP "3." 4
- Merging a common symbol with a previous same-sized common symbol.
- .Sp
- .Vb 3
- \& <file>(<section>): warning: multiple common
- \& of \`<symbol>\*(Aq
- \& <file>(<section>): warning: previous common is here
- .Ve
- .IP "4." 4
- Merging a common symbol with a previous larger common symbol.
- .Sp
- .Vb 3
- \& <file>(<section>): warning: common of \`<symbol>\*(Aq
- \& overridden by larger common
- \& <file>(<section>): warning: larger common is here
- .Ve
- .IP "5." 4
- Merging a common symbol with a previous smaller common symbol. This is
- the same as the previous case, except that the symbols are
- encountered in a different order.
- .Sp
- .Vb 3
- \& <file>(<section>): warning: common of \`<symbol>\*(Aq
- \& overriding smaller common
- \& <file>(<section>): warning: smaller common is here
- .Ve
- .RE
- .RS 4
- .RE
- .IP "\fB\-\-warn\-constructors\fR" 4
- .IX Item "--warn-constructors"
- Warn if any global constructors are used. This is only useful for a few
- object file formats. For formats like \s-1COFF\s0 or \s-1ELF,\s0 the linker can not
- detect the use of global constructors.
- .IP "\fB\-\-warn\-multiple\-gp\fR" 4
- .IX Item "--warn-multiple-gp"
- Warn if multiple global pointer values are required in the output file.
- This is only meaningful for certain processors, such as the Alpha.
- Specifically, some processors put large-valued constants in a special
- section. A special register (the global pointer) points into the middle
- of this section, so that constants can be loaded efficiently via a
- base-register relative addressing mode. Since the offset in
- base-register relative mode is fixed and relatively small (e.g., 16
- bits), this limits the maximum size of the constant pool. Thus, in
- large programs, it is often necessary to use multiple global pointer
- values in order to be able to address all possible constants. This
- option causes a warning to be issued whenever this case occurs.
- .IP "\fB\-\-warn\-once\fR" 4
- .IX Item "--warn-once"
- Only warn once for each undefined symbol, rather than once per module
- which refers to it.
- .IP "\fB\-\-warn\-section\-align\fR" 4
- .IX Item "--warn-section-align"
- Warn if the address of an output section is changed because of
- alignment. Typically, the alignment will be set by an input section.
- The address will only be changed if it not explicitly specified; that
- is, if the \f(CW\*(C`SECTIONS\*(C'\fR command does not specify a start address for
- the section.
- .IP "\fB\-\-warn\-textrel\fR" 4
- .IX Item "--warn-textrel"
- Warn if the linker adds \s-1DT_TEXTREL\s0 to a position-independent executable
- or shared object.
- .IP "\fB\-\-warn\-alternate\-em\fR" 4
- .IX Item "--warn-alternate-em"
- Warn if an object has alternate \s-1ELF\s0 machine code.
- .IP "\fB\-\-warn\-unresolved\-symbols\fR" 4
- .IX Item "--warn-unresolved-symbols"
- If the linker is going to report an unresolved symbol (see the option
- \&\fB\-\-unresolved\-symbols\fR) it will normally generate an error.
- This option makes it generate a warning instead.
- .IP "\fB\-\-error\-unresolved\-symbols\fR" 4
- .IX Item "--error-unresolved-symbols"
- This restores the linker's default behaviour of generating errors when
- it is reporting unresolved symbols.
- .IP "\fB\-\-whole\-archive\fR" 4
- .IX Item "--whole-archive"
- For each archive mentioned on the command line after the
- \&\fB\-\-whole\-archive\fR option, include every object file in the archive
- in the link, rather than searching the archive for the required object
- files. This is normally used to turn an archive file into a shared
- library, forcing every object to be included in the resulting shared
- library. This option may be used more than once.
- .Sp
- Two notes when using this option from gcc: First, gcc doesn't know
- about this option, so you have to use \fB\-Wl,\-whole\-archive\fR.
- Second, don't forget to use \fB\-Wl,\-no\-whole\-archive\fR after your
- list of archives, because gcc will add its own list of archives to
- your link and you may not want this flag to affect those as well.
- .IP "\fB\-\-wrap=\fR\fIsymbol\fR" 4
- .IX Item "--wrap=symbol"
- Use a wrapper function for \fIsymbol\fR. Any undefined reference to
- \&\fIsymbol\fR will be resolved to \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. Any
- undefined reference to \f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR will be resolved to
- \&\fIsymbol\fR.
- .Sp
- This can be used to provide a wrapper for a system function. The
- wrapper function should be called \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. If it
- wishes to call the system function, it should call
- \&\f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR.
- .Sp
- Here is a trivial example:
- .Sp
- .Vb 6
- \& void *
- \& _\|_wrap_malloc (size_t c)
- \& {
- \& printf ("malloc called with %zu\en", c);
- \& return _\|_real_malloc (c);
- \& }
- .Ve
- .Sp
- If you link other code with this file using \fB\-\-wrap malloc\fR, then
- all calls to \f(CW\*(C`malloc\*(C'\fR will call the function \f(CW\*(C`_\|_wrap_malloc\*(C'\fR
- instead. The call to \f(CW\*(C`_\|_real_malloc\*(C'\fR in \f(CW\*(C`_\|_wrap_malloc\*(C'\fR will
- call the real \f(CW\*(C`malloc\*(C'\fR function.
- .Sp
- You may wish to provide a \f(CW\*(C`_\|_real_malloc\*(C'\fR function as well, so that
- links without the \fB\-\-wrap\fR option will succeed. If you do this,
- you should not put the definition of \f(CW\*(C`_\|_real_malloc\*(C'\fR in the same
- file as \f(CW\*(C`_\|_wrap_malloc\*(C'\fR; if you do, the assembler may resolve the
- call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR.
- .Sp
- Only undefined references are replaced by the linker. So, translation unit
- internal references to \fIsymbol\fR are not resolved to
- \&\f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. In the next example, the call to \f(CW\*(C`f\*(C'\fR in
- \&\f(CW\*(C`g\*(C'\fR is not resolved to \f(CW\*(C`_\|_wrap_f\*(C'\fR.
- .Sp
- .Vb 5
- \& int
- \& f (void)
- \& {
- \& return 123;
- \& }
- \&
- \& int
- \& g (void)
- \& {
- \& return f();
- \& }
- .Ve
- .IP "\fB\-\-eh\-frame\-hdr\fR" 4
- .IX Item "--eh-frame-hdr"
- .PD 0
- .IP "\fB\-\-no\-eh\-frame\-hdr\fR" 4
- .IX Item "--no-eh-frame-hdr"
- .PD
- Request (\fB\-\-eh\-frame\-hdr\fR) or suppress
- (\fB\-\-no\-eh\-frame\-hdr\fR) the creation of \f(CW\*(C`.eh_frame_hdr\*(C'\fR
- section and \s-1ELF \s0\f(CW\*(C`PT_GNU_EH_FRAME\*(C'\fR segment header.
- .IP "\fB\-\-no\-ld\-generated\-unwind\-info\fR" 4
- .IX Item "--no-ld-generated-unwind-info"
- Request creation of \f(CW\*(C`.eh_frame\*(C'\fR unwind info for linker
- generated code sections like \s-1PLT. \s0 This option is on by default
- if linker generated unwind info is supported.
- .IP "\fB\-\-enable\-new\-dtags\fR" 4
- .IX Item "--enable-new-dtags"
- .PD 0
- .IP "\fB\-\-disable\-new\-dtags\fR" 4
- .IX Item "--disable-new-dtags"
- .PD
- This linker can create the new dynamic tags in \s-1ELF.\s0 But the older \s-1ELF\s0
- systems may not understand them. If you specify
- \&\fB\-\-enable\-new\-dtags\fR, the new dynamic tags will be created as needed
- and older dynamic tags will be omitted.
- If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be
- created. By default, the new dynamic tags are not created. Note that
- those options are only available for \s-1ELF\s0 systems.
- .IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
- .IX Item "--hash-size=number"
- Set the default size of the linker's hash tables to a prime number
- close to \fInumber\fR. Increasing this value can reduce the length of
- time it takes the linker to perform its tasks, at the expense of
- increasing the linker's memory requirements. Similarly reducing this
- value can reduce the memory requirements at the expense of speed.
- .IP "\fB\-\-hash\-style=\fR\fIstyle\fR" 4
- .IX Item "--hash-style=style"
- Set the type of linker's hash table(s). \fIstyle\fR can be either
- \&\f(CW\*(C`sysv\*(C'\fR for classic \s-1ELF \s0\f(CW\*(C`.hash\*(C'\fR section, \f(CW\*(C`gnu\*(C'\fR for
- new style \s-1GNU \s0\f(CW\*(C`.gnu.hash\*(C'\fR section or \f(CW\*(C`both\*(C'\fR for both
- the classic \s-1ELF \s0\f(CW\*(C`.hash\*(C'\fR and new style \s-1GNU \s0\f(CW\*(C`.gnu.hash\*(C'\fR
- hash tables. The default depends upon how the linker was configured,
- but for most Linux based systems it will be \f(CW\*(C`both\*(C'\fR.
- .IP "\fB\-\-compress\-debug\-sections=none\fR" 4
- .IX Item "--compress-debug-sections=none"
- .PD 0
- .IP "\fB\-\-compress\-debug\-sections=zlib\fR" 4
- .IX Item "--compress-debug-sections=zlib"
- .IP "\fB\-\-compress\-debug\-sections=zlib\-gnu\fR" 4
- .IX Item "--compress-debug-sections=zlib-gnu"
- .IP "\fB\-\-compress\-debug\-sections=zlib\-gabi\fR" 4
- .IX Item "--compress-debug-sections=zlib-gabi"
- .PD
- On \s-1ELF\s0 platforms, these options control how \s-1DWARF\s0 debug sections are
- compressed using zlib.
- .Sp
- \&\fB\-\-compress\-debug\-sections=none\fR doesn't compress \s-1DWARF\s0 debug
- sections. \fB\-\-compress\-debug\-sections=zlib\-gnu\fR compresses
- \&\s-1DWARF\s0 debug sections and renames them to begin with \fB.zdebug\fR
- instead of \fB.debug\fR. \fB\-\-compress\-debug\-sections=zlib\-gabi\fR
- also compresses \s-1DWARF\s0 debug sections, but rather than renaming them it
- sets the \s-1SHF_COMPRESSED\s0 flag in the sections' headers.
- .Sp
- The \fB\-\-compress\-debug\-sections=zlib\fR option is an alias for
- \&\fB\-\-compress\-debug\-sections=zlib\-gabi\fR.
- .Sp
- Note that this option overrides any compression in input debug
- sections, so if a binary is linked with \fB\-\-compress\-debug\-sections=none\fR
- for example, then any compressed debug sections in input files will be
- uncompressed before they are copied into the output binary.
- .Sp
- The default compression behaviour varies depending upon the target
- involved and the configure options used to build the toolchain. The
- default can be determined by examining the output from the linker's
- \&\fB\-\-help\fR option.
- .IP "\fB\-\-reduce\-memory\-overheads\fR" 4
- .IX Item "--reduce-memory-overheads"
- This option reduces memory requirements at ld runtime, at the expense of
- linking speed. This was introduced to select the old O(n^2) algorithm
- for link map file generation, rather than the new O(n) algorithm which uses
- about 40% more memory for symbol storage.
- .Sp
- Another effect of the switch is to set the default hash table size to
- 1021, which again saves memory at the cost of lengthening the linker's
- run time. This is not done however if the \fB\-\-hash\-size\fR switch
- has been used.
- .Sp
- The \fB\-\-reduce\-memory\-overheads\fR switch may be also be used to
- enable other tradeoffs in future versions of the linker.
- .IP "\fB\-\-build\-id\fR" 4
- .IX Item "--build-id"
- .PD 0
- .IP "\fB\-\-build\-id=\fR\fIstyle\fR" 4
- .IX Item "--build-id=style"
- .PD
- Request the creation of a \f(CW\*(C`.note.gnu.build\-id\*(C'\fR \s-1ELF\s0 note section
- or a \f(CW\*(C`.buildid\*(C'\fR \s-1COFF\s0 section. The contents of the note are
- unique bits identifying this linked file. \fIstyle\fR can be
- \&\f(CW\*(C`uuid\*(C'\fR to use 128 random bits, \f(CW\*(C`sha1\*(C'\fR to use a 160\-bit
- \&\s-1SHA1\s0 hash on the normative parts of the output contents,
- \&\f(CW\*(C`md5\*(C'\fR to use a 128\-bit \s-1MD5\s0 hash on the normative parts of
- the output contents, or \f(CW\*(C`0x\f(CIhexstring\f(CW\*(C'\fR to use a chosen bit
- string specified as an even number of hexadecimal digits (\f(CW\*(C`\-\*(C'\fR and
- \&\f(CW\*(C`:\*(C'\fR characters between digit pairs are ignored). If \fIstyle\fR
- is omitted, \f(CW\*(C`sha1\*(C'\fR is used.
- .Sp
- The \f(CW\*(C`md5\*(C'\fR and \f(CW\*(C`sha1\*(C'\fR styles produces an identifier
- that is always the same in an identical output file, but will be
- unique among all nonidentical output files. It is not intended
- to be compared as a checksum for the file's contents. A linked
- file may be changed later by other tools, but the build \s-1ID\s0 bit
- string identifying the original linked file does not change.
- .Sp
- Passing \f(CW\*(C`none\*(C'\fR for \fIstyle\fR disables the setting from any
- \&\f(CW\*(C`\-\-build\-id\*(C'\fR options earlier on the command line.
- .PP
- The i386 \s-1PE\s0 linker supports the \fB\-shared\fR option, which causes
- the output to be a dynamically linked library (\s-1DLL\s0) instead of a
- normal executable. You should name the output \f(CW\*(C`*.dll\*(C'\fR when you
- use this option. In addition, the linker fully supports the standard
- \&\f(CW\*(C`*.def\*(C'\fR files, which may be specified on the linker command line
- like an object file (in fact, it should precede archives it exports
- symbols from, to ensure that they get linked in, just like a normal
- object file).
- .PP
- In addition to the options common to all targets, the i386 \s-1PE\s0 linker
- support additional command-line options that are specific to the i386
- \&\s-1PE\s0 target. Options that take values may be separated from their
- values by either a space or an equals sign.
- .IP "\fB\-\-add\-stdcall\-alias\fR" 4
- .IX Item "--add-stdcall-alias"
- If given, symbols with a stdcall suffix (@\fInn\fR) will be exported
- as-is and also with the suffix stripped.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-base\-file\fR \fIfile\fR" 4
- .IX Item "--base-file file"
- Use \fIfile\fR as the name of a file in which to save the base
- addresses of all the relocations needed for generating DLLs with
- \&\fIdlltool\fR.
- [This is an i386 \s-1PE\s0 specific option]
- .IP "\fB\-\-dll\fR" 4
- .IX Item "--dll"
- Create a \s-1DLL\s0 instead of a regular executable. You may also use
- \&\fB\-shared\fR or specify a \f(CW\*(C`LIBRARY\*(C'\fR in a given \f(CW\*(C`.def\*(C'\fR
- file.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-enable\-long\-section\-names\fR" 4
- .IX Item "--enable-long-section-names"
- .PD 0
- .IP "\fB\-\-disable\-long\-section\-names\fR" 4
- .IX Item "--disable-long-section-names"
- .PD
- The \s-1PE\s0 variants of the \s-1COFF\s0 object format add an extension that permits
- the use of section names longer than eight characters, the normal limit
- for \s-1COFF. \s0 By default, these names are only allowed in object files, as
- fully-linked executable images do not carry the \s-1COFF\s0 string table required
- to support the longer names. As a \s-1GNU\s0 extension, it is possible to
- allow their use in executable images as well, or to (probably pointlessly!)
- disallow it in object files, by using these two options. Executable images
- generated with these long section names are slightly non-standard, carrying
- as they do a string table, and may generate confusing output when examined
- with non-GNU PE-aware tools, such as file viewers and dumpers. However,
- \&\s-1GDB\s0 relies on the use of \s-1PE\s0 long section names to find Dwarf\-2 debug
- information sections in an executable image at runtime, and so if neither
- option is specified on the command-line, \fBld\fR will enable long
- section names, overriding the default and technically correct behaviour,
- when it finds the presence of debug information while linking an executable
- image and not stripping symbols.
- [This option is valid for all \s-1PE\s0 targeted ports of the linker]
- .IP "\fB\-\-enable\-stdcall\-fixup\fR" 4
- .IX Item "--enable-stdcall-fixup"
- .PD 0
- .IP "\fB\-\-disable\-stdcall\-fixup\fR" 4
- .IX Item "--disable-stdcall-fixup"
- .PD
- If the link finds a symbol that it cannot resolve, it will attempt to
- do \*(L"fuzzy linking\*(R" by looking for another defined symbol that differs
- only in the format of the symbol name (cdecl vs stdcall) and will
- resolve that symbol by linking to the match. For example, the
- undefined symbol \f(CW\*(C`_foo\*(C'\fR might be linked to the function
- \&\f(CW\*(C`_foo@12\*(C'\fR, or the undefined symbol \f(CW\*(C`_bar@16\*(C'\fR might be linked
- to the function \f(CW\*(C`_bar\*(C'\fR. When the linker does this, it prints a
- warning, since it normally should have failed to link, but sometimes
- import libraries generated from third-party dlls may need this feature
- to be usable. If you specify \fB\-\-enable\-stdcall\-fixup\fR, this
- feature is fully enabled and warnings are not printed. If you specify
- \&\fB\-\-disable\-stdcall\-fixup\fR, this feature is disabled and such
- mismatches are considered to be errors.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-leading\-underscore\fR" 4
- .IX Item "--leading-underscore"
- .PD 0
- .IP "\fB\-\-no\-leading\-underscore\fR" 4
- .IX Item "--no-leading-underscore"
- .PD
- For most targets default symbol-prefix is an underscore and is defined
- in target's description. By this option it is possible to
- disable/enable the default underscore symbol-prefix.
- .IP "\fB\-\-export\-all\-symbols\fR" 4
- .IX Item "--export-all-symbols"
- If given, all global symbols in the objects used to build a \s-1DLL\s0 will
- be exported by the \s-1DLL. \s0 Note that this is the default if there
- otherwise wouldn't be any exported symbols. When symbols are
- explicitly exported via \s-1DEF\s0 files or implicitly exported via function
- attributes, the default is to not export anything else unless this
- option is given. Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR,
- \&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, \f(CW\*(C`DllMainCRTStartup@12\*(C'\fR, and
- \&\f(CW\*(C`impure_ptr\*(C'\fR will not be automatically
- exported. Also, symbols imported from other DLLs will not be
- re-exported, nor will symbols specifying the \s-1DLL\s0's internal layout
- such as those beginning with \f(CW\*(C`_head_\*(C'\fR or ending with
- \&\f(CW\*(C`_iname\*(C'\fR. In addition, no symbols from \f(CW\*(C`libgcc\*(C'\fR,
- \&\f(CW\*(C`libstd++\*(C'\fR, \f(CW\*(C`libmingw32\*(C'\fR, or \f(CW\*(C`crtX.o\*(C'\fR will be exported.
- Symbols whose names begin with \f(CW\*(C`_\|_rtti_\*(C'\fR or \f(CW\*(C`_\|_builtin_\*(C'\fR will
- not be exported, to help with \*(C+ DLLs. Finally, there is an
- extensive list of cygwin-private symbols that are not exported
- (obviously, this applies on when building DLLs for cygwin targets).
- These cygwin-excludes are: \f(CW\*(C`_cygwin_dll_entry@12\*(C'\fR,
- \&\f(CW\*(C`_cygwin_crt0_common@8\*(C'\fR, \f(CW\*(C`_cygwin_noncygwin_dll_entry@12\*(C'\fR,
- \&\f(CW\*(C`_fmode\*(C'\fR, \f(CW\*(C`_impure_ptr\*(C'\fR, \f(CW\*(C`cygwin_attach_dll\*(C'\fR,
- \&\f(CW\*(C`cygwin_premain0\*(C'\fR, \f(CW\*(C`cygwin_premain1\*(C'\fR, \f(CW\*(C`cygwin_premain2\*(C'\fR,
- \&\f(CW\*(C`cygwin_premain3\*(C'\fR, and \f(CW\*(C`environ\*(C'\fR.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-exclude\-symbols\fR \fIsymbol\fR\fB,\fR\fIsymbol\fR\fB,...\fR" 4
- .IX Item "--exclude-symbols symbol,symbol,..."
- Specifies a list of symbols which should not be automatically
- exported. The symbol names may be delimited by commas or colons.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-exclude\-all\-symbols\fR" 4
- .IX Item "--exclude-all-symbols"
- Specifies no symbols should be automatically exported.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-file\-alignment\fR" 4
- .IX Item "--file-alignment"
- Specify the file alignment. Sections in the file will always begin at
- file offsets which are multiples of this number. This defaults to
- 512.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-heap\fR \fIreserve\fR" 4
- .IX Item "--heap reserve"
- .PD 0
- .IP "\fB\-\-heap\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
- .IX Item "--heap reserve,commit"
- .PD
- Specify the number of bytes of memory to reserve (and optionally commit)
- to be used as heap for this program. The default is 1MB reserved, 4K
- committed.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-image\-base\fR \fIvalue\fR" 4
- .IX Item "--image-base value"
- Use \fIvalue\fR as the base address of your program or dll. This is
- the lowest memory location that will be used when your program or dll
- is loaded. To reduce the need to relocate and improve performance of
- your dlls, each should have a unique base address and not overlap any
- other dlls. The default is 0x400000 for executables, and 0x10000000
- for dlls.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-kill\-at\fR" 4
- .IX Item "--kill-at"
- If given, the stdcall suffixes (@\fInn\fR) will be stripped from
- symbols before they are exported.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-large\-address\-aware\fR" 4
- .IX Item "--large-address-aware"
- If given, the appropriate bit in the \*(L"Characteristics\*(R" field of the \s-1COFF\s0
- header is set to indicate that this executable supports virtual addresses
- greater than 2 gigabytes. This should be used in conjunction with the /3GB
- or /USERVA=\fIvalue\fR megabytes switch in the \*(L"[operating systems]\*(R"
- section of the \s-1BOOT.INI. \s0 Otherwise, this bit has no effect.
- [This option is specific to \s-1PE\s0 targeted ports of the linker]
- .IP "\fB\-\-disable\-large\-address\-aware\fR" 4
- .IX Item "--disable-large-address-aware"
- Reverts the effect of a previous \fB\-\-large\-address\-aware\fR option.
- This is useful if \fB\-\-large\-address\-aware\fR is always set by the compiler
- driver (e.g. Cygwin gcc) and the executable does not support virtual
- addresses greater than 2 gigabytes.
- [This option is specific to \s-1PE\s0 targeted ports of the linker]
- .IP "\fB\-\-major\-image\-version\fR \fIvalue\fR" 4
- .IX Item "--major-image-version value"
- Sets the major number of the \*(L"image version\*(R". Defaults to 1.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-major\-os\-version\fR \fIvalue\fR" 4
- .IX Item "--major-os-version value"
- Sets the major number of the \*(L"os version\*(R". Defaults to 4.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-major\-subsystem\-version\fR \fIvalue\fR" 4
- .IX Item "--major-subsystem-version value"
- Sets the major number of the \*(L"subsystem version\*(R". Defaults to 4.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-minor\-image\-version\fR \fIvalue\fR" 4
- .IX Item "--minor-image-version value"
- Sets the minor number of the \*(L"image version\*(R". Defaults to 0.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-minor\-os\-version\fR \fIvalue\fR" 4
- .IX Item "--minor-os-version value"
- Sets the minor number of the \*(L"os version\*(R". Defaults to 0.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-minor\-subsystem\-version\fR \fIvalue\fR" 4
- .IX Item "--minor-subsystem-version value"
- Sets the minor number of the \*(L"subsystem version\*(R". Defaults to 0.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-output\-def\fR \fIfile\fR" 4
- .IX Item "--output-def file"
- The linker will create the file \fIfile\fR which will contain a \s-1DEF\s0
- file corresponding to the \s-1DLL\s0 the linker is generating. This \s-1DEF\s0 file
- (which should be called \f(CW\*(C`*.def\*(C'\fR) may be used to create an import
- library with \f(CW\*(C`dlltool\*(C'\fR or may be used as a reference to
- automatically or implicitly exported symbols.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-enable\-auto\-image\-base\fR" 4
- .IX Item "--enable-auto-image-base"
- .PD 0
- .IP "\fB\-\-enable\-auto\-image\-base=\fR\fIvalue\fR" 4
- .IX Item "--enable-auto-image-base=value"
- .PD
- Automatically choose the image base for DLLs, optionally starting with base
- \&\fIvalue\fR, unless one is specified using the \f(CW\*(C`\-\-image\-base\*(C'\fR argument.
- By using a hash generated from the dllname to create unique image bases
- for each \s-1DLL,\s0 in-memory collisions and relocations which can delay program
- execution are avoided.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-disable\-auto\-image\-base\fR" 4
- .IX Item "--disable-auto-image-base"
- Do not automatically generate a unique image base. If there is no
- user-specified image base (\f(CW\*(C`\-\-image\-base\*(C'\fR) then use the platform
- default.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-dll\-search\-prefix\fR \fIstring\fR" 4
- .IX Item "--dll-search-prefix string"
- When linking dynamically to a dll without an import library,
- search for \f(CW\*(C`<string><basename>.dll\*(C'\fR in preference to
- \&\f(CW\*(C`lib<basename>.dll\*(C'\fR. This behaviour allows easy distinction
- between DLLs built for the various \*(L"subplatforms\*(R": native, cygwin,
- uwin, pw, etc. For instance, cygwin DLLs typically use
- \&\f(CW\*(C`\-\-dll\-search\-prefix=cyg\*(C'\fR.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-enable\-auto\-import\fR" 4
- .IX Item "--enable-auto-import"
- Do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to \f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for
- \&\s-1DATA\s0 imports from DLLs, thus making it possible to bypass the dllimport
- mechanism on the user side and to reference unmangled symbol names.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .Sp
- The following remarks pertain to the original implementation of the
- feature and are obsolete nowadays for Cygwin and MinGW targets.
- .Sp
- Note: Use of the 'auto\-import' extension will cause the text section
- of the image file to be made writable. This does not conform to the
- PE-COFF format specification published by Microsoft.
- .Sp
- Note \- use of the 'auto\-import' extension will also cause read only
- data which would normally be placed into the .rdata section to be
- placed into the .data section instead. This is in order to work
- around a problem with consts that is described here:
- http://www.cygwin.com/ml/cygwin/2004\-09/msg01101.html
- .Sp
- Using 'auto\-import' generally will 'just work' \*(-- but sometimes you may
- see this message:
- .Sp
- "variable '<var>' can't be auto-imported. Please read the
- documentation for ld's \f(CW\*(C`\-\-enable\-auto\-import\*(C'\fR for details."
- .Sp
- This message occurs when some (sub)expression accesses an address
- ultimately given by the sum of two constants (Win32 import tables only
- allow one). Instances where this may occur include accesses to member
- fields of struct variables imported from a \s-1DLL,\s0 as well as using a
- constant index into an array variable imported from a \s-1DLL. \s0 Any
- multiword variable (arrays, structs, long long, etc) may trigger
- this error condition. However, regardless of the exact data type
- of the offending exported variable, ld will always detect it, issue
- the warning, and exit.
- .Sp
- There are several ways to address this difficulty, regardless of the
- data type of the exported variable:
- .Sp
- One way is to use \-\-enable\-runtime\-pseudo\-reloc switch. This leaves the task
- of adjusting references in your client code for runtime environment, so
- this method works only when runtime environment supports this feature.
- .Sp
- A second solution is to force one of the 'constants' to be a variable \*(--
- that is, unknown and un-optimizable at compile time. For arrays,
- there are two possibilities: a) make the indexee (the array's address)
- a variable, or b) make the 'constant' index a variable. Thus:
- .Sp
- .Vb 3
- \& extern type extern_array[];
- \& extern_array[1] \-\->
- \& { volatile type *t=extern_array; t[1] }
- .Ve
- .Sp
- or
- .Sp
- .Vb 3
- \& extern type extern_array[];
- \& extern_array[1] \-\->
- \& { volatile int t=1; extern_array[t] }
- .Ve
- .Sp
- For structs (and most other multiword data types) the only option
- is to make the struct itself (or the long long, or the ...) variable:
- .Sp
- .Vb 3
- \& extern struct s extern_struct;
- \& extern_struct.field \-\->
- \& { volatile struct s *t=&extern_struct; t\->field }
- .Ve
- .Sp
- or
- .Sp
- .Vb 3
- \& extern long long extern_ll;
- \& extern_ll \-\->
- \& { volatile long long * local_ll=&extern_ll; *local_ll }
- .Ve
- .Sp
- A third method of dealing with this difficulty is to abandon
- \&'auto\-import' for the offending symbol and mark it with
- \&\f(CW\*(C`_\|_declspec(dllimport)\*(C'\fR. However, in practice that
- requires using compile-time #defines to indicate whether you are
- building a \s-1DLL,\s0 building client code that will link to the \s-1DLL,\s0 or
- merely building/linking to a static library. In making the choice
- between the various methods of resolving the 'direct address with
- constant offset' problem, you should consider typical real-world usage:
- .Sp
- Original:
- .Sp
- .Vb 7
- \& \-\-foo.h
- \& extern int arr[];
- \& \-\-foo.c
- \& #include "foo.h"
- \& void main(int argc, char **argv){
- \& printf("%d\en",arr[1]);
- \& }
- .Ve
- .Sp
- Solution 1:
- .Sp
- .Vb 9
- \& \-\-foo.h
- \& extern int arr[];
- \& \-\-foo.c
- \& #include "foo.h"
- \& void main(int argc, char **argv){
- \& /* This workaround is for win32 and cygwin; do not "optimize" */
- \& volatile int *parr = arr;
- \& printf("%d\en",parr[1]);
- \& }
- .Ve
- .Sp
- Solution 2:
- .Sp
- .Vb 10
- \& \-\-foo.h
- \& /* Note: auto\-export is assumed (no _\|_declspec(dllexport)) */
- \& #if (defined(_WIN32) || defined(_\|_CYGWIN_\|_)) && \e
- \& !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
- \& #define FOO_IMPORT _\|_declspec(dllimport)
- \& #else
- \& #define FOO_IMPORT
- \& #endif
- \& extern FOO_IMPORT int arr[];
- \& \-\-foo.c
- \& #include "foo.h"
- \& void main(int argc, char **argv){
- \& printf("%d\en",arr[1]);
- \& }
- .Ve
- .Sp
- A fourth way to avoid this problem is to re-code your
- library to use a functional interface rather than a data interface
- for the offending variables (e.g. \fIset_foo()\fR and \fIget_foo()\fR accessor
- functions).
- .IP "\fB\-\-disable\-auto\-import\fR" 4
- .IX Item "--disable-auto-import"
- Do not attempt to do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to
- \&\f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for \s-1DATA\s0 imports from DLLs.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-enable\-runtime\-pseudo\-reloc\fR" 4
- .IX Item "--enable-runtime-pseudo-reloc"
- If your code contains expressions described in \-\-enable\-auto\-import section,
- that is, \s-1DATA\s0 imports from \s-1DLL\s0 with non-zero offset, this switch will create
- a vector of 'runtime pseudo relocations' which can be used by runtime
- environment to adjust references to such data in your client code.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-disable\-runtime\-pseudo\-reloc\fR" 4
- .IX Item "--disable-runtime-pseudo-reloc"
- Do not create pseudo relocations for non-zero offset \s-1DATA\s0 imports from DLLs.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-enable\-extra\-pe\-debug\fR" 4
- .IX Item "--enable-extra-pe-debug"
- Show additional debug info related to auto-import symbol thunking.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-section\-alignment\fR" 4
- .IX Item "--section-alignment"
- Sets the section alignment. Sections in memory will always begin at
- addresses which are a multiple of this number. Defaults to 0x1000.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-stack\fR \fIreserve\fR" 4
- .IX Item "--stack reserve"
- .PD 0
- .IP "\fB\-\-stack\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
- .IX Item "--stack reserve,commit"
- .PD
- Specify the number of bytes of memory to reserve (and optionally commit)
- to be used as stack for this program. The default is 2MB reserved, 4K
- committed.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .IP "\fB\-\-subsystem\fR \fIwhich\fR" 4
- .IX Item "--subsystem which"
- .PD 0
- .IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR" 4
- .IX Item "--subsystem which:major"
- .IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR\fB.\fR\fIminor\fR" 4
- .IX Item "--subsystem which:major.minor"
- .PD
- Specifies the subsystem under which your program will execute. The
- legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR,
- \&\f(CW\*(C`console\*(C'\fR, \f(CW\*(C`posix\*(C'\fR, and \f(CW\*(C`xbox\*(C'\fR. You may optionally set
- the subsystem version also. Numeric values are also accepted for
- \&\fIwhich\fR.
- [This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
- .Sp
- The following options set flags in the \f(CW\*(C`DllCharacteristics\*(C'\fR field
- of the \s-1PE\s0 file header:
- [These options are specific to \s-1PE\s0 targeted ports of the linker]
- .IP "\fB\-\-high\-entropy\-va\fR" 4
- .IX Item "--high-entropy-va"
- Image is compatible with 64\-bit address space layout randomization
- (\s-1ASLR\s0).
- This option also implies \fB\-\-dynamicbase\fR and
- \&\fB\-\-enable\-reloc\-section\fR.
- .IP "\fB\-\-dynamicbase\fR" 4
- .IX Item "--dynamicbase"
- The image base address may be relocated using address space layout
- randomization (\s-1ASLR\s0). This feature was introduced with \s-1MS\s0 Windows
- Vista for i386 \s-1PE\s0 targets.
- This option also implies \fB\-\-enable\-reloc\-section\fR.
- .IP "\fB\-\-forceinteg\fR" 4
- .IX Item "--forceinteg"
- Code integrity checks are enforced.
- .IP "\fB\-\-nxcompat\fR" 4
- .IX Item "--nxcompat"
- The image is compatible with the Data Execution Prevention.
- This feature was introduced with \s-1MS\s0 Windows \s-1XP SP2\s0 for i386 \s-1PE\s0 targets.
- .IP "\fB\-\-no\-isolation\fR" 4
- .IX Item "--no-isolation"
- Although the image understands isolation, do not isolate the image.
- .IP "\fB\-\-no\-seh\fR" 4
- .IX Item "--no-seh"
- The image does not use \s-1SEH.\s0 No \s-1SE\s0 handler may be called from
- this image.
- .IP "\fB\-\-no\-bind\fR" 4
- .IX Item "--no-bind"
- Do not bind this image.
- .IP "\fB\-\-wdmdriver\fR" 4
- .IX Item "--wdmdriver"
- The driver uses the \s-1MS\s0 Windows Driver Model.
- .IP "\fB\-\-tsaware\fR" 4
- .IX Item "--tsaware"
- The image is Terminal Server aware.
- .IP "\fB\-\-insert\-timestamp\fR" 4
- .IX Item "--insert-timestamp"
- .PD 0
- .IP "\fB\-\-no\-insert\-timestamp\fR" 4
- .IX Item "--no-insert-timestamp"
- .PD
- Insert a real timestamp into the image. This is the default behaviour
- as it matches legacy code and it means that the image will work with
- other, proprietary tools. The problem with this default is that it
- will result in slightly different images being produced each time the
- same sources are linked. The option \fB\-\-no\-insert\-timestamp\fR
- can be used to insert a zero value for the timestamp, this ensuring
- that binaries produced from identical sources will compare
- identically.
- .IP "\fB\-\-enable\-reloc\-section\fR" 4
- .IX Item "--enable-reloc-section"
- Create the base relocation table, which is necessary if the image
- is loaded at a different image base than specified in the \s-1PE\s0 header.
- .PP
- The C6X uClinux target uses a binary format called \s-1DSBT\s0 to support shared
- libraries. Each shared library in the system needs to have a unique index;
- all executables use an index of 0.
- .IP "\fB\-\-dsbt\-size\fR \fIsize\fR" 4
- .IX Item "--dsbt-size size"
- This option sets the number of entries in the \s-1DSBT\s0 of the current executable
- or shared library to \fIsize\fR. The default is to create a table with 64
- entries.
- .IP "\fB\-\-dsbt\-index\fR \fIindex\fR" 4
- .IX Item "--dsbt-index index"
- This option sets the \s-1DSBT\s0 index of the current executable or shared library
- to \fIindex\fR. The default is 0, which is appropriate for generating
- executables. If a shared library is generated with a \s-1DSBT\s0 index of 0, the
- \&\f(CW\*(C`R_C6000_DSBT_INDEX\*(C'\fR relocs are copied into the output file.
- .Sp
- The \fB\-\-no\-merge\-exidx\-entries\fR switch disables the merging of adjacent
- exidx entries in frame unwind info.
- .IP "\fB\-\-branch\-stub\fR" 4
- .IX Item "--branch-stub"
- This option enables linker branch relaxation by inserting branch stub
- sections when needed to extend the range of branches. This option is
- usually not required since C\-SKY supports branch and call instructions that
- can access the full memory range and branch relaxation is normally handled by
- the compiler or assembler.
- .IP "\fB\-\-stub\-group\-size=\fR\fIN\fR" 4
- .IX Item "--stub-group-size=N"
- This option allows finer control of linker branch stub creation.
- It sets the maximum size of a group of input sections that can
- be handled by one stub section. A negative value of \fIN\fR locates
- stub sections after their branches, while a positive value allows stub
- sections to appear either before or after the branches. Values of
- \&\fB1\fR or \fB\-1\fR indicate that the
- linker should choose suitable defaults.
- .PP
- The 68HC11 and 68HC12 linkers support specific options to control the
- memory bank switching mapping and trampoline code generation.
- .IP "\fB\-\-no\-trampoline\fR" 4
- .IX Item "--no-trampoline"
- This option disables the generation of trampoline. By default a trampoline
- is generated for each far function which is called using a \f(CW\*(C`jsr\*(C'\fR
- instruction (this happens when a pointer to a far function is taken).
- .IP "\fB\-\-bank\-window\fR \fIname\fR" 4
- .IX Item "--bank-window name"
- This option indicates to the linker the name of the memory region in
- the \fB\s-1MEMORY\s0\fR specification that describes the memory bank window.
- The definition of such region is then used by the linker to compute
- paging and addresses within the memory window.
- .PP
- The following options are supported to control handling of \s-1GOT\s0 generation
- when linking for 68K targets.
- .IP "\fB\-\-got=\fR\fItype\fR" 4
- .IX Item "--got=type"
- This option tells the linker which \s-1GOT\s0 generation scheme to use.
- \&\fItype\fR should be one of \fBsingle\fR, \fBnegative\fR,
- \&\fBmultigot\fR or \fBtarget\fR. For more information refer to the
- Info entry for \fIld\fR.
- .PP
- The following options are supported to control microMIPS instruction
- generation and branch relocation checks for \s-1ISA\s0 mode transitions when
- linking for \s-1MIPS\s0 targets.
- .IP "\fB\-\-insn32\fR" 4
- .IX Item "--insn32"
- .PD 0
- .IP "\fB\-\-no\-insn32\fR" 4
- .IX Item "--no-insn32"
- .PD
- These options control the choice of microMIPS instructions used in code
- generated by the linker, such as that in the \s-1PLT\s0 or lazy binding stubs,
- or in relaxation. If \fB\-\-insn32\fR is used, then the linker only uses
- 32\-bit instruction encodings. By default or if \fB\-\-no\-insn32\fR is
- used, all instruction encodings are used, including 16\-bit ones where
- possible.
- .IP "\fB\-\-ignore\-branch\-isa\fR" 4
- .IX Item "--ignore-branch-isa"
- .PD 0
- .IP "\fB\-\-no\-ignore\-branch\-isa\fR" 4
- .IX Item "--no-ignore-branch-isa"
- .PD
- These options control branch relocation checks for invalid \s-1ISA\s0 mode
- transitions. If \fB\-\-ignore\-branch\-isa\fR is used, then the linker
- accepts any branch relocations and any \s-1ISA\s0 mode transition required
- is lost in relocation calculation, except for some cases of \f(CW\*(C`BAL\*(C'\fR
- instructions which meet relaxation conditions and are converted to
- equivalent \f(CW\*(C`JALX\*(C'\fR instructions as the associated relocation is
- calculated. By default or if \fB\-\-no\-ignore\-branch\-isa\fR is used
- a check is made causing the loss of an \s-1ISA\s0 mode transition to produce
- an error.
- .IP "\fB\-\-compact\-branches\fR" 4
- .IX Item "--compact-branches"
- .PD 0
- .IP "\fB\-\-no\-compact\-branches\fR" 4
- .IX Item "--no-compact-branches"
- .PD
- These options control the generation of compact instructions by the linker
- in the \s-1PLT\s0 entries for \s-1MIPS R6.\s0
- .PP
- For the pdp11\-aout target, three variants of the output format can be
- produced as selected by the following options. The default variant
- for pdp11\-aout is the \fB\-\-omagic\fR option, whereas for other
- targets \fB\-\-nmagic\fR is the default. The \fB\-\-imagic\fR option is
- defined only for the pdp11\-aout target, while the others are described
- here as they apply to the pdp11\-aout target.
- .IP "\fB\-N\fR" 4
- .IX Item "-N"
- .PD 0
- .IP "\fB\-\-omagic\fR" 4
- .IX Item "--omagic"
- .PD
- Mark the output as \f(CW\*(C`OMAGIC\*(C'\fR (0407) in the \fIa.out\fR header to
- indicate that the text segment is not to be write-protected and
- shared. Since the text and data sections are both readable and
- writable, the data section is allocated immediately contiguous after
- the text segment. This is the oldest format for \s-1PDP11\s0 executable
- programs and is the default for \fBld\fR on \s-1PDP11\s0 Unix systems
- from the beginning through 2.11BSD.
- .IP "\fB\-n\fR" 4
- .IX Item "-n"
- .PD 0
- .IP "\fB\-\-nmagic\fR" 4
- .IX Item "--nmagic"
- .PD
- Mark the output as \f(CW\*(C`NMAGIC\*(C'\fR (0410) in the \fIa.out\fR header to
- indicate that when the output file is executed, the text portion will
- be read-only and shareable among all processes executing the same
- file. This involves moving the data areas up to the first possible 8K
- byte page boundary following the end of the text. This option creates
- a \fIpure executable\fR format.
- .IP "\fB\-z\fR" 4
- .IX Item "-z"
- .PD 0
- .IP "\fB\-\-imagic\fR" 4
- .IX Item "--imagic"
- .PD
- Mark the output as \f(CW\*(C`IMAGIC\*(C'\fR (0411) in the \fIa.out\fR header to
- indicate that when the output file is executed, the program text and
- data areas will be loaded into separate address spaces using the split
- instruction and data space feature of the memory management unit in
- larger models of the \s-1PDP11. \s0 This doubles the address space available
- to the program. The text segment is again pure, write-protected, and
- shareable. The only difference in the output format between this
- option and the others, besides the magic number, is that both the text
- and data sections start at location 0. The \fB\-z\fR option selected
- this format in 2.11BSD. This option creates a \fIseparate
- executable\fR format.
- .IP "\fB\-\-no\-omagic\fR" 4
- .IX Item "--no-omagic"
- Equivalent to \fB\-\-nmagic\fR for pdp11\-aout.
- .SH "ENVIRONMENT"
- .IX Header "ENVIRONMENT"
- You can change the behaviour of \fBld\fR with the environment variables
- \&\f(CW\*(C`GNUTARGET\*(C'\fR,
- \&\f(CW\*(C`LDEMULATION\*(C'\fR and \f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR.
- .PP
- \&\f(CW\*(C`GNUTARGET\*(C'\fR determines the input-file object format if you don't
- use \fB\-b\fR (or its synonym \fB\-\-format\fR). Its value should be one
- of the \s-1BFD\s0 names for an input format. If there is no
- \&\f(CW\*(C`GNUTARGET\*(C'\fR in the environment, \fBld\fR uses the natural format
- of the target. If \f(CW\*(C`GNUTARGET\*(C'\fR is set to \f(CW\*(C`default\*(C'\fR then \s-1BFD\s0
- attempts to discover the input format by examining binary input files;
- this method often succeeds, but there are potential ambiguities, since
- there is no method of ensuring that the magic number used to specify
- object-file formats is unique. However, the configuration procedure for
- \&\s-1BFD\s0 on each system places the conventional format for that system first
- in the search-list, so ambiguities are resolved in favor of convention.
- .PP
- \&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the
- \&\fB\-m\fR option. The emulation can affect various aspects of linker
- behaviour, particularly the default linker script. You can list the
- available emulations with the \fB\-\-verbose\fR or \fB\-V\fR options. If
- the \fB\-m\fR option is not used, and the \f(CW\*(C`LDEMULATION\*(C'\fR environment
- variable is not defined, the default emulation depends upon how the
- linker was configured.
- .PP
- Normally, the linker will default to demangling symbols. However, if
- \&\f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR is set in the environment, then it will
- default to not demangling symbols. This environment variable is used in
- a similar fashion by the \f(CW\*(C`gcc\*(C'\fR linker wrapper program. The default
- may be overridden by the \fB\-\-demangle\fR and \fB\-\-no\-demangle\fR
- options.
- .SH "SEE ALSO"
- .IX Header "SEE ALSO"
- \&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjcopy\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1) and
- the Info entries for \fIbinutils\fR and
- \&\fIld\fR.
- .SH "COPYRIGHT"
- .IX Header "COPYRIGHT"
- Copyright (c) 1991\-2020 Free Software Foundation, Inc.
- .PP
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, with no Front-Cover Texts, and with no
- Back-Cover Texts. A copy of the license is included in the
- section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
|