xref: /illumos-gate/usr/src/man/man1/ld.1 (revision 6dde88b51419b99fe0aab8e56184c693945826b8)
1.\"
2.\" The contents of this file are subject to the terms of the
3.\" Common Development and Distribution License (the "License").
4.\" You may not use this file except in compliance with the License.
5.\"
6.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
7.\" or http://www.opensolaris.org/os/licensing.
8.\" See the License for the specific language governing permissions
9.\" and limitations under the License.
10.\"
11.\" When distributing Covered Code, include this CDDL HEADER in each
12.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
13.\" If applicable, add the following below this CDDL HEADER, with the
14.\" fields enclosed by brackets "[]" replaced with your own identifying
15.\" information: Portions Copyright [yyyy] [name of copyright owner]
16.\"
17.\" Copyright 1989 AT&T
18.\" Copyright (c) 2009, Sun Microsystems, Inc. All Rights Reserved
19.\" Copyright 2019 Joyent, Inc.
20.\" Copyright 2023 Oxide Computer Company
21.\" Copyright 2024 OmniOS Community Edition (OmniOSce) Association.
22.\"
23.Dd January 15, 2024
24.Dt LD 1
25.Os
26.Sh NAME
27.Nm ld
28.Nd link-editor for object files
29.Sh SYNOPSIS
30.Nm
31.Op Fl 32 | 64
32.Op Fl a | r
33.Op Fl b
34.Op Fl B Cm direct | Fl B Cm nodirect
35.Op Fl B Cm dynamic | Fl B Cm static
36.Op Fl B Cm eliminate
37.Op Fl B Cm group
38.Op Fl B Cm local
39.Op Fl B Cm reduce
40.Op Fl B Cm symbolic
41.Op Fl c Ar name
42.Op Fl C
43.Op Fl d Cm y | Fl d Cm n
44.Op Fl D Ar token Ns No ,...
45.Op Fl e Ar epsym
46.Op Fl f Ar name | Fl F Ar name
47.Op Fl G
48.Op Fl h Ar name
49.Op Fl i
50.Op Fl I Ar name
51.Op Fl l Ar x
52.Op Fl L Ar path
53.Op Fl m
54.Op Fl M Ar mapfile
55.Op Fl N Ar string
56.Op Fl o Ar outfile
57.Op Fl p Ar auditlib
58.Op Fl P Ar auditlib
59.Op Fl Q Cm y | Fl Q Cm n
60.Op Fl R Ar path
61.Op Fl s
62.Op Fl S Ar supportlib
63.Op Fl t
64.Op Fl u Ar symname
65.Op Fl V
66.Op Fl Y Cm P Ns \&, Ns Ar dirlist
67.Op Fl z Cm absexec
68.Op Fl z Cm allextract | Fl z Cm defaultextract | Fl z Cm weakextract
69.Op Fl z Cm altexec64
70.Op Fl z Cm aslr Ns Op Cm \&= Ns Ar state
71.Op Fl z Cm assert-deflib
72.Op Fl z Cm assert-deflib= Ns Ar libname
73.Op Fl z Cm combreloc | Fl z Cm nocombreloc
74.Op Fl z Cm defs | Fl z Cm nodefs
75.Op Fl z Cm direct | Fl z Cm nodirect
76.Op Fl z Cm endfiltee
77.Op Fl z Cm fatal-warnings | Fl z Cm nofatal-warnings
78.Op Fl z Cm finiarray= Ns Ar function
79.Op Fl z Cm globalaudit
80.Op Fl z Cm groupperm | nogroupperm
81.Op Fl z Cm guidance Ns Op Cm \&= Ns Ar id Ns No \&,...
82.Op Fl z Cm help
83.Op Fl z Cm ignore | Fl z Cm record
84.Op Fl z Cm initarray= Ns Ar function
85.Op Fl z Cm initfirst
86.Op Fl z Cm interpose
87.Op Fl z Cm lazyload | Fl z Cm nolazyload
88.Op Fl z Cm ld32= Ns Ar arg Ns No \&,...
89.Op Fl z Cm ld64= Ns Ar arg Ns No \&,...
90.Op Fl z Cm loadfltr
91.Op Fl z Cm muldefs
92.Op Fl z Cm nocompstrtab
93.Op Fl z Cm nodefaultlib
94.Op Fl z Cm nodelete
95.Op Fl z Cm nodlopen
96.Op Fl z Cm nodump
97.Op Fl z Cm noldynsym
98.Op Fl z Cm nopartial
99.Op Fl z Cm noversion
100.Op Fl z Cm now
101.Op Fl z Cm origin
102.Op Fl z Cm preinitarray= Ns Ar function
103.Op Fl z Cm redlocsym
104.Op Fl z Cm relaxreloc
105.Op Fl z Cm rescan
106.Op Fl z Cm rescan-now
107.Op Fl z Cm rescan-start \&... Fl z Cm rescan-end
108.Op Fl z Cm symbolcap
109.Op Fl z Cm target= Ns Cm sparc Ns | Ns Cm x86
110.Op Fl z Cm text | Fl z Cm textwarn | Fl z Cm textoff
111.Sm off
112.Op Fl z\~ Cm type= Cm exec | kmod | reloc | shared
113.Sm on
114.Op Fl z Cm verbose
115.Op Fl z Cm wrap= Ns Ar symbol
116.Ar filename Ns No \&...
117.Sh DESCRIPTION
118The link-editor,
119.Nm ,
120combines relocatable object files by resolving symbol references to symbol
121definitions, together with performing relocations.
122.Nm
123operates in two modes, static or dynamic, as governed by the
124.Fl d
125option.
126In all cases, the output of
127.Nm
128is left in the file
129.Pa a.out
130by default.
131See
132.Sx NOTES .
133.Pp
134In dynamic mode,
135.Fl d Cm y ,
136the default, relocatable object files that are provided as arguments are
137combined to produce an executable object file.
138This file is linked at execution with any shared object files that are provided
139as arguments.
140If the
141.Fl G
142option is specified, relocatable object files are combined to produce a shared
143object.
144Without the
145.Fl G
146option, a dynamic executable is created.
147.Pp
148In static mode,
149.Fl d Cm n ,
150relocatable object files that are provided as arguments are combined to produce
151a static executable file.
152If the
153.Fl r
154option is specified, relocatable object files are combined to produce one
155relocatable object file.
156See
157.Sx Static Executables .
158.Pp
159Dynamic linking is the most common model for combining relocatable objects, and
160the eventual creation of processes within illumos.
161This environment tightly couples the work of the link-editor and the runtime
162linker,
163.Xr ld.so.1 1 .
164Both of these utilities, together with their related technologies and
165utilities, are extensively documented in the
166.%T Linker and Libraries Guide .
167.Pp
168If any argument is a library,
169.Nm
170by default searches the library exactly once at the point the library is
171encountered on the argument list.
172The library can be either a shared object or relocatable archive.
173See
174.Xr ar.h 3HEAD .
175.Pp
176A shared object consists of an indivisible, whole unit that has been generated
177by a previous link-edit of one or more input files.
178When the link-editor processes a shared object, the entire contents of the
179shared object become a logical part of the resulting output file image.
180The shared object is not physically copied during the link-edit as its actual
181inclusion is deferred until process execution.
182This logical inclusion means that all symbol entries defined in the shared
183object are made available to the link-editing process.
184See Chapter 4,
185.Em Shared Objects ,
186in
187.%T Linker and Libraries Guide .
188.Pp
189For an archive library,
190.Nm
191loads only those routines that define an unresolved external reference.
192.Nm
193searches the symbol table of the archive library sequentially to resolve
194external references that can be satisfied by library members.
195This search is repeated until no external references can be resolved by the
196archive.
197Thus, the order of members in the library is functionally unimportant, unless
198multiple library members exist that define the same external symbol.
199Archive libraries that have interdependencies can require multiple command line
200definitions, or the use of one of the
201.Fl z Cm rescan
202options.
203See
204.Em Archive Processing
205in
206.%T Linker and Libraries Guide .
207.Pp
208.Nm
209is a cross link-editor, able to link 32-bit objects or 64-bit objects, for
210Sparc or x86 targets.
211.Nm
212uses the
213.Sy ELF
214class and machine type of the first relocatable object on the command line to
215govern the mode in which to operate.
216The mixing of 32-bit objects and 64-bit objects is not permitted.
217Similarly, only objects of a single machine type are allowed.
218See the
219.Fl 32 ,
220.Fl 64
221and
222.Fl z Cm target
223options, and the
224.Ev LD_NOEXEC_64
225environment variable.
226.Ss Static Executables
227The creation of static executables is discouraged.
228Since a static executable is built against system archive libraries, the
229executable contains system implementation details.
230This self-containment has a number of drawbacks.
231.Bl -bullet -offset 4n
232.It
233The executable is immune to the benefits of system updates delivered as shared
234objects.
235The executable therefore, must be rebuilt to take advantage of many system
236improvements.
237.It
238The ability of the executable to run on future releases can be compromised.
239.It
240The duplication of system implementation details negatively affects system
241performance.
242.El
243.Pp
244On illumos, system archive libraries
245.Po
246such as
247.Pa libc.a
248.Pc
249have never been provided.
250Without these libraries, the creation of static executables is not achievable
251without specialized system knowledge.
252However, the capability of
253.Nm
254to process static linking options, and the processing of archive libraries,
255remains.
256.Sh OPTIONS
257The following options are supported.
258.Pp
259.Bl -tag -width 4n -compact
260.It Fl 32 | 64
261Creates a 32-bit, or 64-bit object.
262.Pp
263By default, the class of the object being generated is determined from the
264first
265.Sy ELF
266object processed from the command line.
267If no objects are specified, the class is determined by the first object
268encountered within the first archive processed from the command line.
269If there are no objects or archives, the link-editor creates a 32-bit object.
270.Pp
271The
272.Fl 64
273option is required to create a 64-bit object solely from a mapfile.
274.Pp
275The
276.Fl 32
277or
278.Fl 64
279options can also be used in the rare case of linking entirely from an archive
280that contains a mixture of 32 and 64-bit objects.
281If the first object in the archive is not the class of the object that is
282required to be created, then the
283.Fl 32
284or
285.Fl 64
286option can be used to direct the link-editor.
287See
288.Em The 32-bit link-editor and 64-bit link-editor
289in
290.%T Linker and Libraries Guide .
291.Pp
292Note that for compatibility with existing Makefiles and scripts, these options
293may be given multiple times and may be mixed in the same invocation: the last
294instance wins, so that, for example,
295.Ql ld -64 -32 -64 \&...
296gives 64-bit output.
297.Pp
298.It Fl a
299In static mode only, produces an executable object file.
300Undefined references are not permitted.
301This option is the default behavior for static mode.
302The
303.Fl a
304option can not be used with the
305.Fl r
306option.
307See
308.Sx Static Executables
309.Pp
310.It Fl b
311In dynamic mode only, provides no special processing for dynamic executable
312relocations that reference symbols in shared objects.
313Without the
314.Fl b
315option, the link-editor applies techniques within a dynamic executable so that
316the text segment can remain read-only.
317One technique is the creation of special position-independent relocations for
318references to functions that are defined in shared objects.
319Another technique arranges for data objects that are defined in shared objects
320to be copied into the memory image of an executable at runtime.
321.Pp
322The
323.Fl b
324option is intended for specialized dynamic objects and is not recommended for
325general use.
326Its use suppresses all specialized processing required to ensure an object's
327shareability, and can even prevent the relocation of 64-bit executables.
328.Pp
329.It Fl B Cm direct | Fl B Cm nodirect
330These options govern direct binding.
331.Fl B Cm direct
332establishes direct binding information by recording the relationship between
333each symbol reference together with the dependency that provides the
334definition.
335In addition, direct binding information is established between each symbol
336reference and an associated definition within the object being created.
337The runtime linker uses this information to search directly for a symbol in the
338associated object rather than to carry out a default symbol search.
339.Pp
340Direct binding information can only be established to dependencies specified
341with the link-edit.
342Thus, you should use the
343.Fl z Cm defs
344option.
345Objects that wish to interpose on symbols in a direct binding environment
346should identify themselves as interposers with the
347.Fl z Cm interpose
348option.
349The use of
350.Fl B Cm direct
351enables
352.Fl z Cm lazyload
353for all dependencies.
354.Pp
355The
356.Fl B Cm nodirect
357option prevents any direct binding to the interfaces offered by the object
358being created.
359The object being created can continue to directly bind to external interfaces
360by specifying the
361.Fl z Cm direct
362option.
363See Appendix D,
364.Em Direct Bindings ,
365in
366.%T Linker and Libraries Guide .
367.Pp
368.It Fl B Cm dynamic | Fl B Cm static
369Options governing library inclusion.
370.Fl B Cm dynamic
371is valid in dynamic mode only.
372These options can be specified any number of times on the command line as
373toggles: if the
374.Fl B Cm static
375option is given, no shared objects are accepted until
376.Fl B Cm dynamic
377is seen.
378See the
379.Fl l
380option.
381.Pp
382.It Fl B Cm eliminate
383Causes any global symbols, not assigned to a version definition, to be
384eliminated from the symbol table.
385Version definitions can be supplied by means of a
386.Sy mapfile
387to indicate the global symbols that should remain visible in the generated
388object.
389This option achieves the same symbol elimination as the
390.Em auto-elimination
391directive that is available as part of a mapfile version definition.
392This option can be useful when combining versioned and non-versioned
393relocatable objects.
394See also the
395.Fl B Cm local
396and
397.Fl B Cm reduce
398options.
399See
400.Em Defining Additional Symbols with a mapfile
401in
402.%T Linker and Libraries Guide .
403.Pp
404.It Fl B Cm group
405Establishes a shared object and its dependencies as a group.
406Objects within the group are bound to other members of the group at runtime.
407This mode is similar to adding the object to the process by using
408.Xr dlopen 3C
409with the
410.Dv RTLD_GROUP
411mode.
412An object that has an explicit dependency on a object identified as a group,
413becomes a member of the group.
414.Pp
415As the group must be self contained, use of the
416.Fl B Cm group
417option also asserts the
418.Fl z Cm defs
419option.
420.Pp
421.It Fl B Cm local
422Causes any global symbols, not assigned to a version definition, to be reduced
423to local.
424Version definitions can be supplied by means of a
425.Sy mapfile
426to indicate the global symbols that should remain visible in the generated
427object.
428This option achieves the same symbol reduction as the
429.Ar auto-reduction
430directive that is available as part of a mapfile version definition.
431This option can be useful when combining versioned and non-versioned
432relocatable objects.
433See also the
434.Fl B Cm eliminate
435and
436.Fl B Cm reduce
437options.
438See
439.Em Defining Additional Symbols with a mapfile
440in
441.%T Linker and Libraries Guide .
442.Pp
443.It Fl B Cm reduce
444When generating a relocatable object, causes the reduction of symbolic
445information defined by any version definitions.
446Version definitions can be supplied by means of a
447.Sy mapfile
448to indicate the global symbols that should remain visible in the generated
449object.
450By default, when a relocatable object is generated, version definitions are
451only recorded in the output image.
452The actual reduction of symbolic information is carried out when the object is
453used in the construction of a dynamic executable or shared object.
454The
455.Fl B Cm reduce
456option is applied automatically when a dynamic executable or shared object is
457created.
458.Pp
459.It Fl B Cm symbolic
460In dynamic mode only.
461When building a shared object, binds references to global symbols to their
462definitions, if available, within the object.
463Normally, references to global symbols within shared objects are not bound
464until runtime, even if definitions are available.
465This model allows definitions of the same symbol in an executable or other
466shared object to override the object's own definition.
467.Nm
468issues warnings for undefined symbols unless
469.Fl z Cm defs
470overrides.
471.Pp
472The
473.Fl B Cm symbolic
474option is intended for specialized dynamic objects and is not recommended for
475general use.
476To reduce the runtime relocation processing that is required an object, the
477creation of a version definition is recommended.
478.Fl c Ar name
479records the configuration file
480.Ar name
481for use at runtime.
482Configuration files can be employed to alter default search paths, provide a
483directory cache, together with providing alternative object dependencies.
484See
485.Xr crle 1 .
486.Pp
487.It Fl C
488Demangles C++ symbol names displayed in diagnostic messages.
489.Pp
490.It Fl d Cm y | Fl d Cm n
491When
492.Fl d Cm y ,
493the default, is specified,
494.Nm
495uses dynamic linking.
496When
497.Fl d Cm n
498is specified,
499.Nm
500uses static linking.
501See
502.Sx Static Executables
503and
504.Fl B Cm dynamic | Fl B Cm static .
505.Pp
506.It Fl D Ar token Ns \&,...
507Prints debugging information as specified by each
508.Ar token
509to the standard error.
510The special token
511.Cm help
512indicates the full list of tokens available.
513See
514.Em Debugging Aids
515in
516.%T Linker and Libraries Guide .
517.Pp
518.It Fl e Ar epsym
519.It Fl \&-entry Ar epsym
520Sets the entry point address for the output file to be the symbol
521.Ar epsym .
522.Pp
523.It Fl f Ar name
524.It Fl \&-auxiliary Ar name
525Useful only when building a shared object.
526Specifies that the symbol table of the shared object is used as an auxiliary
527filter on the symbol table of the shared object specified by
528.Ar name .
529Multiple instances of this option are allowed.
530This option can not be combined with the
531.Fl F
532option.
533See
534.Em Generating Auxiliary Filters
535in
536.%T Linker and Libraries Guide .
537.Pp
538.It Fl F Ar name
539.It Fl \&-filter Ar name
540Useful only when building a shared object.
541Specifies that the symbol table of the shared object is used as a filter on the
542symbol table of the shared object specified by
543.Ar name .
544Multiple instances of this option are allowed.
545This option cannot be combined with the
546.Fl f
547option.
548See
549.Em Generating Standard Filters
550in
551.%T Linker and Libraries Guide .
552.Pp
553.It Fl G
554.It Fl shared
555In dynamic mode only, produces a shared object.
556Undefined symbols are allowed.
557See Chapter 4,
558.Em Shared Objects ,
559in
560.%T Linker and Libraries Guide .
561.Pp
562.It Fl h Ar name
563.It Fl soname Ar name
564In dynamic mode only, when building a shared object, records
565.Ar name
566in the object's dynamic section.
567.Ar name
568is recorded in any dynamic objects that are linked with this object rather than
569the object's file system name.
570Accordingly,
571.Ar name
572is used by the runtime linker as the name of the shared object to search for at
573runtime.
574See
575.Em Recording a Shared Object Name
576in
577.%T Linker and Libraries Guide .
578.Pp
579.It Fl i
580Ignores
581.Ev LD_LIBRARY_PATH .
582This option is useful when an
583.Ev LD_LIBRARY_PATH
584setting is in effect to influence the runtime library search, which would
585interfere with the link-editing being performed.
586.Pp
587.It Fl I Ar name
588.It Fl \&-dynamic-linker Ar name
589When building an executable, uses
590.Ar name
591as the path name of the interpreter to be written into the program header.
592The default in static mode is no interpreter.
593In dynamic mode, the default is the name of the runtime linker,
594.Xr ld.so.1 1 .
595Either case can be overridden by
596.Fl I Ar name .
597.Xr exec 2
598loads this interpreter when the
599.Pa a.out
600is loaded, and passes control to the interpreter rather than to the
601.Pa a.out
602directly.
603.Pp
604.It Fl l Ar x
605.It Fl \&-library Ar x
606Searches a library
607.Sy lib Ns Ar x Ns Sy .so
608or
609.Sy lib Ns Ar x Ns Sy .a ,
610the conventional names for shared object and archive libraries, respectively.
611In dynamic mode, unless the
612.Fl B Cm static
613option is in effect,
614.Nm
615searches each directory specified in the library search path for a
616.Sy lib Ns Ar x Ns Sy .so
617or
618.Sy lib Ns Ar x Ns Sy \&.a .
619The directory search stops at the first directory containing either.
620.Nm
621chooses the file ending in
622.Sy .so
623if
624.Fl l Ar x
625expands to two files with names of the form
626.Sy lib Ns Ar x Ns Sy .so
627and
628.Sy lib Ns Ar x Ns Sy .a .
629If no
630.Sy lib Ns Ar x Ns Sy .so
631is found, then
632.Nm
633accepts
634.Sy lib Ns Ar x Ns Sy .a .
635In static mode, or when the
636.Fl B Cm static
637option is in effect,
638.Nm
639selects only the file ending in
640.Sy .a .
641.Nm
642searches a library when the library is encountered, so the placement of
643.Fl l
644is significant.
645See
646.Em Linking With Additional Libraries
647in
648.%T Linker and Libraries Guide .
649.Pp
650.It Fl L Ar path
651.It Fl \&-library-path Ar path
652Adds
653.Ar path
654to the library search directories.
655.Nm
656searches for libraries first in any directories specified by the
657.Fl L
658options and then in the standard directories.
659This option is useful only if the option precedes the
660.Fl l
661options to which the
662.Fl L
663option applies.
664See
665.Em Directories Searched by the Link-Editor
666in
667.%T Linker and Libraries Guide .
668.Pp
669The environment variable
670.Ev LD_LIBRARY_PATH
671can be used to supplement the library search path, however the
672.Fl L
673option is recommended, as the environment variable is also interpreted by the
674runtime environment.
675See
676.Ev LD_LIBRARY_PATH
677under
678.Sx ENVIRONMENT .
679.Pp
680.It Fl m
681Produces a memory map or listing of the input/output sections, together with
682any non-fatal multiply-defined symbols, on the standard output.
683.Pp
684.It Fl M Ar mapfile
685Reads
686.Ar mapfile
687as a text file of directives to
688.Nm .
689This option can be specified multiple times.
690If
691.Ar mapfile
692is a directory, then all regular files, as defined by
693.Xr stat 2 ,
694within the directory are processed.
695See Chapter 9,
696.Em Mapfile Option ,
697in
698.%T Linker and Libraries Guide .
699Example mapfiles are provided in
700.Pa /usr/lib/ld .
701See
702.Sx FILES .
703.Pp
704.It Fl N Ar string
705This option causes a
706.Dv DT_NEEDED
707entry to be added to the
708.Sy .dynamic
709section of the object being built.
710The value of the
711.Dv DT_NEEDED
712string is the
713.Ar string
714that is specified on the command line.
715This option is position dependent, and the
716.Dv DT_NEEDED
717.Sy .dynamic
718entry is relative to the other dynamic dependencies discovered on the link-edit
719line.
720This option is useful for specifying dependencies within device driver
721relocatable objects when combined with the
722.Fl d Cm y
723and
724.Fl r
725options.
726.Pp
727.It Fl o Ar outfile
728.It Fl \&-output Ar outfile
729Produces an output object file that is named
730.Ar outfile .
731The name of the default object file is
732.Pa a.out .
733.Pp
734.It Fl p Ar auditlib
735Identifies an audit library,
736.Ar auditlib .
737This audit library is used to audit the object being created at runtime.
738A shared object identified as requiring auditing with the
739.Fl p
740option, has this requirement inherited by any object that specifies the shared
741object as a dependency.
742See the
743.Fl P
744option.
745See
746.Em Runtime Linker Auditing Interface
747in
748.%T Linker and Libraries Guide .
749.Pp
750.It Fl P Ar auditlib
751Identifies an audit library,
752.Ar auditlib .
753This audit library is used to audit the dependencies of the object being
754created at runtime.
755Dependency auditing can also be inherited from dependencies that are identified
756as requiring auditing.
757See the
758.Fl p
759and
760.Fl z Cm globalaudit
761options.
762See
763.Em Runtime Linker Auditing Interface
764in
765.%T Linker and Libraries Guide .
766.Pp
767.It Fl Q Cm y | Fl Q Cm n
768Under
769.Fl Q Cm y ,
770an
771.Sy ident
772string is added to the
773.Sy .comment
774section of the output file.
775This string identifies the version of the
776.Nm
777used to create the file.
778This results in multiple
779.Nm
780idents when there have been multiple linking steps, such as when using
781.Nm Fl r .
782This identification is identical with the default action of the
783.Xr cc 1
784command.
785.Fl Q Cm n
786suppresses version identification.
787.Sy .comment
788sections can be manipulated by the
789.Xr mcs 1
790utility.
791.Pp
792.It Fl r
793.It Fl \&-relocatable
794Combines relocatable object files to produce one relocatable object file.
795.Nm
796does not complain about unresolved references.
797This option cannot be used with the
798.Fl a
799option.
800.Pp
801.It Fl R Ar path
802.It Fl rpath Ar path
803A colon-separated list of directories used to specify library search
804directories to the runtime linker.
805If present and not NULL, the path is recorded in the output object file and
806passed to the runtime linker.
807Multiple instances of this option are concatenated together with each
808.Ar path
809separated by a colon.
810See
811.Em Directories Searched by the Runtime Linker
812in
813.%T Linker and Libraries Guide .
814.Pp
815The use of a runpath within an associated object is preferable to setting
816global search paths such as through the
817.Ev LD_LIBRARY_PATH
818environment variable.
819Only the runpaths that are necessary to find the objects dependencies should be
820recorded.
821.Xr ldd 1
822can also be used to discover unused runpaths in dynamic objects, when used with
823the
824.Fl U
825option.
826.Pp
827Various tokens can also be supplied with a runpath that provide a flexible
828means of identifying system capabilities or an objects location.
829See Appendix C,
830.Em Establishing Dependencies with Dynamic String Tokens ,
831in
832.%T Linker and Libraries Guide .
833The
834.Sy $ORIGIN
835token is especially useful in allowing dynamic objects to be relocated to
836different locations in the file system.
837.Pp
838.It Fl s
839.It Fl \&-strip-all
840Strips symbolic information from the output file.
841Any debugging information,
842that is,
843.Sy .line ,
844.Sy .debug* ,
845and
846.Sy .stab*
847sections, and their associated relocation entries are removed.
848Except for relocatable files, a symbol table
849.Dv SHT_SYMTAB
850and its associated string table section are not created in the output object
851file.
852The elimination of a
853.Dv SHT_SYMTAB
854symbol table can reduce the .stab* debugging information that is generated
855using the compiler driver's
856.Fl g
857option.
858See the
859.Fl z Cm redlocsym
860and
861.Fl z Cm noldynsym
862options.
863.Pp
864.It Fl S Ar supportlib
865The shared object
866.Ar supportlib
867is loaded with
868.Nm
869and given information regarding the linking process.
870Shared objects that are defined by using the
871.Fl S
872option can also be supplied using the
873.Ev SGS_SUPPORT
874environment variable.
875See
876.Em Link-Editor Support Interface
877in
878.%T Linker and Libraries Guide .
879.Pp
880.It Fl t
881Turns off the warning for multiply-defined symbols that have different sizes or
882different alignments.
883.Pp
884.It Fl u Ar symname
885.It Fl \&-undefined Ar symname
886Enters
887.Ar symname
888as an undefined symbol in the symbol table.
889This option is useful for loading entirely from an archive library.
890In this instance, an unresolved reference is needed to force the loading of the
891first routine.
892The placement of this option on the command line is significant.
893This option must be placed before the library that defines the symbol.
894See
895.Em Defining Additional Symbols with the u option
896in
897.%T Linker and Libraries Guide .
898.Pp
899.It Fl V
900.It Fl \&-version
901Outputs a message giving information about the version of
902.Nm
903being used.
904.Pp
905.It Fl Y Cm P\&, Ns Ar dirlist
906Changes the default directories used for finding libraries.
907.Ar dirlist
908is a colon-separated path list.
909.Pp
910.It Fl z Cm absexec
911Useful only when building a dynamic executable.
912Specifies that references to external absolute symbols should be resolved
913immediately instead of being left for resolution at runtime.
914In very specialized circumstances, this option removes text relocations that
915can result in excessive swap space demands by an executable.
916.Pp
917.It Fl z Cm allextract | Fl z Cm defaultextract | Fl z Cm weakextract
918.It Fl \&-whole-archive | \&-no-whole-archive
919Alters the extraction criteria of objects from any archives that follow.
920By default, archive members are extracted to satisfy undefined references and
921to promote tentative definitions with data definitions.
922Weak symbol references do not trigger extraction.
923Under the
924.Fl z Cm allextract
925or
926.Fl \&-whole-archive
927options, all archive members are extracted from the archive.
928Under
929.Fl z Cm weakextract ,
930weak references trigger archive extraction.
931The
932.Fl z Cm defaultextract
933or
934.Fl \&-no-whole-archive
935options provide a means of returning to the default following use of the former
936extract options.
937See
938.Em Archive Processing
939in
940.%T Linker and Libraries Guide .
941.Pp
942.It Fl z Cm altexec64
943Execute the 64-bit
944.Nm .
945The creation of very large 32-bit objects can exhaust the virtual memory that
946is available to the 32-bit
947.Nm .
948The
949.Fl z Cm altexec64
950option can be used to force the use of the associated 64-bit
951.Nm .
952The 64-bit
953.Nm
954provides a larger virtual address space for building 32-bit objects.
955See
956.Em The 32-bit link-editor and 64-bit link-editor
957in
958.%T Linker and Libraries Guide .
959.Pp
960.It Fl z Cm aslr Ns Op Cm \&= Ns Ar state
961Specify whether the executable's address space should be randomized on
962execution.
963If
964.Ar state
965is
966.Cm enabled ,
967randomization will always occur when this executable is run
968.Pq regardless of inherited settings .
969If
970.Ar state
971is
972.Cm disabled ,
973randomization will never occur when this executable is run.
974If
975.Ar state
976is omitted, ASLR is enabled.
977An executable that should simply use the settings inherited from its
978environment should not use this flag at all.
979.Pp
980.It Fl z Cm combreloc | Fl z Cm nocombreloc
981By default,
982.Nm
983combines multiple relocation sections when building executables or shared
984objects.
985This section combination differs from relocatable objects, in which relocation
986sections are maintained in a one-to-one relationship with the sections to which
987the relocations must be applied.
988The
989.Fl z Cm nocombreloc
990option disables this merging of relocation sections, and preserves the
991one-to-one relationship found in the original relocatable objects.
992.Pp
993.Nm
994sorts the entries of data relocation sections by their symbol reference.
995This sorting reduces runtime symbol lookup.
996When multiple relocation sections are combined, this sorting produces the least
997possible relocation overhead when objects are loaded into memory, and speeds
998the runtime loading of dynamic objects.
999.Pp
1000Historically, the individual relocation sections were carried over to any
1001executable or shared object, and the
1002.Fl z Cm combreloc
1003option was required to enable the relocation section merging previously
1004described.
1005Relocation section merging is now the default.
1006The
1007.Fl z Cm combreloc
1008option is still accepted for the benefit of old build environments, but the
1009option is unnecessary, and has no effect.
1010.Pp
1011.It Fl z Cm assert-deflib
1012.It Fl z Cm assert-deflib= Ns Ar libname
1013Enables warnings that check the location of where libraries passed in with
1014.Fl l
1015are found.
1016If the link-editor finds a library on its default search path it will emit a
1017warning.
1018This warning can be made fatal in conjunction with the option
1019.Fl z Cm fatal-warnings .
1020Passing
1021.Ar libname
1022white lists a library from this check.
1023The library must be the full name of the library, e.g.
1024.Pa libc.so .
1025To white list multiple libraries, the
1026.Fl z Cm assert-deflib= Ns Ar libname
1027option can be repeated multiple times.
1028This option is useful when trying to build self-contained objects where a
1029referenced library might exist in the default system library path and in
1030alternate paths specified by
1031.Fl L ,
1032but you only want the alternate paths to be used.
1033.Pp
1034.It Fl z Cm defs | Fl z Cm nodefs
1035.It Fl \&-no-undefined
1036The
1037.Fl z Cm defs
1038option and the
1039.Fl \&-no-undefined
1040option force a fatal error if any undefined symbols remain at the end of the
1041link.
1042This mode is the default when an executable is built.
1043For historic reasons, this mode is
1044.Em not
1045the default when building a shared object.
1046Use of the
1047.Fl z Cm defs
1048option is recommended, as this mode assures the object being built is
1049self-contained.
1050A self-contained object has all symbolic references resolved internally, or to
1051the object's immediate dependencies.
1052.Pp
1053The
1054.Fl z Cm nodefs
1055option allows undefined symbols.
1056For historic reasons, this mode is the default when a shared object is built.
1057When used with executables, the behavior of references to such undefined
1058symbols is unspecified.
1059Use of the
1060.Fl z Cm nodefs
1061option is not recommended.
1062.Pp
1063.It Fl z Cm direct | Fl z Cm nodirect
1064Enables or disables direct binding to any dependencies that follow on the
1065command line.
1066These options allow finer control over direct binding than the global
1067counterpart
1068.Fl B Cm direct .
1069The
1070.Fl z Cm direct
1071option also differs from the
1072.Fl B Cm direct
1073option in the following areas.
1074Direct binding information is not established between a symbol reference and an
1075associated definition within the object being created.
1076Lazy loading is not enabled.
1077.Pp
1078.It Fl z Cm endfiltee
1079Marks a filtee so that when processed by a filter, the filtee terminates any
1080further filtee searches by the filter.
1081See
1082.Em Reducing Filtee Searches
1083in
1084.%T Linker and Libraries Guide .
1085.Pp
1086.It Fl z Cm fatal-warnings | Fl z Cm nofatal-warnings
1087.It Fl \&-fatal-warnings | \&-no-fatal-warnings
1088Controls the behavior of warnings emitted from the link-editor.
1089Setting
1090.Fl z Cm fatal-warnings
1091promotes warnings emitted by the link-editor to fatal errors that will cause
1092the link-editor to fail before linking.
1093.Fl z Cm nofatal-warnings
1094instead demotes these warnings such that they will not cause the link-editor to
1095exit prematurely.
1096.Pp
1097.It Fl z Cm finiarray= Ns Ar function
1098Appends an entry to the
1099.Sy .fini_array
1100section of the object being built.
1101If no
1102.Sy .fini_array
1103section is present, a section is created.
1104The new entry is initialized to point to
1105.Ar function .
1106See
1107.Em Initialization and Termination Sections
1108in
1109.%T Linker and Libraries Guide .
1110.Pp
1111.It Fl z Cm globalaudit
1112This option supplements an audit library definition that has been recorded with
1113the
1114.Fl P
1115option.
1116This option is only meaningful when building a dynamic executable.
1117Audit libraries that are defined within an object with the
1118.Fl P
1119option typically allow for the auditing of the immediate dependencies of the
1120object.
1121The
1122.Fl z Cm globalaudit
1123promotes the auditor to a global auditor, thus allowing the auditing of all
1124dependencies.
1125See
1126.Em Invoking the Auditing Interface
1127in
1128.%T Linker and Libraries Guide .
1129.Pp
1130An auditor established with the
1131.Fl P
1132option and the
1133.Fl z Cm globalaudit
1134option, is equivalent to the auditor being established with the
1135.Ev LD_AUDIT
1136environment variable.
1137See
1138.Xr ld.so.1 1 .
1139.Pp
1140.It Fl z Cm groupperm | Fl z Cm nogroupperm
1141Assigns, or deassigns each dependency that follows to a unique group.
1142The assignment of a dependency to a group has the same effect as if the
1143dependency had been built using the
1144.Fl B Cm group
1145option.
1146.Pp
1147.It Fl z Cm guidance Ns Op Cm \&= Ns Ar id Ns No ,...
1148Give messages suggesting link-editor features that could improve the resulting
1149dynamic object.
1150Specific classes of suggestion can be silenced by specifying an optional comma
1151separated list of guidance identifiers.
1152The current classes of suggestion provided are:
1153.Bl -tag -width 4n
1154.It Enable use of direct binding
1155Suggests that
1156.Fl z Cm direct
1157or
1158.Fl B Cm direct
1159be present prior to any specified dependency.
1160This allows predictable symbol binding at runtime.
1161Can be disabled with
1162.Fl z Cm guidance=nodirect
1163.It Enable lazy dependency loading
1164Suggests that
1165.Fl z Cm lazyload
1166be present prior to any specified dependency.
1167This allows the dynamic object to be loaded more quickly.
1168Can be disabled with
1169.Fl z Cm guidance=nolazyload
1170.It Shared objects should define all their dependencies.
1171Suggests that
1172.Fl z Cm defs
1173be specified on the link-editor command line.
1174Shared objects that explicitly state all their dependencies behave more
1175predictably when used.
1176Can be be disabled with
1177.Fl z Cm guidance=nodefs
1178.It Version 2 mapfile syntax
1179Suggests that any specified mapfiles use the more readable version 2 syntax.
1180Can be disabled with
1181.Fl z Cm guidance=nomapfile
1182.It Read-only text segment
1183Should any runtime relocations within the text segment exist, suggests that
1184the object be compiled with position independent code
1185.Pq PIC .
1186Keeping large allocatable sections read-only allows them to be shared between
1187processes using a given shared object.
1188Can be disabled with
1189.Fl z Cm guidance=notext
1190.It No unused dependencies
1191Suggests that any dependency not referenced by the resulting dynamic object be
1192removed from the link-editor command line.
1193Can be disabled with
1194.Fl z Cm guidance=nounused
1195.It Global data in shared libraries built with mapfiles have size assertions
1196Suggests that any global data in a library built with a mapfile asserts the
1197size of that global data for ABI stability purposes.
1198Can be disabled with
1199.Fl z Cm guidance=noasserts
1200.El
1201.Pp
1202.It Fl z Cm help
1203.It Fl \&-help
1204Print a summary of the command line options on the standard output and exit.
1205.Pp
1206.It Fl z Cm ignore | Fl z Cm record
1207Ignores, or records, dynamic dependencies that are not referenced as part of
1208the link-edit.
1209Ignores, or records, unreferenced
1210.Sy ELF
1211sections from the relocatable objects
1212that are read as part of the link-edit.
1213By default,
1214.Fl z Cm record
1215is in effect.
1216.Pp
1217If an
1218.Sy ELF
1219section is ignored, the section is eliminated from the output file being
1220generated.
1221A section is ignored when three conditions are true.
1222The eliminated section must contribute to an allocatable segment.
1223The eliminated section must provide no global symbols.
1224No other section from any object that contributes to the link-edit, must
1225reference an eliminated section.
1226.Pp
1227.It Fl z Cm initarray= Ns Ar function
1228Appends an entry to the
1229.Sy .init_array
1230section of the object being built.
1231If no
1232.Sy .init_array
1233section is present, a section is created.
1234The new entry is initialized to point to
1235.Ar function .
1236See
1237.Em Initialization and Termination Sections
1238in
1239.%T Linker and Libraries Guide .
1240.Pp
1241.It Fl z Cm initfirst
1242Marks the object so that its runtime initialization occurs before the runtime
1243initialization of any other objects brought into the process at the same time.
1244In addition, the object runtime finalization occurs after the runtime
1245finalization of any other objects removed from the process at the same time.
1246This option is only meaningful when building a shared object.
1247.Pp
1248.It Fl z Cm interpose
1249Marks the object as an interposer.
1250At runtime, an object is identified as an explicit interposer if the object has
1251been tagged using the
1252.Fl z Cm interpose
1253option.
1254An explicit interposer is also established when an object is loaded using the
1255.Ev LD_PRELOAD
1256environment variable.
1257Implicit interposition can occur because of the load order of objects, however,
1258this implicit interposition is unknown to the runtime linker.
1259Explicit interposition can ensure that interposition takes place regardless of
1260the order in which objects are loaded.
1261Explicit interposition also ensures that the runtime linker searches for
1262symbols in any explicit interposers when direct bindings are in effect.
1263.Pp
1264.It Fl z Cm lazyload | Fl z Cm nolazyload
1265Enables or disables the marking of dynamic dependencies to be lazily loaded.
1266Dynamic dependencies which are marked
1267Cm lazyload
1268are not loaded at initial process start-up.
1269These dependencies are delayed until the first binding to the object is made.
1270Note: Lazy loading requires the correct declaration of dependencies, together
1271with associated runpaths for each dynamic object used within a process.
1272See
1273.Em Lazy Loading of Dynamic Dependencies
1274in
1275.%T Linker and Libraries Guide .
1276.Pp
1277.It Fl z Cm ld32= Ns Ar arg Ns No ,...
1278.It Fl z Cm ld64= Ns Ar arg Ns No ,...
1279The class of the link-editor is affected by the class of the output file being
1280created and by the capabilities of the underlying operating system.
1281The
1282.Fl z Cm ld32 | Fl z Cm ld64
1283options provide a means of defining any link-editor argument.
1284The defined argument is only interpreted, respectively, by the 32-bit class or
128564-bit class of the link-editor.
1286.Pp
1287For example, support libraries are class specific, so the correct class of
1288support library can be ensured using:
1289.Pp
1290.Dl ld ... -z ld32=-Saudit32.so.1 -z ld64=-Saudit64.so.1 ...
1291.Pp
1292The class of link-editor that is invoked is determined from the
1293.Sy ELF
1294class of the first relocatable file that is seen on the command line.
1295This determination is carried out
1296.Em prior
1297to any
1298.Fl z Cm ld32 | Fl z Cm ld64
1299processing.
1300.Pp
1301.It Fl z Cm loadfltr
1302Marks a filter to indicate that filtees must be processed immediately at
1303runtime.
1304Normally, filter processing is delayed until a symbol reference is bound to the
1305filter.
1306The runtime processing of an object that contains this flag mimics that which
1307occurs if the
1308.Ev LD_LOADFLTR
1309environment variable is in effect.
1310See the
1311.Xr ld.so.1 1 .
1312.Pp
1313.It Fl z Cm muldefs
1314.It Fl \&-allow-multiple-definition
1315Allows multiple symbol definitions.
1316By default, multiple symbol definitions that occur between relocatable objects
1317result in a fatal error condition.
1318This option, suppresses the error condition, allowing the first symbol
1319definition to be taken.
1320.Pp
1321.It Fl z Cm nocompstrtab
1322Disables the compression of
1323.Sy ELF
1324string tables.
1325By default, string compression is applied to
1326.Dv SHT_STRTAB
1327sections, and to
1328.Dv SHT_PROGBITS
1329sections that have their
1330.Dv SHF_MERGE
1331and
1332.Dv SHF_STRINGS
1333section flags set.
1334.Pp
1335.It Fl z Cm nodefaultlib
1336Marks the object so that the runtime default library search path, used after
1337any
1338.Ev LD_LIBRARY_PATH
1339or runpaths, is ignored.
1340This option implies that all dependencies of the object can be satisfied from
1341its runpath.
1342.Pp
1343.It Fl z Cm nodelete
1344Marks the object as non-deletable at runtime.
1345This mode is similar to adding the object to the process by using
1346.Xr dlopen 3C
1347with the
1348.Dv RTLD_NODELETE
1349mode.
1350.Pp
1351.It Fl z Cm nodlopen
1352Marks the object as not available to
1353.Xr dlopen 3C ,
1354either as the object specified by the
1355.Xr dlopen 3C ,
1356or as any form of dependency required by the object specified by the
1357.Xr dlopen 3C .
1358This option is only meaningful when building a shared object.
1359.Pp
1360.It Fl z Cm nodump
1361Marks the object as not available to
1362.Xr dldump 3C .
1363.Pp
1364.It Fl z Cm noldynsym
1365Prevents the inclusion of a
1366.Sy .SUNW_ldynsym
1367section in dynamic executables or sharable libraries.
1368The
1369.Sy .SUNW_ldynsym
1370section augments the
1371.Sy .dynsym
1372section by providing symbols for local functions.
1373Local function symbols allow debuggers to display local function names in stack
1374traces from stripped programs.
1375Similarly,
1376.Xr dladdr 3C
1377is able to supply more accurate results.
1378.Pp
1379The
1380.Fl z Cm noldynsym
1381option also prevents the inclusion of the two symbol sort sections that are
1382related to the
1383.Sy .SUNW_ldynsym
1384section.
1385The
1386.Sy .SUNW_dynsymsort
1387section provides sorted access to regular function and variable symbols.
1388The
1389.Sy .SUNW_dyntlssort
1390section provides sorted access to thread local storage
1391.Pq TLS
1392variable symbols.
1393.Pp
1394The
1395.Sy .SUNW_ldynsym ,
1396.Sy .SUNW_dynsymsort ,
1397and
1398.Sy .SUNW_dyntlssort
1399sections, which becomes part of the allocable text segment of the resulting
1400file, cannot be removed by
1401.Xr strip 1 .
1402Therefore, the
1403.Fl z Cm noldynsym
1404option is the only way to prevent their inclusion.
1405See the
1406.Fl s
1407and
1408.Fl z Cm redlocsym
1409options.
1410.Pp
1411.It Fl z Cm nopartial
1412Partially initialized symbols, that are defined within relocatable object
1413files, are expanded in the output file being generated.
1414.Pp
1415.It Fl z Cm noversion
1416Does not record any versioning sections.
1417Any version sections or associated
1418.Sy .dynamic
1419section entries are not generated in the output image.
1420.Pp
1421.It Fl z Cm now
1422Marks the object as requiring non-lazy runtime binding.
1423This mode is similar to adding the object to the process by using
1424.Xr dlopen 3C
1425with the
1426.Dv RTLD_NOW
1427mode.
1428This mode is also similar to having the
1429.Ev LD_BIND_NOW
1430environment variable in effect.
1431See
1432.Xr ld.so.1 1 .
1433.Pp
1434.It Fl z Cm origin
1435Marks the object as requiring immediate
1436.Sy $ORIGIN
1437processing at runtime.
1438This option is only maintained for historic compatibility, as the runtime
1439analysis of objects to provide for
1440.Sy $ORIGIN
1441processing is now default.
1442.Pp
1443.It Fl z Cm preinitarray= Ns Ar function
1444Appends an entry to the
1445.Sy .preinitarray
1446section of the object being built.
1447If no
1448.Sy .preinitarray
1449section is present, a section is created.
1450The new entry is initialized to point to
1451.Ar function .
1452See
1453.Em Initialization and Termination Sections
1454in
1455.%T Linker and Libraries Guide .
1456.Pp
1457.It Fl z Cm redlocsym
1458Eliminates all local symbols except for the
1459.Sy SECT
1460symbols from the symbol
1461table
1462.Dv SHT_SYMTAB .
1463All relocations that refer to local symbols are updated to refer to the
1464corresponding
1465.Sy SECT
1466symbol.
1467This option allows specialized objects to greatly reduce their symbol table
1468sizes.
1469Eliminated local symbols can reduce the
1470.Sy .stab
1471debugging information that is generated using the compiler driver's
1472.Fl g
1473option.
1474See the
1475.Fl s
1476and
1477.Fl z Cm noldynsym
1478options.
1479.Pp
1480.It Fl z Cm relaxreloc
1481.Nm
1482normally issues a fatal error upon encountering a relocation using a
1483symbol that references an eliminated COMDAT section.
1484If
1485.Fl z Cm relaxreloc
1486is enabled,
1487.Nm
1488instead redirects such relocations to the equivalent symbol in the COMDAT
1489section that was kept.
1490.Fl z Cm relaxreloc
1491is a specialized option, mainly of interest to compiler authors, and is not
1492intended for general use.
1493.Pp
1494.It Fl z Cm rescan-now
1495.It Fl z Cm rescan
1496These options rescan the archive files that are provided to the link-edit.
1497By default, archives are processed once as the archives appear on the command
1498line.
1499Archives are traditionally specified at the end of the command line so that
1500their symbol definitions resolve any preceding references.
1501However, specifying archives multiple times to satisfy their own
1502interdependencies can be necessary.
1503.Pp
1504.Fl z Cm rescan-now
1505is a positional option, and is processed by the link-editor immediately when
1506encountered on the command line.
1507All archives seen on the command line up to that point are immediately
1508reprocessed in an attempt to locate additional archive members that resolve
1509symbol references.
1510This archive rescanning is repeated until a pass over the archives occurs in
1511which no new members are extracted.
1512.Pp
1513.Fl z Cm rescan
1514is a position independent option.
1515The link-editor defers the rescan operation until after it has processed the
1516entire command line, and then initiates a final rescan operation over all
1517archives seen on the command line.
1518The
1519.Fl z Cm rescan
1520operation can interact incorrectly with objects that contain initialization
1521.Pq .init
1522or finalization
1523.Pq .fini
1524sections, preventing the code in those sections from running.
1525For this reason,
1526.Fl z Cm rescan
1527is deprecated, and use of
1528.Fl z Cm rescan-now
1529is
1530advised.
1531.Pp
1532.It Fl z Cm rescan-start No \&... Fl z Cm rescan-end
1533.It Fl \&-start-group No \&... Fl \&-end-group
1534.It Fl \&( No \&... Fl \&)
1535Defines an archive rescan group.
1536This is a positional construct, and is processed by the link-editor immediately
1537upon encountering the closing delimiter option.
1538Archives found within the group delimiter options are reprocessed as a group in
1539an attempt to locate additional archive members that resolve symbol references.
1540This archive rescanning is repeated until a pass over the archives occurs in
1541which no new members are extracted.
1542Archive rescan groups cannot be nested.
1543.Pp
1544.It Fl z Cm symbolcap
1545Specifies that a relocatable object that defines object capabilities should
1546have those converted to symbol capabilities.
1547A relocatable object that does not have any object capabilities will ignore
1548this option.
1549.Pp
1550Symbol capabilities provide a means for multiple implementations of a function
1551to co-exist and have one picked at runtime based upon the hardware capabilities
1552of the system.
1553When
1554.Fl z Cm symbolcap
1555is invoked, all global functions are converted into local functions that have
1556the corresponding capability name appended to them and an undefined symbol with
1557the original name left in the resulting relocatable object.
1558At runtime, the global symbol will be bound to the corresponding implementation
1559that is appropriate based on the capabilities of the system.
1560.Pp
1561.It Fl z Cm target= Ns Cm sparc Ns | Ns Cm x86
1562Specifies the machine type for the output object.
1563Supported targets are
1564.Cm sparc
1565and
1566.Cm x86 .
1567The 32-bit machine type for the specified target is used unless the
1568.Fl 64
1569option is also present, in which case the corresponding 64-bit machine type is
1570used.
1571By default, the machine type of the object being generated is determined from
1572the first
1573.Sy ELF
1574object processed from the command line.
1575If no objects are specified, the machine type is determined by the first object
1576encountered within the first archive processed from the command line.
1577If there are no objects or archives, the link-editor assumes the native
1578machine.
1579This option is useful when creating an object directly with
1580.Nm
1581whose input is solely from a
1582.Sy mapfile .
1583See the
1584.Fl M
1585option.
1586It can also be useful in the rare case of linking entirely from an archive that
1587contains objects of different machine types for which the first object is not
1588of the desired machine type.
1589See
1590.Em The 32-bit link-editor and 64-bit link-editor
1591in
1592.%T Linker and Libraries Guide .
1593.Pp
1594Note that for compatibility with existing Makefiles and scripts, these options
1595may be given multiple times and may be mixed in the same invocation: the last
1596instance wins, so that, for example,
1597.Ql ld -z target=sparc -z target=x86 \&...
1598gives a machine type of
1599.Sq x86 .
1600.Pp
1601.It Fl z Cm text
1602In dynamic mode only, forces a fatal error if any relocations against
1603non-writable, allocatable sections remain.
1604For historic reasons, this mode is not the default when building an executable
1605or shared object.
1606However, its use is recommended to ensure that the text segment of the dynamic
1607object being built is shareable between multiple running processes.
1608A shared text segment incurs the least relocation overhead when loaded into
1609memory.
1610See
1611.Em Position-Independent Code
1612in
1613.%T Linker and Libraries Guide .
1614.Pp
1615.It Fl z Cm textoff
1616In dynamic mode only, allows relocations against all allocatable sections,
1617including non-writable ones.
1618This mode is the default when building a shared object.
1619.Pp
1620.It Fl z Cm textwarn
1621In dynamic mode only, lists a warning if any relocations against non-writable,
1622allocatable sections remain.
1623This mode is the default when building an executable.
1624.Pp
1625.It Xo
1626.Sm off
1627.Fl z\~ Cm type= Cm exec | kmod | reloc | shared
1628.Sm on
1629.Xc
1630Specifies the type of object to create.
1631.Bl -tag -width shared
1632.It exec
1633Dynamic executable
1634.It reloc
1635Relocatable object
1636.It shared
1637Dynamic shared object
1638.It kmod
1639illumos kernel module
1640.El
1641.Pp
1642.It Fl z Cm verbose
1643This option provides additional warning diagnostics during a link-edit.
1644Presently, this option conveys suspicious use of displacement relocations.
1645This option also conveys the restricted use of static TLS relocations when
1646building shared objects.
1647In future, this option might be enhanced to provide additional diagnostics that
1648are deemed too noisy to be generated by default.
1649.Pp
1650.It Fl z Cm wrap= Ns Ar symbol
1651.It Fl wrap Ns Cm \&= Ns Ar symbol
1652.It Fl \&-wrap Ns Cm \&= Ns Ar symbol
1653Rename undefined references to
1654.Ar symbol
1655in order to allow wrapper code to be linked into the output object without
1656having to modify source code.
1657When
1658.Fl z Cm wrap
1659is specified, all undefined references to
1660.Ar symbol
1661are modified to reference
1662.Sy __wrap_ Ns Ar symbol ,
1663and all references to
1664.Sy __real_ Ns Ar symbol
1665are modified to reference
1666.Ar symbol .
1667The user is expected to provide an object containing the
1668.Sy __wrap_ Ns Ar symbol
1669function.
1670This wrapper function can call
1671.Sy __real_ Ns Ar symbol
1672in order to reference the actual function being wrapped.
1673.Pp
1674The following is an example of a wrapper for the
1675.Xr malloc 3C
1676function:
1677.Bd -literal -offset 4n
1678void *
1679__wrap_malloc(size_t c)
1680{
1681    (void) printf("malloc called with %zu\en", c);
1682    return (__real_malloc(c));
1683}
1684.Ed
1685.Pp
1686If you link other code with this file using
1687.Fl z Cm wrap= Ns Ar malloc
1688to compile all the objects, then all calls to
1689.Sy malloc
1690will call the function
1691.Sy __wrap_malloc
1692instead.
1693The call to
1694.Sy __real_malloc
1695will call the real
1696.Sy malloc
1697function.
1698.Pp
1699The real and wrapped functions should be maintained in separate source files.
1700Otherwise, the compiler or assembler may resolve the call instead of leaving
1701that operation for the link-editor to carry out, and prevent the wrap from
1702occurring.
1703.El
1704.Sh ENVIRONMENT
1705.Bl -tag -width 4n
1706.It Ev LD_ALTEXEC
1707An alternative link-editor path name.
1708.Nm
1709executes, and passes control to this alternative link-editor.
1710This environment variable provides a generic means of overriding the default
1711link-editor that is called from the various compiler drivers.
1712See the
1713.Fl z Cm altexec64
1714option.
1715.It Ev LD_LIBRARY_PATH
1716A list of directories in which to search for the libraries specified using the
1717.Fl l
1718option.
1719Multiple directories are separated by a colon.
1720In the most general case, this environment variable contains two directory
1721lists separated by a semicolon:
1722.Pp
1723.D1 Ar dirlist1 Ns Cm \&; Ns Ar dirlist2
1724.Pp
1725If
1726.Nm
1727is called with any number of occurrences of
1728.Fl L ,
1729as in:
1730.Pp
1731.D1 Nm No ... Fl L Ns Ar path1 No ... Fl L Ns Ar pathn No ...
1732.Pp
1733then the search path ordering is:
1734.Pp
1735.D1 Ar dirlist1 Ar path1 No ... Ar pathn Ar dirlist2 Ev LIBPATH
1736.Pp
1737When the list of directories does not contain a semicolon, the list is
1738interpreted as
1739.Ar dirlist2 .
1740.Pp
1741The
1742.Ev LD_LIBRARY_PATH
1743environment variable also affects the runtime linkers search for dynamic
1744dependencies.
1745.Pp
1746This environment variable can be specified with a _32 or _64 suffix.
1747This makes the environment variable specific, respectively, to 32-bit or 64-bit
1748processes and overrides any non-suffixed version of the environment variable
1749that is in effect.
1750.It Ev LD_NOEXEC_64
1751Suppresses the automatic execution of the 64-bit link-editor.
1752By default, the link-editor executes the 64-bit version when the
1753.Sy ELF
1754class of the first relocatable file identifies a 64-bit object.
1755The 64-bit image that a 32-bit link-editor can create, has some limitations.
1756However, some link-edits might find the use of the 32-bit link-editor faster.
1757.It Ev LD_OPTIONS
1758A default set of options to
1759.Nm .
1760.Ev LD_OPTIONS
1761is interpreted by
1762.Nm
1763just as though its value had been placed on the command line, immediately
1764following the name used to invoke
1765.Nm ,
1766as in:
1767.Pp
1768.D1 Nm Ev $LD_OPTIONS No ... Ar other-arguments No ...
1769.It Ev LD_RUN_PATH
1770An alternative mechanism for specifying a runpath to the link-editor.
1771See the
1772.Fl R
1773option.
1774If both
1775.Ev LD_RUN_PATH
1776and the
1777.Fl R
1778option are specified,
1779.Fl R
1780supersedes.
1781.It Ev SGS_SUPPORT
1782Provides a colon-separated list of shared objects that are loaded with the
1783link-editor and given information regarding the linking process.
1784This environment variable can be specified with a _32 or _64 suffix.
1785This makes the environment variable specific, respectively, to the 32-bit or
178664-bit class of
1787.Nm
1788and overrides any non-suffixed version of the environment variable that is in
1789effect.
1790See the
1791.Fl S
1792option.
1793.El
1794.Pp
1795Notice that environment variable-names that begin with the characters
1796.Sq LD_
1797are reserved for possible future enhancements to
1798.Nm
1799and
1800.Xr ld.so.1 1 .
1801.Sh FILES
1802.Bl -tag -width 4n
1803.It lib Ns Ar x Ns No .so
1804shared object libraries.
1805.It lib Ns Ar x Ns No .a
1806archive libraries.
1807.It Pa a.out
1808default output file.
1809.It Ev LIBPATH
1810For 32-bit libraries, the default search path is
1811.Pa /usr/ccs/lib ,
1812followed by
1813.Pa /lib ,
1814and finally
1815.Pa /usr/lib .
1816For 64-bit libraries, the default search path is
1817.Pa /lib/64 ,
1818followed by
1819.Pa /usr/lib/64 .
1820.It Pa /usr/lib/ld
1821A directory containing several mapfiles that can be used during link-editing.
1822These mapfiles provide various capabilities, such as defining memory layouts,
1823aligning bss, and defining non-executable stacks.
1824.El
1825.Sh ATTRIBUTES
1826The command line interface of
1827.Nm
1828is
1829.Sy Committed .
1830The output of
1831.Nm
1832is
1833.Sy Committed .
1834.Sh SEE ALSO
1835.Xr as 1 ,
1836.Xr crle 1 ,
1837.Xr gprof 1 ,
1838.Xr ld.so.1 1 ,
1839.Xr ldd 1 ,
1840.Xr mcs 1 ,
1841.Xr pvs 1 ,
1842.Xr strip 1 ,
1843.Xr exec 2 ,
1844.Xr stat 2 ,
1845.Xr dladdr 3C ,
1846.Xr dldump 3C ,
1847.Xr dlopen 3C ,
1848.Xr malloc 3C ,
1849.Xr elf 3ELF ,
1850.Xr ar.h 3HEAD ,
1851.Xr a.out 5 ,
1852.Xr attributes 7
1853.Rs
1854.%B Linker and Libraries Guide
1855.Re
1856.Sh NOTES
1857Default options applied by
1858.Nm
1859are maintained for historic reasons.
1860In today's programming environment, where dynamic objects dominate, alternative
1861defaults would often make more sense.
1862However, historic defaults must be maintained to ensure compatibility with
1863existing program development environments.
1864Historic defaults are called out wherever possible in this manual.
1865For a description of the current recommended options, see Appendix A,
1866.Em Link-Editor Quick Reference ,
1867in
1868.%T Linker and Libraries Guide .
1869.Pp
1870If the file being created by
1871.Nm
1872already exists, the file is unlinked after all input files have been processed.
1873A new file with the specified name is then created.
1874This allows
1875.Nm
1876to create a new version of the file, while simultaneously allowing existing
1877processes that are accessing the old file contents to continue running.
1878If the old file has no other links, the disk space of the removed file is freed
1879when the last process referencing the file terminates.
1880.Pp
1881The behavior of
1882.Nm
1883when the file being created already exists was changed
1884with SXCE build 43.
1885In older versions, the existing file was rewritten in place, an approach with
1886the potential to corrupt any running processes that is using the file.
1887This change has an implication for output files that have multiple hard links
1888in the file system.
1889Previously, all links would remain intact, with all links accessing the new
1890file contents.
1891The new
1892.Nm
1893behavior
1894.Em breaks
1895such links, with the result that only the specified output file name references
1896the new file.
1897All the other links continue to reference the old file.
1898To ensure consistent behavior, applications that rely on multiple hard links to
1899linker output files should explicitly remove and relink the other file names.
1900