getconf: don't include xpg4 bits, gcc7 includes xpg6 bits for us
[unleashed.git] / share / man / man1 / ldd.1
blobcdc949911fc66e5169ef4f997290a310b07ddbe2
1 '\" te
2 .\" Copyright 1989 AT&T All Rights Reserved
3 .\" Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved
4 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
5 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
6 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
7 .TH LDD 1 "April 9, 2016"
8 .SH NAME
9 ldd \- list dynamic dependencies of executable files or shared objects
10 .SH SYNOPSIS
11 .LP
12 .nf
13 \fBldd\fR [\fB-d\fR | \fB-r\fR] [\fB-c\fR] [\fB-e\fR \fIenvar\fR] [\fB-f\fR] [\fB-i\fR] [\fB-L\fR] [\fB-l\fR] [\fB-p\fR] [\fB-s\fR]
14     [\fB-U\fR | \fB-u\fR] [\fB-v\fR] [\fB-w\fR] \fIfilename\fR...
15 .fi
17 .SH DESCRIPTION
18 .LP
19 The \fBldd\fR utility lists the dynamic dependencies of executable files or
20 shared objects. \fBldd\fR uses the runtime linker, \fBld.so.1\fR, to generate
21 the diagnostics. The runtime linker takes the object being inspected and
22 prepares the object as would occur in a running process. By default, \fBldd\fR
23 triggers the loading of any lazy dependencies.
24 .sp
25 .LP
26 \fBldd\fR lists the path names of all shared objects that would be loaded when
27 \fIfilename\fR is loaded. \fBldd\fR expects the shared objects that are being
28 inspected to have execute permission. If a shared object does not have execute
29 permission, \fBldd\fR issues a warning before attempting to process the file.
30 .sp
31 .LP
32 \fBldd\fR processes its input one file at a time. For each file, \fBldd\fR
33 performs one of the following:
34 .RS +4
35 .TP
36 .ie t \(bu
37 .el o
38 Lists the object dependencies if the dependencies exist.
39 .RE
40 .RS +4
41 .TP
42 .ie t \(bu
43 .el o
44 Succeeds quietly if dependencies do not exist.
45 .RE
46 .RS +4
47 .TP
48 .ie t \(bu
49 .el o
50 Prints an error message if processing fails.
51 .RE
52 .sp
53 .LP
54 The dynamic objects that are inspected by \fBldd\fR are not executed.
55 Therefore, \fBldd\fR does not list any shared objects explicitly attached using
56 \fBdlopen\fR(3C). To display all the objects in use by a process, or a core
57 file, use \fBpldd\fR(1).
58 .SH OPTIONS
59 .LP
60 \fBldd\fR can also check the compatibility of \fIfilename\fR with the shared
61 objects \fIfilename\fR uses. With the following options, \fBldd\fR prints
62 warnings for any unresolved symbol references that would occur when
63 \fIfilename\fR is loaded.
64 .sp
65 .ne 2
66 .na
67 \fB\fB-d\fR\fR
68 .ad
69 .RS 6n
70 Check \fBimmediate\fR references.
71 .RE
73 .sp
74 .ne 2
75 .na
76 \fB\fB-r\fR\fR
77 .ad
78 .RS 6n
79 Check both \fBimmediate\fR references and \fBlazy\fR references.
80 .RE
82 .sp
83 .LP
84 Only one of the options \fB-d\fR or \fB-r\fR can be specified during any single
85 invocation of \fBldd\fR.
86 .sp
87 .LP
88 \fBimmediate\fR references are typically to data items used by the executable
89 or shared object code. \fBimmediate\fR references are also pointers to
90 functions, and even calls to functions made from a position \fBdependent\fR
91 shared object. \fBlazy\fR references are typically calls to global functions
92 made from a position \fBindependent\fR shared object, or calls to external
93 functions made from an executable. For more information on these types of
94 reference, see When Relocations Are Performed in the \fILinker and Libraries
95 Guide\fR. Object loading can also be affected by relocation processing. See
96 \fBLazy Loading\fR under USAGE for more details.
97 .sp
98 .LP
99 Some unresolved symbol references are not reported by default. These unresolved
100 references can be reported with the following options. These options are only
101 useful when combined with either the \fB-d\fR or the \fB-r\fR options.
103 .ne 2
105 \fB\fB-p\fR\fR
107 .RS 6n
108 Expose any unresolved symbol errors to explicit \fBparent\fR and \fBexternal\fR
109 references.
113 .ne 2
115 \fB\fB-w\fR\fR
117 .RS 6n
118 Expose any unresolved \fBweak\fR symbol references.
123 A shared object can make reference to symbols that should be supplied by the
124 caller of the shared object. These references can be explicitly classified when
125 the shared object is created, as being available from a \fBparent\fR, or simply
126 as being \fBexternal\fR. See the \fB-M\fR \fBmapfile\fR option of \fBld\fR(1),
127 and the \fBPARENT\fR and \fBEXTERN\fR symbol definition keywords. When
128 examining a dynamic executable, a \fBparent\fR or \fBexternal\fR reference that
129 can not be resolved is flagged as an error. However by default, when examining
130 a shared object, a \fBparent\fR or \fBexternal\fR reference that can not be
131 resolved is not flagged as an error. The \fB-p\fR option, when used with either
132 the \fB-d\fR or \fB-r\fR options, causes any unresolved \fBparent\fR or
133 \fBexternal\fR reference to be flagged as a relocation error.
136 Symbols that are used by relocations may be defined as \fBweak\fR references.
137 By default, if a weak symbol reference can not be resolved, the relocation is
138 ignored and a zero written to the relocation offset. The \fB-w\fR option, when
139 used with either the \fB-d\fR or the \fB-r\fR options, causes any unresolved
140 relocation against a weak symbol reference to be flagged as a relocation error.
143 \fBldd\fR can also check dependency use. With each of the following options,
144 \fBldd\fR prints warnings for any unreferenced, or unused dependencies that are
145 loaded when \fIfilename\fR is loaded. Only when a symbol reference is bound to
146 a dependency, is that dependency deemed used. These options are therefore only
147 useful when symbol references are being checked. If the \fB-r\fR option is not
148 in effect, the \fB-d\fR option is enabled.
151 A dependency that is defined by an object but is not bound to from that object
152 is an unreferenced dependency. A dependency that is not bound to by any other
153 object when \fIfilename\fR is loaded is an unused object.
156 Dependencies can be located in default system locations, or in locations that
157 must be specified by search paths. Search paths may be specified globally, such
158 as the environment variable \fBLD_LIBRARY_PATH\fR. Search paths can also be
159 defined in dynamic objects as runpaths. See the \fB-R\fR option to \fBld\fR(1).
160 Search paths that are not used to satisfy any dependencies cause unnecessary
161 file system processing.
163 .ne 2
165 \fB\fB-U\fR\fR
167 .RS 6n
168 Displays any unreferenced, or unused dependencies. If an unreferenced
169 dependency is not bound to by other objects loaded with \fIfilename\fR, the
170 dependency is also flagged as unused. Cyclic dependencies that are not bound to
171 from objects outside of the cycle are also deemed unreferenced.
173 This option also displays any unused search paths.
177 .ne 2
179 \fB\fB-u\fR\fR
181 .RS 6n
182 Displays any unused objects.
187 Only one of the options \fB-U\fR or \fB-u\fR can be specified during any single
188 invocation of \fBldd\fR, although \fB-U\fR is a superset of \fB-u\fR. Objects
189 that are found to be unreferenced, or unused when using the \fB-r\fR option,
190 should be removed as dependencies. These objects provide no references, but
191 result in unnecessary overhead when \fIfilename\fR is loaded. When using the
192 \fB-d\fR option, any objects that are found to be unreferenced, or unused are
193 not immediately required when \fIfilename\fR is loaded. These objects are
194 candidates for lazy loading. See \fBLazy Loading\fR under USAGE for more
195 details.
198 The removal of unused dependencies reduces runtime-linking overhead. The
199 removal of unreferenced dependencies reduces runtime-linking overhead to a
200 lesser degree. However, the removal of unreferenced dependencies guards against
201 a dependency being unused when combined with different objects, or as the other
202 object dependencies evolve.
205 The removal of unused search paths can reduce the work required to locate
206 dependencies. This can be significant when accessing files from a file server
207 over a network. Note, a search path can be encoded within an object to satisfy
208 the requirements of \fBdlopen\fR(3C). This search path might not be required to
209 obtain the dependencies of this object, and hence will look unused to
210 \fBldd\fR.
213 The following additional options are supported:
215 .ne 2
217 \fB\fB-c\fR\fR
219 .RS 12n
220 Disables any configuration file use. Configuration files can be employed to
221 alter default search paths, and provide alternative object dependencies. See
222 \fBcrle\fR(1).
226 .ne 2
228 \fB\fB-e\fR \fIenvar\fR\fR
230 .RS 12n
231 Sets the environment variable \fIenvar\fR.
233 This option is useful for experimenting with environment variables that are
234 recognized by the runtime linker that can adversely affect \fBldd\fR, for
235 example, \fBLD_PRELOAD\fR.
237 This option is also useful for extracting additional information solely from
238 the object under inspection, for example, \fBLD_DEBUG\fR. See \fBld.so.1\fR(1)
239 and \fBlari\fR(1).
243 .ne 2
245 \fB\fB-f\fR\fR
247 .RS 12n
248 Forces \fBldd\fR to check for an executable file that is not secure. When
249 \fBldd\fR is invoked by a superuser, by default \fBldd\fR does not process any
250 executable that is not secure. An executable is not considered secure if the
251 interpreter that the executable specifies does not reside under \fB/lib\fR,
252 \fB/usr/lib\fR or \fB/etc/lib\fR. An executable is also not considered secure
253 if the interpreter cannot be determined. See \fBSecurity\fR under USAGE.
257 .ne 2
259 \fB\fB-i\fR\fR
261 .RS 12n
262 Displays the order of execution of initialization sections. The order that is
263 discovered can be affected by use of the \fB-d\fR or \fB-r\fR options. See
264 \fBInitialization Order\fR under USAGE.
268 .ne 2
270 \fB\fB-L\fR\fR
272 .RS 12n
273 Enables lazy loading. Lazy loading is the default mode of operation when the
274 object under inspection is loaded as part of a process. In this case, any lazy
275 dependencies, or filters, are only loaded into the process when reference is
276 made to a symbol that is defined within the lazy object. The \fB-d\fR or
277 \fB-r\fR options, together with the \fB-L\fR option, can be used to inspect the
278 dependencies, and their order of loading as would occur in a running process.
282 .ne 2
284 \fB\fB-l\fR\fR
286 .RS 12n
287 Forces the immediate processing of any filters so that all filtees, and their
288 dependencies, are listed. The immediate processing of filters is now the
289 default mode of operation for \fBldd\fR. However, under this default any
290 auxiliary filtees that cannot be found are silently ignored. Under the \fB-l\fR
291 option, missing auxiliary filtees generate an error message.
295 .ne 2
297 \fB\fB-s\fR\fR
299 .RS 12n
300 Displays the search path used to locate shared object dependencies.
304 .ne 2
306 \fB\fB-v\fR\fR
308 .RS 12n
309 Displays all dependency relationships incurred when processing \fIfilename\fR.
310 This option also displays any dependency version requirements. See
311 \fBpvs\fR(1).
314 .SH USAGE
315 .SS "Security"
317 A superuser should use the \fB-f\fR option only if the executable to be
318 examined is known to be trustworthy. The use of \fB-f\fR on an untrustworthy
319 executable while superuser can compromise system security. If an executables
320 trustworthiness is unknown, a superuser should temporarily become a regular
321 user. Then invoke \fBldd\fR as this regular user.
324 Untrustworthy objects can be safely examined with \fBdump\fR(1) and with
325 \fBmdb\fR(1), as long as the \fB:r\fR subcommand is not used. In addition, a
326 non-superuser can use either the \fB:r\fR subcommand of \fBmdb\fR, or
327 \fBtruss\fR(1) to examine an untrustworthy executable without too much risk of
328 compromise. To minimize risk when using \fBldd\fR, \fBadb :r\fR, or \fBtruss\fR
329 on an untrustworthy executable, use the \fBUID\fR \fB"nobody"\fR.
330 .SS "Lazy Loading"
332 Lazy loading can be applied directly by specified lazy dependencies. See the
333 \fB-z\fR \fBlazyload\fR option of \fBld\fR(1). Lazy loading can also be applied
334 indirectly through filters. See the \fB-f\fR option and \fB-F\fR option of
335 \fBld\fR(1). Objects that employ lazy loading techniques can experience
336 variations in \fBldd\fR output due to the options used. If an object expresses
337 all its dependencies as lazy, the default operation of \fBldd\fR lists all
338 dependencies in the order in which the dependencies are recorded in that
339 object:
341 .in +2
343 example% \fBldd main\fR
344         libelf.so.1 =>   /lib/libelf.so.1
345         libnsl.so.1 =>   /lib/libnsl.so.1
346         libc.so.1 =>     /lib/libc.so.1
348 .in -2
353 The lazy loading behavior that occurs when this object is used at runtime can
354 be enabled using the \fB-L\fR option. In this mode, lazy dependencies are
355 loaded when reference is made to a symbol that is defined within the lazy
356 object. Therefore, combining the \fB-L\fR option with use of the \fB-d\fR and
357 \fB-r\fR options reveals the dependencies that are needed to satisfy the
358 immediate, and lazy references respectively:
360 .in +2
362 example% \fBldd\fR \fB-L\fR \fBmain\fR
363 example% \fBldd\fR \fB-d\fR \fBmain\fR
364         libc.so.1 =>      /lib/libc.so.1
365 example% \fBldd\fR \fB-r\fR \fBmain\fR
366         libc.so.1 =>      /lib/libc.so.1
367         libelf.so.1 =>  /lib/libelf.so.1
369 .in -2
374 Notice that in this example, the order of the dependencies that are listed is
375 not the same as displayed from \fBldd\fR with no options. Even with the
376 \fB-r\fR option, the lazy reference to dependencies might not occur in the same
377 order as would occur in a running program.
380 Observing lazy loading can also reveal objects that are not required to satisfy
381 any references. These objects, in this example, \fBlibnsl.so.1\fR, are
382 candidates for removal from the link-line used to build the object being
383 inspected.
384 .SS "Initialization Order"
386 Objects that do not explicitly define their required dependencies might observe
387 variations in the initialization section order displayed by \fBldd\fR due to
388 the options used. For example, a simple application might reveal:
390 .in +2
392 example% \fBldd -i main\fR
393         libA.so.1 =>    ./libA.so.1
394         libc.so.1 =>    /lib/libc.so.1
395         libB.so.1 =>    ./libB.so.1
397     init object=./libB.so.1
398     init object=./libA.so.1
399     init object=/lib/libc.so.1
401 .in -2
406 whereas, when relocations are applied, the initialization section order is:
408 .in +2
410 example% \fBldd -ir main\fR
411         .........
413     init object=/lib/libc.so.1
414     init object=./libB.so.1
415     init object=./libA.so.1
417 .in -2
422 In this case, \fBlibB.so.1\fR makes reference to a function in
423 \fB/usr/lib/libc.so.1\fR. However, \fBlibB.so.1\fR has no explicit dependency
424 on this library. Only after a relocation is discovered is a dependency then
425 established. This implicit dependency affects the initialization section order.
428 Typically, the initialization section order established when an application is
429 executed, is equivalent to \fBldd\fR with the \fB-d\fR option. The optimum
430 order can be obtained if all objects fully define their dependencies. Use of
431 the \fBld\fR(1) options \fB-z\|defs\fR and \fB-z\|ignore\fR when building
432 dynamic objects is recommended.
435 Cyclic dependencies can result when one or more dynamic objects reference each
436 other. Cyclic dependencies should be avoided, as a unique initialization sort
437 order for these dependencies can not be established.
440 Users that prefer a more static analysis of object files can inspect
441 dependencies using tools such as \fBdump\fR(1) and \fBelfdump\fR(1).
442 .SH FILES
443 .ne 2
445 \fB\fB/usr/lib/lddstub\fR\fR
447 .RS 23n
448 Fake 32-bit executable loaded to check the dependencies of shared objects.
452 .ne 2
454 \fB\fB/usr/lib/64/lddstub\fR\fR
456 .RS 23n
457 Fake 64-bit executable loaded to check the dependencies of shared objects.
460 .SH SEE ALSO
462 \fBcrle\fR(1), \fBdump\fR(1), \fBelfdump\fR(1), \fBlari\fR(1), \fBld\fR(1),
463 \fBld.so.1\fR(1), \fBmdb\fR(1), \fBpldd\fR(1), \fBpvs\fR(1), \fBtruss\fR(1),
464 \fBdlopen\fR(3C), \fBattributes\fR(5)
467 \fILinker and Libraries Guide\fR
468 .SH DIAGNOSTICS
470 \fBldd\fR prints the record of shared object path names to \fBstdout\fR. The
471 optional list of symbol resolution problems is printed to \fBstderr\fR. If
472 \fIfilename\fR is not an executable file or a shared object, or if
473 \fIfilename\fR cannot be opened for reading, a non-zero exit status is
474 returned.
475 .SH NOTES
477 Use of the \fB-d\fR or \fB-r\fR option with shared objects can give misleading
478 results. \fBldd\fR does a worst case analysis of the shared objects. However,
479 in practice, the symbols reported as unresolved might be resolved by the
480 executable file referencing the shared object. The runtime linkers preloading
481 mechanism can be employed to add dependencies to the object being inspected.
482 See \fBLD_PRELOAD\fR.
485 \fBldd\fR uses the same algorithm as the runtime linker to locate shared
486 objects.