Man Page ild.1
NAME
ild - incremental link editor (ild) for object files
SYNOPSIS
ild [ -a ] [ -i ] [ -m ] [ -s ] [ -t ]
[ -V ] [ -B dynamic|static ] [ -d y|n ]
[ -e epsym ] [ -I name ] [ -L path ] [ -l x ]
[ -o outfile ] [ -Q y|n ] [ -R path ] [ -u symname ]
[ -Y P,dirlist ]
[ -z allextract|defaultextract|weakextract ]
[ -z defs|nodefs ] [ -z i_dryrun ]
[ -z i_full ] [ -z i_noincr ] [ -z i_quiet ]
[ -z i_verbose ]
filename ...
DESCRIPTION
Forte Developer 7 Incremental Link Editor.
A manpage, by definition, is a quick reference. For more
detailed information on the Incremental Link Editor (ILD)
and its options, see the C User's Guide.
NOTE:
For this EARLY ACCESS RELEASE, only preliminary man
pages and readme files are available. The C User's Guide
and other Forte Developer 7 manuals will become available
when the Forte Developer 7 software is finally released.
Access all the installed Forte Developer 7 documentation,
including readme files, user guides, and reference manuals
by pointing an HTML browser to
file:/opt/SUNWspro/docs/index.html
ild links incrementally so you can insert modified object
code into an executable built previously. The time required
to link depends upon the amount of code changed. Linking
your application on every build does not require the same
amount of time; small changes in code can be linked very
quickly.
The ild command combines relocatable object files, performs
relocation, and resolves external symbols. ild operates in
two modes, static or dynamic, as governed by the -d option.
In static mode, -dn, relocatable object files given as argu-
ments are combined to produce an executable object file. In
dynamic mode, -dy, the default, relocatable object files
given as arguments are combined to produce an executable
object file that will be linked at execution with any shared
object files given as arguments. In all cases, the output
of ild is left in a.out by default.
If any argument is a library, it is searched exactly once at
the point it is encountered in the argument list. The
library may be either a relocatable archive or a shared
object. For an archive library, only those routines defin-
ing an unresolved external reference are loaded. The
archive library symbol table (see ar(4)) is searched sequen-
tially with as many passes as are necessary to resolve
external references that can be satisfied by library
members. Thus, the ordering of members in the library is
functionally unimportant, unless there exist multiple
library members defining the same external symbol. A shared
object consists of a single entity all of whose references
must be resolved within the executable being built or within
other shared objects with which it is linked.
The compilation system options that control whether a link
step is performed by ild or ld are: -xildon, always use ild;
-xildoff, always use ld (if -xildon and -xildoff are both
present, the last governs); -g, when neither -xildoff or -G
are given, use ild for link-only invocations (no source
files on the command line); -G, prevents the -g option from
having any effect on linker selection.
Note: Both -g and -G have other meanings that are documented
as part of the compilation systems.
When you use the -g option to invoke ild, and you have the
default Makefile structure (which includes compile-time
options such as -g on the command line for the link step),
you use ild automatically when doing development.
If ild determines that an ild option is unimplemented (see
NOTES), ild directly invokes /usr/css/bin/ld to perform the
link.
OVERVIEW OF INCREMENTAL LINKING
In incremental mode, the initial link causes the various
text, data, bss, exception table sections, etc., to be pad-
ded with additional space for future expansion. Addition-
ally, all relocation records, ranlib indices, and the global
symbol table are saved by ild in the executable file.
On subsequent incremental links, ild uses timestamps to dis-
cover which object files have changed and patches the
changed object code into a previously built executable.
That is, the previous versions of the object files are
invalidated and the new object files are loaded into the pad
sections of the executable. All references to symbols in
invalidated object files are patched to point to the correct
new object files.
OPTIONS
-a In static mode only, produce an executable
object file; give errors for undefined refer-
ences. This is the default behavior for static
mode.
-i Ignore LD_LIBRARY_PATH setting. This option is
useful when an LD_LIBRARY_PATH setting is in
effect to influence the runtime library search,
which would interfere with the link editing
being performed. (This also applies to the set-
ting of LD_LIBRARY_PATH_64 )
-m Produce a memory map or listing of the
input/output sections on the standard output.
(See BUGS.)
-s Strip symbolic information from the output file.
Any debugging information, that is .debug,
.line, and .stab sections and their associated
relocation entries, will be removed. Except for
relocatable files or shared objects, the symbol
table and string table sections will also be
removed from the output object file.
-t Turn off the warning about multiply defined sym-
bols that are not the same size.
-V Output a message giving information about the
version of ild being used.
-B dynamic|static
Options governing library inclusion. -Bdynamic
is valid in dynamic mode only. These options
may be specified any number of times on the com-
mand line as toggles: if the -Bstatic option is
given, no shared objects will be accepted until
-Bdynamic is seen. See also the -l option.
-d y|n When -dy, the default, is specified, ild uses
dynamic linking; when -dn is specified, ild uses
static linking. Also see -B dynamic|static.
-e epsym Set the entry point address for the output file
to be that of the symbol epsym.
-I name When building an executable, use name as the
path name of the interpreter to be written into
the program header. The default in static mode
is no interpreter; in dynamic mode, the default
is the name of the runtime linker,
/usr/lib/ld.so.1. Either case may be overridden
by -Iname. exec will load this interpreter when
it loads the a.out and will pass control to the
interpreter rather than to the a.out directly.
-L path Add path to the library search directories. ild
searches for libraries first in any directories
specified by the -L options, and then in the
standard directories. This option is useful
only if it precedes the -l options to which it
applies on the command line. The environment
variables LD_LIBRARY_PATH and LD_LIBRARY_PATH_64
may be used to supplement the library search
path (see ENVIRONMENT below).
-l x Search a library libx.so or libx.a, the conven-
tional names for shared object and archive
libraries, respectively. In dynamic mode,
unless the -Bstatic option is in effect, ild
searches each directory specified in the library
search path for a file libx.so or libx.a. The
directory search stops at the first directory
containing either. ild chooses the file ending
in .so if -lx expands to two files whose names
are of the form libx.so and libx.a. If no
libx.so is found, then ild accepts libx.a. In
static mode, or when the -Bstatic option is in
effect, ild selects only the file ending in .a.
A library is searched when its name is encoun-
tered, so the placement of -l is significant.
-o outfile Produce an output object file named outfile.
The name of the default object file is a.out.
-Q y|n Under -Qy, an ident string is added to the .com-
ment section of the output file to identify the
version of the link editor used to create the
file. This will result in multiple ld idents
when there have been multiple linking steps,
such as when using ld -r. This is identical
with the default action of the cc command. -Qn
suppresses version identification.
-R path A colon-separated list of directories that
specifies library search directories to the run-
time linker. If present and not null, path is
recorded in the output object file and passed to
the runtime linker. Multiple instances of this
option are concatenated and separated by a
colon.
-u symname Enter symname as an undefined symbol in the sym-
bol table. This is useful for loading entirely
from an archive library, since initially the
symbol table is empty and an unresolved refer-
ence is needed to force the loading of the first
routine. The placement of this option on the
command line is significant; it must be placed
before the library that will define the symbol.
-Y P,dirlist
Change the default directories used for finding
libraries. dirlist is a colon-separated path
list.
NOTE: The "-z name" form is used by ild for spe-
cial options. The "-i_" prefix to the -z
options identifies those options peculiar to
ild.
-z allextract|defaultextract|weakextract
Alter the extraction criteria of objects from
any archives that follow. By default archive
members are extracted to satisfy undefined
references and to promote tentative definitions
with data definitions. Weak symbol references
do not trigger extraction. Under -z allextract,
all archive members are extracted from the
archive. Under -z weakextract, weak references
trigger archive extraction. -z defaultextract
provides a means of returning to the default
following use of the former extract options.
-z defs Force a fatal error if any undefined symbols
remain at the end of the link. This is the
default when building an executable. It is also
useful when building a shared object to assure
that the object is self-contained, that is, that
all its symbolic references are resolved inter-
nally.
-z nodefs Allow undefined symbols. This is the default
when building a shared object. When used with
executables, the behavior of references to such
"undefined symbols" is unspecified.
-z i_dryrun (ild only). Print the list of files ild would
have linked and exit.
-z i_full (ild only). Do a complete relink in incremental
mode.
-z i_noincr (ild only). Run ild in non-incremental mode
(not recommended for customer use - used for
testing only).
-z i_quiet (ild only). Turns off these two ild messages:
`ild: (Performing full relink) ...' and `ild:
calling ld to finish link'.
-z i_verbose
(ild only). Expands on default information in
these two ild messages: `ild: (Performing full
relink) ...' and `ild: calling ld to finish
link' whenever the default text ends with
`[...]'.
ENVIRONMENT
LD_LIBRARY_PATH
A list of directories in which to search for libraries
specified with the -l option. Multiple directories are
separated by a colon. In the most general case, it
will contain two directory lists separated by a semi-
colon:
dirlist1;dirlist2
If ild is called with any number of occurrences of -L,
as in:
ild ... -Lpath1 ... -Lpathn ...
then the search path ordering is:
dirlist1 path1 ... pathn dirlist2 LIBPATH
When the list of directories does not contain a semi-
colon, it is interpreted as dirlist2.
LD_LIBRARY_PATH is also used to specify library search
directories to the runtime linker. That is, if
LD_LIBRARY_PATH exists in the environment, the runtime
linker will search the directories named in it, before
its default directory, for shared objects to be linked
with the program at execution.
Note: When running a set-user-ID or set-group-ID pro-
gram, the runtime linker will only search for libraries
in /usr/lib and any full pathname specified within the
executable as a result of a runpath being specified
when the executable was constructed. Any library
dependencies specified as relative pathnames will be
silently ignored.
LD_LIBRARY_PATH_64
On Solaris 7, this environment variable is similar to
LD_LIBRARY_PATH but overrides it when searching for
64-bit dependencies.
When running Solaris 7 on a SPARC processor and linking
in 32-bit mode, LD_LIBRARY_PATH_64 is ignored. If only
LD_LIBRARY_PATH is defined, it us used for both 32-bit
and 64-bit linking. If both LD_LIBRARY_PATH and
LD_LIBRARY_PATH_64 are defined, the 32-bit linking will
be done using LD_LIBRARY_PATH and the 64-bit linking
using LD_LIBRARY_PATH_64 .
See Linker and Libraries Guide for more information on
these environment variables.
LD_OPTIONS
A default set of options to ild . LD_OPTIONS is inter-
preted by ild just as though its value had been placed
on the command line, immediately following the name
used to invoke ild , as in:
ild $LD_OPTIONS ... other-arguments ...
LD_PRELOAD
A list of shared objects that are to be interpreted by
the runtime linker. The specified shared objects are
linked in after the program being executed and before
any other shared objects that the program references.
Note: When running a set-user-ID or set-group-ID pro-
gram, this option is silently ignored.
LD_RUN_PATH
An alternative mechanism for specifying a runpath to
the link editor (see -R option). If both LD_RUN_PATH
and the -R option are specified, -R supersedes.
LD_DEBUG
(not supported by ild) Provide a list of tokens that
will cause the runtime linker to print debugging infor-
mation to the standard error. The special token help
indicates the full list of tokens available.
Note: Environment variable-names beginning with the charac-
ters `LD_' are reserved for possible future enhancements to
ld. Environment variable-names beginning with the charac-
ters `ILD_' are reserved for possible future enhancements to
ild.
NOTES
If ild determines that an ild option is unimplemented, ild
directly invokes /usr/css/bin/ld to perform the link.
The following ld options are not supported by ild at this
time:
-b
-G
-B symbolic
-D token
-F name
-h name
-M mapfile
-z muldefs
-z text
BUGS
ild uses the timestamp associated with an archive library
object file to determine which files have been updated. If
multiple definitions of the same symbol do not exist in the
library, ild finds the correct (that is, only) symbol. How-
ever, multiple definitions of the same symbol confuse ild.
ild occasionally silently handles multiple definitions
incorrectly.
Option -m produces a memory map but not a listing of the
nonfatal multiply-defined symbols on the standard output.
Once an object file is extracted from an archive file and
linked into an incremental executable, that object file
remains in the executable, even if all references to it are
removed, until the next complete relink (which can be forced
by deleting the binary).
FILES
libx.a libraries
a.out output file
LIBPATH usually /usr/ccs/lib:/usr/lib
SEE ALSO
cc(1), CC(1), ld(1), exec(2), elf(3E), end(3C), a.out(4),
ar(4) f77(1)
Linker and Libraries Guide
Forte Developer 7: C User's Guide manual