|
» |
|
|
|
NAMEld_pa: ld — link editor for PA-RISC systems SYNOPSISCommon Optionsld
[-bdmnqrstvxzEGIOPQTVZ]
[-a
search]
[-c
filename]
[-dynamic]
[-e
epsym]
[-h
symbol]...
[-l
x
|
file]...
[-l:
library]
[-noshared]
[-o
outfile]
[-u
symbol]...
[-y
symbol]...
[-B
bind]
[-D
offset]
[-Fl
lib]
[-L
dir]...
[-R
offset]
[-Pd]
[-PD
file]
[-PF
file]
[+afs
func_sym_x=func_sym_y]...
[+allowdups]
[+b
path_list]
[+compat]
[+copyobjdebug]
[+df
file]
[+e
symbol]
[+ee
symbol]
[+fb]
[+fbu]
[+filter
shared_library_path]
[+fini
function]
[+gst]
[+gstsize
size]
[+h
internal_name]
[+help]
[+init
function]
[+[no]inputmmap]
[+interp
file]
[+k]
[+n]
[+[no]mergeseg]
[+[no]mmap]
[+nocopyobjdebug]
[+noobjdebug]
[+objdebugonly]
[+origin
shared_library_path]
[+pd
size]
[+pgm
name]
[+pi
size]
[+profilebucketsize
size]
[+s]
[+std]
[+tools]
[+v[no]shlibunsats]
[+vallcompatwarnings]
[+v[no]compatwarnings]
[+FP
flag]
[+I
symbol]
[+O[no]fastaccess]
[+O[no]procelim]
[+Oreusedir=dir]
[+Oselectivepercent
n]
[+Oselectivesize
size]
[+OselectiveO3]
[+Ostaticprediction] PA-RISC 32-Bit (SOM) Optionsld
[-NS]
[-A
name]
[-C
n]
[-Fw]
[-Fz]
[+cdp
oldpath:newpath]
[+cg
pathname]
[+dpv]
[+ea
filename]
[+gstbuckets
size]
[+nosmartbind]
[+plabel_cache
flag] PA-RISC 64-Bit (ELF) Optionsld
[-w]
[-k
filename]
[-symbolic
symbol]...
[+alloc_hidden_symbols]
[+allowrorelocs]
[+[no]allowunsats]
[+[no]defaultrpath]
[+[no]forceload]
[+hideallsymbols]
[+ild]
[+ildnowarn]
[+ildpad
percentage]
[+ildrelink]
[+interposer]
[+[no]lazyload]
[+linkersyms]
[+nobss]
[+nodefaultmap]
[+noenvvar]
[+nodynhash]
[+noprocelim_sym
symbol]...
[+nosectionmerge]
[+nosymb
symbol]...
[+paddata
pagesize]
[+padtext
pagesize]
[+pdzero]
[+stripunwind]
[+vtype
type] RemarksThis manpage describes
ld
on PA-RISC systems.
For
ld
on Integrity systems, see
ld_ia(1). DESCRIPTIONld
takes one or more object files or libraries as input
and combines them to produce a single (usually executable) file.
In doing so it resolves references to external symbols,
assigns final addresses to procedures and variables,
revises code and data to reflect new addresses
(a process called "relocation"),
and updates symbolic debug information when present in the file.
By default,
ld
produces an executable file that can be run by the
HP-UX
loader
exec()
(see
exec(2)).
Alternatively, the linker can generate a relocatable file
that is suitable for further processing by
ld
(see
-r
below).
It can also generate a shared library (see
-b
below).
The linker marks the output file non-executable
if there are any duplicate symbols or any unresolved
external references remain.
ld
may or may not generate an output file (see
+k
option) if any other errors occur
during its operation. ld
recognizes three kinds of input files:
object files created by the compilers, assembler, or linker
(also known as
.o
files), shared libraries created by the linker,
and archives of object files (called archive libraries). An archive library contains a table
of all the externally-visible symbols from its component object files.
(The archiver command
ar(1)
creates and maintains this index.)
ld
uses this table to resolve references to external symbols. ld
processes files in the same order as they appear on the command line.
It includes code and data from an archive library element
if and only if that object module provides a definition
for a currently unresolved reference within the user's program or
shared library or dependent shared library.
It is common practice
to list libraries following the names of all simple object files
on the command line. Code and data from shared libraries is never copied into an executable program.
The dynamic loader
/usr/lib/dld.sl
on 32-bit links is invoked at startup time by the startup file
crt0.o
if a program uses shared libraries.
Identical copies of
crt0.o
can be found in either
/usr/ccs/lib/crt0.o
or
/opt/langtools/lib/crt0.o.
For 64-bit mode, the dynamic loader is
/usr/lib/pa20_64/dld.sl
and is invoked by exec for those programs that use shared libraries.
crt0.o
is not required in shared bound links.
The dynamic loader attaches each required library to the process
and resolves all symbolic references between the program and its libraries. NOTE:
For information on linking secure programs with shared libraries,
see the
Security Restrictions
section below. The text segment of a shared library is
shared among all processes that use the library; each process using
the library receives its own copy of the data segment.
If
pxdb -s on
has been run on the executable that loads the library, the text segment
of a shared library is mapped privately for each process running the
executable.
ld
recursively examines the dependencies of shared libraries used by a program
that was created by
ld.
If
ld
does not find a supporting shared library at the path recorded in the
dependency list of a shared library, and if the dependency is the result of an
-l
argument used when the shared library was created,
ld
will search all the directories that it would search for a library that was
specified with
-l
(see
-L
and
LPATH). Environment VariablesArguments can be passed to the linker through the
LDOPTS
environment variable as well as on the command line.
The linker gets the value of
LDOPTS
and places its contents before any arguments on the command line. The
LD_PXDB
environment variable defines the full execution path
for the debug preprocessor
pxdb.
The default value is
/opt/langtools/bin/pxdb.
ld
invokes
pxdb
on its output file if that file is executable
and contains debug information.
To defer invocation of
pxdb
until the first debug session, set
LD_PXDB
to
/bin/true. The
LPATH
environment variable can be used to specify default directories
to search for library files.
See the
-l
option. Common OptionsThe common
ld
options are listed first, followed by the options supported only in a 32-bit
linker, and then the options only supported in a 64-bit linker. - -a search
Specify whether shared or archive libraries are searched
with the
-l
option.
The value of
search
should be one of
archive,
shared,
archive_shared,
shared_archive,
or
default.
This option can appear more than once,
interspersed among
-l
options, to control the searching for each library.
The default is to use the shared version of a library
if one is available, or the archive version if not. If either
archive
or
shared
is active, only the specified library type is accepted. If
archive_shared
is active, the archive form is preferred, but
the shared form is allowed. If
shared_archive
is active, the shared form is preferred but the archive form is allowed. - -b
Create a shared library rather than a normal executable file.
Object files processed with this option must contain
position-independent code
(PIC).
See the discussion of
PIC
in
cc(1),
CC(1)
(part of the optional C++ compiler documentation),
f77(1),
pc(1),
as(1),
and
Linker and Libraries Online User Guide. - -c filename
Read ld options from a file.
Each line contains zero or more arguments separated by white space.
Each line in the file, including the last line, must end with a
newline character.
A
#
character implies that the rest of the line is a comment.
To escape a
#
character, use the sequence
##. - -d
Force definition of "common" storage; that is, assign addresses and
sizes, for
-r
output.
This option also strips COMDAT information from the
-r
output. - -dynamic
This allows the linker to create a program which can use shared libraries.
This is the default for 64-bit links unless
+compat
is used.
In 32-bit mode, the linker creates a static executable if there
are no shared libraries on the link line. - -e epsym
Set the default entry point address for the output file to be that of
the symbol
epsym.
(This option only applies to executable files.) - -h symbol
Prior to writing the symbol table to the output file,
mark this name as "local" so that it is no longer externally visible.
This ensures that this particular entry will not clash
with a definition in another file during future processing by
ld. More than one
symbol
can be specified, but
-h
must precede each one.
If used when building a shared library or program,
this option prevents the named symbol from being visible
to the dynamic loader. - -lx
Search a library
libx.a
or
libx.sl,
where
x
is one or more characters.
The current state of the
-a
option determines whether the archive
(.a)
or shared
(.sl)
version of a library is searched.
Because a library is searched when its name is encountered,
the placement of a
-l
is significant.
By default, 32-bit libraries are located in
/usr/lib
and
/usr/ccs/lib.
64-bit libraries are located in
/usr/lib/pa20_64.
If the environment variable
LPATH
is present in the user's environment,
it should contain a colon-separated list of directories to search.
These directories are searched instead of the default directories, but
-L
options can still be used.
If a program uses shared libraries, the dynamic loader
/usr/lib/dld.sl
for 32-bit or
/usr/lib/pa20_64/dld.sl
for 64-bit
will attempt to load each library from the same directory
in which it was found at link time (see the
+s
and
+b
options). - -l: library
Search the library specified.
Similar to the
-l
option except the current state of the
-a
option is not important.
The library name
can be any valid filename.
(Note that previous
releases required that the library name
contain the prefix
lib
and end with a suffix of
.a
or
.sl.) - -m
This option produces a load map on the standard output. - -n
This option is accepted but ignored by the 64-bit
ld.
Generate an
executable output file with file type
SHARE_MAGIC.
This is the default.
This option is incompatible with
-N
and
-q. - -noshared
This option forces the linker to create a fully archive bound program. - -o outfile
Produce an output object file named
outfile
(a.out
if
-o
outfile
is not specified). - -q
This option is ignored for 64-bit links.
Generate an executable output file
with file type
DEMAND_MAGIC.
This option is incompatible with
-n,
-N,
and
-Q. - -r
Retain relocation information in the output file for subsequent re-linking.
The
ld
command does not report undefined symbols.
This option cannot be used when building a shared library (
-b
) or in conjunction with
-A
or
+ild
incremental linking options. - -s
Strip the output file of all symbol table, relocation,
and debug support information.
This might impair or prevent the use of a symbolic debugger
or a profiler on the resulting program.
This option is incompatible with
-r.
(The
strip(1)
command also removes this information.)
This option is incompatible with
+ild.
(The incremental linking requires the parts of the output load module which
are stripped out with
-s
option.) - -t
Print a trace (to standard output) of each input file as
ld
processes it. - -u symbol
Enter
symbol
as an undefined symbol in the symbol table.
The resulting unresolved reference is useful
for linking a program solely from object files in a library.
More than one
symbol
can be specified, but each must be preceded by
-u. - -v
Display verbose messages during linking.
On 32-bit systems, for each module loaded, the linker indicates which
symbol caused that module to be loaded.
For 64-bit systems, the linker indicates this information only for modules
loaded from archive libraries. - -x
Strip local symbols from the output file.
This reduces
the size of the output file without
impairing the effectiveness of object file utilities.
This option is
incompatible with the
-r
option.
This option is incompatible with the
+ild
option.
The incremental linking requires the parts of the output load
module which are stripped out with the
-x
option. NOTE:
Use of
-x
might affect the use of a debugger or profiler. - -y symbol
Indicate each file in which
symbol
appears.
More than one
symbol
can be specified, but each must be preceded by
-y. - -z
Arrange for run-time dereferencing of null pointers to produce a
SIGSEGV
signal.
(This is the complement of the
-Z
option.) - -B bind
Select run-time binding behavior of a program using shared libraries or
the binding preference in building a shared library.
The most common values for
bind
are:
- direct
Create a direct link between symbol references and shared libraries by
recording the name of the resolved shared library during symbol resolution.
This information is used during runtime to quickly resolve symbols without
searching through all currently loaded libraries. -B direct
implicitly turns on symbolic binding (see
-B symbolic)
and disables dependent shared library processing. Direct binding can be disabled during runtime by setting the
LD_NODIRECTBIND
environment variable. - deferred
Bind addresses on first reference
rather than at program start-up time.
This is the default. - group
Mark the shared library so that it behaves as if loaded with
RTLD_GROUP
flag to
dlopen().
This does not affect the dependent shared libraries. NOTE:
The
-B group
binding mode is currently supported only for 64-bit applications. - immediate
Bind addresses of all symbols immediately upon loading the library.
Commonly followed by
-B nonfatal
to allow procedure calls that cannot be resolved at program start-up
to be resolved on first reference. Since
-B nonfatal
suppresses messages about unresolved symbols, also specify
-B verbose
to display those messages. See the example below. - lazydirect
Only record direct bind information to shared libraries marked for
lazy loading.
See
+[no]lazyload. - nodelete
Mark the shared library so that an explicit unload using
dlclose()
or
shl_load()
returns success silently without detaching the shared library from the
process.
Subsequently, the shared library handle is valid only for
shl_findsym().
It stays invalid for
dlsym(),
dlclose(),
and
shl_unload()
until the next explicit load using
shl_load()
or
dlopen(). - nodirect
Disallow direct binding.
Only a "direct hint" is recoreded for
references to libraries marked for lazy loading.
This is the default behaivor. - nonfatal
If also using
-B immediate,
for code symbols that could not be bound at program startup,
defer binding them until they are referenced.
See description of
-B immediate
above. Since
-B nonfatal
suppresses messages about unresolved symbols, also specify
-B verbose
to display those messages. - restricted
Causes the search for a symbol definition to be restricted to
those symbols that were visible when the library was loaded. - symbolic
Used only when building a shared library (with the
-b
option), this option causes all unresolved symbols inside a library to be
resolved internally if possible.
By default, unresolved symbols are
resolved to the most visible definition in the library or outside the
library. NOTE:
Do not use this option while building aC++ shared libraries
on Integrity systems.
Use the aC++ option
-B protected_def. - verbose
Display verbose messages when binding symbols.
This is the default
except when
-B nonfatal
is specified.
In that case,
-B verbose
must be explicitly specified to get verbose messages.
See the
+help
option or the
HP-UX Linker and Libraries User's Guide
manual for more information on the uses of binding modes. - -D offset
Set the origin (in hexadecimal) for the data segment. When used with the
+ild
option, if you change the offset after the initial incremental link, the
linker performs an initial incremental link automatically. - -E
Mark all symbols defined by a program for export
to shared libraries.
In a 32-bit link or
+compat
mode 64-bit link,
ld
marks only those symbols that are actually referenced by a shared library
seen at link time.
In a 64-bit
+std
link, all symbols are exported by default, so
-E
is not necessary to make symbols visible.
However, it has
an additional side effect of identifying all exported symbols as
necessary, so that they will not be removed when using dead code
elimination
(+Oprocelim). - -Fl lib
Force load all member objects of the archive library
lib.
If you do not use
-Fl,
the linker only loads the needed archive members from
lib.
This option is useful for creating a shared library from an archive library
(if the member objects are position-independent code),
or when you need to load archive member that define symbols needed by shared
libraries. You can specify more than one library on the command line with multiple
option-library pairs; that is, each library you specify must be preceded by
the -Fl option. - -G
Strip all unloadable data from the output file.
This option is typically used to strip debug information. - -I
Instrument the code to collect profile information upon execution.
The profile data gathered during program execution can be used in
conjunction with the
-P
option.
32-bit programs linked with this option should use the startup file
/opt/langtools/lib/icrt0.o.
This option should not be used with the
-P,
-A,
-O,
+ild,
or
+O
options. - -L dir
Search for
libx.a
or
libx.sl
in
dir
before looking in default locations.
More than one directory can be specified,
but each must be preceded by
-L.
The
-L
option is effective only if it precedes the
-l
option on the command line. - -O
Turn on linker optimizations.
Currently the optimizations include the elimination of unnecessary
ADDIL
instructions from the code in the executable file (32-bit only), and the
removal of dead procedures. -O
is passed to the linker by the compilers
when the
+O4
compiler option is selected. This option is incompatible with the
+ild
option. For more details on linker optimizations refer to the
+help
option or the
HP-UX Linker and Libraries User's Guide
manual. - -P
Examine the data file produced by an instrumented program
(see the
-I
option) to perform profile based optimizations on the code.
This option should not be used with the
-A
or
+ild
options. - -Q
Ignored for 64-bit links.
Generate an executable output file with file type
EXEC_MAGIC
or
SHARE_MAGIC,
depending on whether
-N
or
-n
is specified.
This is the default.
This option is incompatible with
-q. - -R offset
Set the origin (in hexadecimal) for the text (i.e., code) segment. When used with the
+ild
option, if you change the offset after the initial incremental link, the
linker performs an initial incremental link automatically. - -T
In 32-bit mode, save the load data and relocation information
in temporary files instead of in memory during linking.
This option reduces the virtual memory requirements of the linker.
If the
TMPDIR
environment variable is set, the temporary files are created
in the specified directory, rather than in
/var/tmp. In 64-bit mode, this option is equivalent to the
+nommap
option. - -V
Output a message giving information about the version of
ld
being used. - -Z
Allow run-time dereferencing of null pointers.
See the discussions of
-Z
and
pointers
in
cc(1).
(This is the complement of the
-z
option.) - -Pd
Reorder debuggable functions.
Ordinarily
-P
does not reorder functions from
.o
files with debugging information, because reordering renders them
non-debuggable.
This option overrides this and reorders the functions.
Reordering is based on link order file produced from
flow.data
by default.
If you specify the
-PF
option, the linker uses the specified link order file, instead of
flow.data,
for reordering.
This option is incompatible with
+ild. - -PD filename
Save link order file generated by
fdp
during linking with
-P
option into user-specified file.
This option is incompatible with the
+ild
option. - -PF filename
Indicate to the linker to use the specified file for the linker file
instead of generating it using
/usr/ccs/bin/fdp.
This option is incompatible with the
+ild
option. - +afs func_sym_x=func_sym_y ...
Instruct the linker to replace the function symbol with an alternate function
symbol in shared library and executable file links. The
+afs
option supports function symbol aliasing.
Often user programs have
functions that exactly match the functionality
of optimized library functions with a different name.
These user-defined
functions are usually called frequently in the program.
With the
+afs
option, you can make significant gains in performance by replacing all
references to a user-defined function with references to a tuned library
function during link time, thus optimizing these functions with just a
relink. Both functions must define the same number and type of parameters, and return
a value of the same type.
If they do not match, the results are unpredictable,
and the linker does not generate a warning message. Example: $ ld
... +afs func_sym1=func_sym2 ... In the example, the linker replaces all references to the
function symbol
func_sym1
with references to
func_sym2.
The
func_sym2
symbol should be an normal unaliased symbol.
It cannot appear on the
left-hand side of "=" on another
+afs
option. You can specify more than one function symbol alias
on the command line with multiple option-symbol
pairs, that is, each symbol pair you specify must be
preceded by the
+afs
option. - +allowdups
Allows multiple symbol definitions.
By default, multiple
symbol definitions that occur between relocatable objects
will result in a fatal error condition.
This option
suppresses the error condition and allows the first symbol
definition to be taken. - +b path_list
Specify a colon-separated list of directories
(embedded path) to be searched at program run-time to
locate shared libraries needed by the executable
output file that were specified with either the
-l
or
-l:
option. An argument consisting of a single colon
(:)
indicates that
ld
should build the list using all the directories specified by the
-L
option and the
LPATH
environment variable (see the
+s
option). For 32-bit links, if multiple
+b
options appear on the link line, the FIRST one specified is recorded.
Also, a double colon
(::)
is interpreted as location in which libraries are found at link time. For 64-bit links, the LAST of multiple
+b
options is recorded in the output file.
A double colon
(::)
does not have special meaning (i.e., treated as NULL entry). - +compat
This option is ignored for 32-bit links.
This option turns on compatibility mode in the linker — 64-bit links mimic
behavior of 32-bit links). - +copyobjdebug
Copy objdebug space. - +df file
Used together with the
-P
option, this option specifies that
file
should be used as the profile database file.
The default value is
flow.data.
See the discussion of the
FLOW_DATA
environment variable for more information.
This option is incompatible with the
+ild
option. - +e symbol
When building a shared library or program,
mark the symbol for export to the dynamic loader.
Only symbols explicitly marked are exported.
When building a shared library,
calls to symbols that are not exported are resolved internally. - +ee symbol
This option is similar to the
+e
option in that it exports a
symbol.
However, unlike the
+e
option,
+ee
does not alter the
visibility of any other symbol in the file.
In a 32-bit link or
+compat
mode 64-bit link, it has the effect of exporting the specified
symbol without hiding any of the symbols exported by default.
In a 64
+std
link, all symbols are exported by default, so
+ee
is not necessary to make a symbol visible.
However, it has
the additional side effect of identifying the symbol as
necessary, so that it will not be removed when using dead code
elimination
(+Oprocelim).
Of course,
+ee
still retains its
export behavior if an option such as
+hideallsymbols
is also given. - +fb
Instructs the linker to run the fastbind tool
on the executable it has
produced.
The executable should be linked with shared libraries.
For more
details refer to
fastbind(1),
the
+help
option, or the
HP-UX Linker and Libraries User's Guide
manual.
This option is incompatible with the
+ild
option. - +fbu
Pass the
-u
option to the fastbind tool.
For more details refer to
fastbind(1),
the
+help
option, or the
HP-UX Linker and Libraries User's Guide
manual.
This option is incompatible with the
+ild
option. - +filter shared_library_path
Enables the shared library filter mechanism, which allows you
divide a large library into a "filter" and several "implementation"
libraries for more efficient organization of shared libraries.
shared_library_path
specifies the location of the filter library.
See the
HP-UX Linker and Libraries User's Guide
for more information. - +fini function_name
Specify the terminator (finalizer) functions to be invoked in
forward order, the order the functions appear left
to right on the command line.
The terminator functions are
called in reverse of the depth-first order of initializers. Use this option while building a shared library, an
incomplete executable, or fully bound executable.
Functions
specified with this option should take no arguments and return nothing
(void functions).
Terminators are invoked only if
main()
calls
exit().
They are not called if
main()
calls
return(). Do not use
+fini
with the
-r
option.
(The linker ignores the
+fini
option.) You can specify more than one terminator function
on the command line with multiple option-symbol
pairs, that is, each function you specify must be
preceded by the
+fini
option. For more details on the terminator function, use the
+help
option or see the
HP-UX Linker and Libraries User's Guide. - +gst
Enable the global symbol table hash mechanism,
used to look up values of symbol import/export entries.
The
+gst
and related options provide performance enhancements through use
of global symbol table which improves searching for exported symbols.
See
dld.sl(5)
and the
HP-UX Linker and Libraries Online User Guide
for more information. - +gstsize size
Request a particular hash array size using the global symbol
table hash mechanism.
The default value is 1103.
The value can be
overridden at runtime by setting the
_HP_DLDOPTS
environment variable to the value
-symtab_size
prime number.
You can set the value using
chatr +gstsize
size
file. - +h internal_name
When building a shared library, record
internal_name
as the name of the library.
When the library is used to link another
executable file (program or shared library), this
internal_name
is recorded in the library list of the resulting output file instead of the
file system pathname of the input shared library. That is, if
+h
is not used, the shared library does not have an internal name and
when an executable is built with the shared library, the linker records the
library name that it looks at. If
internal_name
is a fully-qualified pathname, it is recorded
as is
in the library list of any executable file it is subsequently linked against.
internal_name
is a relative pathname or no directory component was specified,
internal_name
is
appended
to the file system directory component of the input shared library in the
library list of any executable file it is
subsequently linked against. If more than one +h option is seen on the link line, the first
one is used and a warning message is emitted. - +help
Starts the help window utility
HP-UX Linker and Libraries Online User Guide
which comes with some HP compilers.
(You must be running the X window
system and your
DISPLAY
environment variable must be set to the name of your workstation or
X terminal.) For more information, refer to the
HP-UX Linker and Libraries User's Guide
manual.
See
manuals(5)
for ordering information. - +init function_name
Specify the initializer functions to be invoked in reverse order, the order
the functions appear right to left on the command line.
Initializers are
called in depth-first order.
For example, when a shared library is loaded,
the initializers in all its dependent libraries are called first. Use this option while building a shared library, an
incomplete executable, or fully bound executable.
Functions
specified with this option should take no arguments and return nothing
(void functions).
Terminators are invoked only if
main()
calls
exit().
They are not called if
main()
calls
return(). Do not use
+init
with the
-r
option.
(The linker ignores the
+init
option.) You can specify more than one initializer function
on the command line with multiple option-symbol
pairs, that is, each function you specify must be
preceded by the
+init
option. For more details on the initializer function, use the
+help
option or see the
HP-UX Linker and Libraries User's Guide. - +[no]inputmmap
+inputmap
enables the feature to use
mmap
for reading the contents of shared libraries during linking.
This is the default behavior.
Linking is usually much faster when input shared libraries are
mmapped, as compared to buffered reading from disk. +noinputmmap
disables the mmap feature and tells the linker not
to mmap text segments of input shared libraries.
The linker uses buffered disk i/o
(fread)
to access information from the text segments of input
shared libraries. NOTE:
Use
+noinputmmap
only in cases where the link
fails because of mmap failures due to lack of
memory, as it can significantly increase the link
time due to disk I/O. - +interp file
Change the
dld
path to use the argument as the "interpreter"
program instead of the
dld.sl. - +k
Direct the linker to only create an executable if there were
no errors encountered during the link.
If there were errors
found (system errors or unresolved references), the output file
will be removed. - +mergeseg
Enables shared library segment merging feature.
See description
of shared library segment merging in the
HP-UX Linker and Libraries User's Guide.
This enables all the data segments of the shared libraries
loaded at program startup to be merged.
This increases run-time
performance by allowing the kernel to use larger size page
table entries. - +mmap
Enables the feature to use
mmap
for writing the output data.
This is the default behavior.
Linker enabled with
mmap
is much faster. - +n
Causes the linker to load all object modules before searching
any archive or shared libraries.
Then it searches the archive and shared
libraries specified on the command line in left to right order.
Repeats
the left to right search of the libraries on the command line until
there are no more unsatisfied symbols, or the last search added no
new definitions.
This option is useful if two libraries are specified
that have symbol dependencies on each other. - +nocopyobjdebug
Do not copy objdebug space.
Use this option (with
-r
object files on the link line) to suppress the default behavior of
copying LINKMAP space to the executable file. - +noobjdebug
Override the
+objdebug
compiler option, and copy all debug information to the executable file. When used with
-g,
+objdebug
leaves debug information in the object files
instead of copying it to the executable file at link time, resulting in
shorter link times and smaller executables.
The compile-time default,
+noobjdebug,
copies the debug information to the executable file. When you specify
-g
when compiling, the compiler places symbolic
debugging information into the object files.
By default, the linker calls
pxdb
which compacts this debug information and copies it to the executable
file.
When
+objdebug
was used at compile time, the linker leaves the debug
information in the object files.
To debug the executable file, the HP WDB
debugger must have access to the object files.
If you move the object files,
use HP WDB's
objdir
command to tell it where the object files are.
The
+objdebug
option reduces link time
and the size of the executable file by avoiding this copying of debug
information. The compile-time default is
+noobjdebug.
If the linker detects any object
files that were compiled with
+objdebug,
it leaves the debug information
in those files.
Any object files not compiled with
+objdebug
have their debug information copied into the executable file.
You can leave
debug information in some object files and not in others. When archive members are not compiled with
+objdebug
(and they contain debug information, that is, they were compiled with
-g),
the debug information from the archive members is copied into the
a.out
by default.
The linker does not copy debug information from shared
libraries into the
a.out,
regardless of whether they are compiled with
+objdebug
or
+noobjdebug. Use the
+noobjdebug
option when linking to explicitly tell the linker to copy all debug
information to the executable file, even from files compiled with
+objdebug. - +nomergeseg
Disables the shared library segment merging feature.
This is the
default. - +nommap
Disables the
mmap
feature and uses the normal buffering method to write into the
output file.
NOTE:
Do not use
+nommap
unless in cases like the system has very low memory and
the linker fails because of this. - +objdebugonly
Ignore debug information from non-objdebug objects or
archives and proceed in
+objdebug
mode.
This option can be passed from the C or C++
compiler command line as
-Wl,+objdebugonly.
If you are debugging only files compiled with the
+objdebug
option,
+objdebugonly
can improve link time by instructing the linker to bypass the processing
of debug information from files compiled
with
+noobjdebug.
With the
+objdebugonly
option, the linker suppresses the call to
pxdb. - +origin shared_library_name -lx
(Use only before the
-l
option or the name of a shared library.) Cause the linker to add
$ORIGIN
before the shared library name in the shared library list.
At
runtime, the dynamic loader determine the current directory
of the parent module (shared library or executable) and
replaces
$ORIGIN
for that directory name. Example: $ ld
-dynamic main.o +origin libx.sl -L /usr/lib/ -lc While the
+origin
option is available, the recommended way to specify
$ORIGIN
is in the embedded path with the
+b
option, for example, $ ld
-dynamic main.o -L /usr/lib/ -lc +B $ORIGIN For more details on $ORIGIN, use the +help option
or see the
HP-UX Linker and Libraries User's Guide. - +pd size
Request a particular virtual memory page size that should be used for data.
Sizes of
4K,
16K,
64K,
256K,
1M,
4M,
16M,
64M,
256M,
D,
and
L
are supported.
A size of
D
allows the kernel to choose what page size should
be used.
A size of
L
will result in using the largest page size available.
The actual page size may vary if the requested size cannot
be fulfilled. - +pgm name
Used together with the
-P
option, this option specifies that
name
should be used as the look-up name in the profile database file.
The default is the basename of the output file (specified by the
-o
option.) This option is incompatible with the
+ild
option. - +pi size
Request a particular virtual memory page size that
should be used for instructions.
See the
+pd
option for additional information. - +profilebucketsize size
Controls the size of profiling counters.
The acceptable
value for this variable is 16 or 32.
A warning is issued
if the value specified is other than 16 or 32.
The
default value of the counter is 16, which is used if a valid
value is not specified.
Value at linktime can be overridden
by using
PROFILE_BUCKET_SIZE
environment variable.
See the
description in
gprof(1)
for more details. - +s
Indicates that at run-time, the shared library loader
can use the environment variable
SHLIB_PATH
and
LD_LIBRARY_PATH
(64-bit only) to locate shared libraries needed by the executable
output file that were specified with either the
-l
or
-l:
option.
The
environment variables should be set to a colon-separated list of
directories.
If both
+s
and
+b
are used, their relative order on the command line
indicates which path list will be searched first (see the
+b
option). - +std
This option is ignored for 32-bit links.
Turns on standard mode, which is the default in 64-bit mode.
Options turned on with
this option are:
-dynamic.
Options turned off or ignored when this option is specified are:
+compat,+noenvvar,-noshared. - +vallcompatwarnings
This option is accepted but ignored by the 64-bit
ld.
Show more detail for any warnings about
compatibility issues.
By
default, only a terse message is printed.
See the
WARNINGS
section below for further details. - +v[no]compatwarnings
This option is accepted but ignored by the 64-bit
ld.
Enable [disable] printing warnings about compatibility
issues between systems.
This includes any functionality which may
change in future releases.
The default is
+vcompatwarnings.
See the
WARNINGS
section below for further details. - +v[no]shlibunsats
Enable [disable] printing a list of unsatisfied
symbols used by shared
libraries.
The default is
+vnoshlibunsats.
Some unsatisfied symbols reported by the linker are not required at run
time because the modules which reference the symbols are not used. - +FP flag
Specify how the environment for floating-point
operations should be initialized at program
start-up.
By default, modes are specified by the
IEEE floating-point standard: all traps disabled,
gradual underflow, and rounding to nearest.
The
+FP
option supports the following modes
(upper case flag enables; lower case flag disables):
- V (v)
Trap on invalid floating-point operations - Z (z)
Trap on divide by zero - O (o)
Trap on floating-point overflow - U (u)
Trap on floating-point underflow - I (i)
Trap on floating-point operations that produce inexact results. - D (d)
Enable sudden underflow (flush to zero) of denormalized values. - RU
Enable rounding upward (toward +Infinity). - RD
Enable rounding downward (toward -Infinity). - RZ
Enable rounding toward zero (truncate, chop). - RN
Enable rounding to nearest (the default). NOTE:
Enabling sudden underflow is an undefined operation on
PA-RISC
1.0-based systems,
but it is defined on all subsequent versions of
PA-RISC.
Selecting this flag enables sudden underflow
only if it is available on the processor being used at run-time.
More than one mode can be specified with a
comma separated list.
For example: +FP D,O,V,RZ specifies sudden underflow, trapping on overflow
and invalid, and rounding toward zero.
The commas
and the space between
+FP
and the modes may be omitted.
Thus,
+FPDOVRZ
is equivalent to
+FP D,O,V,RZ. To dynamically change these settings at run-time, see
fesettrapenable(3M),
fesetflushtozero(3M),
and
fesetround(3M). - +I symbol
Specify the name of the initializer function
when building a shared library.
A shared library may have multiple
initializers specified.
Initializers are executed in the order that they
are specified.
You can specify more than one initializer, but each must
be preceded by
+I.
For more details on the initializer function, refer to the
+help
option or the
HP-UX Linker and Libraries User's Guide
manual. - +O[no]fastaccess
Enable [disable] fast access to global data.
The linker rearranges the
data to further reduce the number of
ADDIL
instructions in the executable. This optimization may reveal some subtle programming errors related to
assumptions about data layout.
This optimization can occur at optimization
levels 2, 3 and 4.
The default is
+Onofastaccess
at optimization levels 2 and 3, and
+Ofastaccess
at optimization level 4. Using the
+Ofastaccess
option
in the presence of debug information generates
a warning message and can cause corruption of the debug information.
Avoid using
+Ofastaccess
with the
-g
option. This option is accepted but ignored by the 64-bit
ld. - +O[no]procelim
Enable [disable] the elimination of procedures and data that are not
referenced by the application.
The default is
+Onoprocelim. Procedure and data elimination can occur at any optimization level, i
ncluding level 0.
The elimination occurs on a per section basis;
the section is removed only if all procedures/data in the section are
unreferenced.
For more details refer to the
+help
option or the
HP-UX Linker and Libraries User's Guide
manual.
This option is incompatible with the
+ild
option. Note that compilers may set
+Oprocelim
for higher optimization levels; refer to compiler documentation for detail. - +Oreusedir=dir
Specify the name of the directory to use as the reuse repository for
the object code reuse feature.
This directory holds the compiled object
files for reuse.
dir
can be an absolute or relative path to directory where you invoked the
linker.
The
+Oreusedir
option shortens link time by not recompiling intermediate object
code to object code when using
+O4
or profile-based optimization. - +Oselectivepercent n
Instructs the interprocedural optimizer driver to pass the first
n
percent of the object files to the high level optimizer for interprocedural
optimizations such as inlining. - +Oselectivesize size
Instructs the interprocedural optimizer driver to
pass the first k routines to the high level optimizer for
interprocedural optimization where the size of k
routines are approaching but less than
size. - +OselectiveO3
Instructs the interprocedural optimizer driver to
compile the routines not
included in the +O4 list to be compiled at +O3. - +Ostaticprediction
Meaningful only on PA-RISC 2.0 architecture, this option
sets the branch prediction bit in the output executable file's auxiliary
header.
PA-RISC 32-Bit Options- -A name
This option specifies incremental loading.
Linking is arranged so that the resulting object
can be read into an already executing program.
The argument
name
specifies a file whose symbol table provides the
basis for defining additional symbols.
Only newly linked material is entered into the text and data portions of
a.out,
but the new symbol table reflects all symbols defined
before and after the incremental load.
Also, the
-R
option can be used in conjunction with
-A,
which allows the newly linked segment
to commence at the corresponding address.
The default starting address is the old value of
_end.
The
-A
option is incompatible with
-r
and
-b.
Also note that a program that dynamically loads code with
ld -A
cannot use shared libraries.
See the
+help
option or the
HP-UX Linker and Libraries User's Guide
manual for a description of this option. - -C n
Set the maximum parameter-checking level to
n.
The default maximum is 3.
See the language manuals for the meanings of the parameter-checking level. - -Fw
Don't emit unwind tables.
Do not use this option if your compiler or tools require unwind tables. - -Fz
Disable the linker feature that translates some calls to
$$dyncall_external
to calls to
$$dyncall. - -N
Generate an executable output file with file type
EXEC_MAGIC.
This option is incompatible with
-n
and
-q.
This option causes the data to be placed immediately following the text,
and makes the text writable.
Files of this type cannot be shared. - -S
Generate an Initial Program Loader (IPL) auxiliary header
for the output file, instead of the default HP-UX auxiliary header. - +cdp oldpath:newpath
Replace the recorded path for a shared
library in the
a.out.
In 32-bit mode,
ld
records the absolute path names of any
shared libraries searched at link time in the
a.out
file.
When the program begins execution, the dynamic loader
attaches any shared libraries that were searched at link
time.
Although you can use the
+b
and/or
+s
linker options to direct the dynamic loader to directories
to search for the shared libraries, the dynamic loader, as
a last resort, searches for the shared libraries in its
absolute, recorded path in the
a.out.
You can specify more than one shared library
oldpath:newpath,
but each must be preceded by the
+cdp
option. - +cg pathname
Specify the use of
pathname
as the code generator for compiling ISOMs to
SOMs.
See the discussion of profile based optimization
in the
HP-UX Linker and Libraries Online User's Guide
for more information. - +dpv
Display verbose messages regarding procedures which have been
removed due to dead procedure elimination.
The symbol name,
input object file, and the size (in bytes) of the deleted
procedure are displayed.
The total size (in bytes) of the
deleted procedures is also displayed. - +ea filename
Exports all the symbols in the file
filename. - +gstbuckets size
Request a particular number of buckets per entry using the global symbol
table hash mechanism.
The default value is 3.
The value can be
overridden at runtime by setting the
_HP_DLDOPTS
environment variable to the value
-symtab_buckets
number.
You can set the value using
chatr +gstbuckets
size
file. - +nosmartbind
Disable SmartBind when binding a shared library.
With this option
enabled, the linker places all symbols in the link into a single
SmartBind module instead of placing each
.o
file in its own module. - +plabel_cache
Enable the plabel caching mechanism.
Use this option with the
+gst
option. This option is only effective with C++.
In C++ applications, the dynamic loader needs
to repetitively access
PLABEL
information (import stub).
In
order to make this access faster, the dynamic loader uses
the global symbol table structure to also contain
PLABEL
entries.
This behavior is enabled when the
PLABEL_CACHE
flag
is set in the dl_header structure
(enabled
ld +plabel_cache enable a.out
or
chatr +plabel_cache enable a.out).
PA-RISC 64-Bit Options- -k filename
Specify a mapfile that describes the output file memory map. The user specified mapfile specifications are permitted with the
+ild
option.
But you should not modify the mapfile after the initial incremental
link.
If the mapfile is modified after the initial link, an initial
incremental link is performed automatically. Please refer to
HP-UX Linker and Libraries User's Guide
guide for more information.
Also see
+nodefaultmap. - -symbolic symbol
When building a shared library, causes the linker to resolve all references
to the specified symbol to the symbol defined in the library.
This option
is similar to
-B symbolic,
but operates on a per symbol basis. You can specify more than one
symbol
on the command line with multiple option-symbol pairs, that is,
each
symbol
you specify must be preceded by the
-symbolic
option. symbol
can also be a regular expression that matches multiple symbol names.
Regular expressions are described in
regexp(5). - -w
Suppress all warnings. - +alloc_hidden_commons
Force storage allocation for hidden "common" symbols in
-r
output.
This is similar to the
-d
option, which allocates storage for all "common" symbols.
If
+alloc_hidden_commons
is specified in combination with the
-d
option,
-d
will take precedence. - +allowrorelocs
(Kernel virtual environment support only.)
Allow generation of dynamic relocations in read-only
sections such as
.text
and
.rodata.
Normally the linker emits an error message when a dynamic relocation
is required in read-only sections.
See
Kernel Virtual Environment Support
for more information. - +[no]allowunsats
+allowunsats
Does not flag errors if the resulting output file has unsatisfied symbols.
This is the default for relocatable links and shared library builds.
+noallowunsats
Flags an error if the resulting output file has unsatisfied symbols.
This
is the default for program files. - +[no]defaultrpath
+defaultrpath
is the default.
Include any paths that are specified with
-L
in the embedded path, unless you specify the
+b
option.
If you use
+b,
only the path list specified by
+b
is in the embedded path. The
+nodefaultrpath
option removes all library paths that were specified with the
-L
option from
the embedded path.
The linker searches the library paths specified by the
-L
option at link time.
At run time, the only library paths searched are
those specified by the environment variables
LD_LIBRARY_PATH
and
SHLIB_PATH,
library paths specified by the
+b
linker option, and finally the default library paths. - +[no]forceload
+forceload
loads all object files from archive
libraries.
+noforceload
is the default — loads only the required object files from archive
libraries.
The mode that is selected, either explicitly or by default, remains on until
it is changed. - +hideallsymbols
This option is used to prevent all the symbols from being exported unless
explicitly exported with the
+e. - +ild
Specify incremental linking. If the output file does not exist, or if it was created without the
+ild
option, the linker performs an initial incremental link.
The output file produced is suitable for subsequent incremental links.
The incremental link option is valid for both executable and shared library
links. NOTE:
The HP WDB symbolic debugger only supports debugging of incrementally linked
load modules that you create with the
+objdebug
compiler option enabled.
(The HP DDE debugger does not support the
+ild
option.) To debug incrementally linked binaries, they should be compiled
and linked with both
+ild
and
+objdbg. If you specify one of the following incompatible
ld
option with
+ild,
the linker emits a warning message and ignores the
+ild
option.
The
-r
option:
create a relocatable object file. Strip options:
-s
and
-x
strip the output file.
(The incremental linking requires the parts
of the output load module which are stripped out with these options.) Optimization options:
-I,
-O,
-P,
-PD,
-PF,
+df
file,
+fb,
+fbu,
+fbs,
+pgm
name,
and
+Oprocelim.
The following options are compatible with the
+ild
option with limitations:
-D offset, -R offset Set the origin for the data and text segments.
If you change the offset
after the initial incremental link, the linker performs an initial
incremental link automatically. -k mapfile provide a non-default mapfile.
The user specified mapfile
specifications are permitted with the
+ild
option.
But you should not modify
the mapfile after the initial incremental link.
If the mapfile is
modified after the initial link, an initial incremental link is
performed automatically.
- +ildnowarn
Suppress incremental-linking related warnings.
By default, the linker issues
all incremental-linking related warnings.
This option is ignored if used
without
+ild
or
+ildrelink. - +ildpad percentage
Control the amount of padding
percentage
the incremental linker allocates,
relative to sizes of object file structures being padded.
By default the
linker allocates 25% of padding space.
This option is ignored if used without
+ild
or
+ildrelink. - +ildrelink
Perform an initial incremental link, regardless of the output load
module. In certain situations (for example, internal padding space is exhausted)
the incremental linker is forced to perform an initial incremental link.
The
+ildrelink
option allows you to avoid such unexpected initial
incremental links by periodically rebuilding the output file. - +interposer
Used only when building a shared library.
This creates a shared
library that can be used for interposition.
When resolving references
for an application with direct binding information (see
-B direct),
the dynamic loader searches interposer libraries first.
If the symbol
cannot be resolved to any interposing libraries, the direct binding
information is used. - +[no]lazyload
Enable [disable] lazy loading of shared libraries.
Loading of shared libraries
specified as +lazyload is deferred until a reference is made to it
during execution. Dependent libraries of +lazyload shared libraries will not be processed during
link time, unless they are explicitly specified on the link line. Lazy loading can be disable during runtime by setting the
LD_NOLAZYLOAD
environment variable. - +linkersyms
(Kernel virtual environment support only.)
Create linker-generated symbols even if building a shared
library.
The kernel with virtual environment support is built with the
-b
option which by default does not create linker-generated symbols in
shared libraries.
See
Kernel Virtual Environment Support
for more information. - +nobss
Pads the data segment with zeros, so that the data segment can be mapped
with a single call to
mmap
at runtime.
Normally, data segments require
one
mmap
call for file-backed storage and a second
mmap
call for blank
static storage (bss).
Use of this option increases your output file size. - +nodefaultmap
This option tells the linker not to use the default memory map.
The user
needs to supply a mapfile through the
-k
linker option. - +nodynhash
Disables the default linker behavior of the
+gst
option to create the .dynhash section for executables or shared libraries.
Use this option to eliminate generation of pre-computed hash table
information for a library or an executable that is rarely used with the
global symbol table lookup scheme or for which the overhead of storing
pre-computed hash values is too high.
This option has no effect when
used with the
-r
option. - +noenvvar
Instructs the dynamic loader to not look at the
LD_LIBRARY_PATH
,
SHLIB_PATH
and
$ORIGIN
environment variables at runtime.
This is turned on if
ld +compat
is specified.
(The dynamic loader, however, uses the
LD_PRELOAD
environment variable with the
+noenvvar
option.)
This is turned off by default or if
ld +std
is specified.
See
+compat
or
+std.
Generally, this option is used for secure programs (e.g.
setuid). - +noprocelim_sym symbol [+noprocelim_sym symbol]...
Do not remove
symbol
when using dead code elimination
(+Oprocelim).
This option can be used for hidden symbols as well as
exported symbols. You can specify more than one
symbol
on the command line with multiple option-symbol pairs, that is,
each
symbol
you specify must be preceded by the
+noprocelim_sym
option. - +nosectionmerge
Used with the
-r
option to allow procedures to be positioned
independently.
The default is to merge all procedures into a
single section. - +nosymb symbol
When building a shared library with
-B symbolic,
causes the linker to exclude the specified symbol from
-B symbolic
symbol resolution. You can specify more than one
symbol
on the command line with multiple option-symbol pairs, that is,
each
symbol
you specify must be preceded by the
+nosymb
option. symbol
can also be a regular expression that matches multiple symbol names.
Regular expressions are described in
regexp(5). - +paddata pagesize
Pads the data segment to a multiple of
pagesize
with zeros.
This can improve page allocation, thus reduce TLB misses. - +padtext pagesize
Pads the text segment to a multiple of
pagesize
with zeros.
This can improve page allocation, thus reduce TLB misses. - +pdzero
Generates a zero page of 4K bytes at the beginning of the data
segment.
It also sets the default starting address of
the data segment to 0x8000000000000000.
This option improves performance
by reducing TLB misses by allowing the kernel to allocate bigger data pages. - +stripunwind
Do not output the unwind table.
This creates smaller executable sizes.
Use this option if you do not need the unwind table for debugging or C++
exception handling. - +tools
Request that the application be linked for profiling with CXperf. - +vtype type
Produces verbose output about the link operation.
type
can have the following values:
- files
Dump info about each object file loaded. - heap
Dump info about the size of the heap used by a link. - libraries
Dump info about libraries searched. - procelim
Dump info about sections that have been rejected by the
+Oprocelim
option - sections
Dump info about each input section added to the output file. - symbols
Dump info about global symbols referenced/defined from/in the input files. - all
Dumps all of the above info.
Same as
-v.
DefaultsUnless otherwise directed,
ld
names its output
a.out.
The
-o
option overrides this.
Executable output files are of type
SHARE_MAGIC.
The default state of
-a
is to search shared libraries if available, archive libraries otherwise.
The default bind behavior is
deferred. The default value of the
-Z/-z
option is
-Z. For 64-bit mode,
+std
is on by default. Incremental linking with ld (64-bit Mode ONLY)In the edit-compile-link-debug development cycle, link time is a significant
component.
The incremental linker (available through the
+ild
and
+ildrelink options)
can reduce the link time by taking advantage
of the fact that you can reuse most of the previous version of the program
and that the unchanged object files do not need to be processed.
The
incremental linker allows you to insert object code into an output file
(executable or shared library) that you created earlier, without relinking
the unmodified object files.
The time required to relink after the initial
incremental link depends on the number of modules you modify. The linker performs the following different modes of linking: normal link:
the default operation mode in which the linker links all modules. initial incremental link:
the mode entered when you request an
incremental link, but the output module created by the incremental linker
does not exist, or it exists but the incremental linker is unable to
perform an incremental update. incremental link:
the mode entered when you request an incremental
link, an output module created by the incremental linker exists, and
the incremental linker does not require an initial incremental link.
Incremental links are usually much faster than regular links.
On the initial
link, the incremental linker requires about the same amount of time that a
normal link process requires, but subsequent incremental links can be much
faster than a normal link.
A change in one object file in a moderate size
link (tens of files, several megabytes total) normally is about 10 times
faster than a regular
ld
link.
The incremental linker perform as many
incremental links as allocated padding space and other constrains permit.
The cost of the reduced link time is an increase in the size of the
executable or shared library. The incremental linker allocates padding space for all components of the
output file.
Padding makes modules larger than those modules linked by
ld.
As object files increase in size during successive incremental links, the
incremental linker can exhaust the available padding.
If this occurs,
it displays a warning message and does a complete initial incremental link
of the module.
When an object file changes, the incremental linker not
only replaces the content of that file in the executable or shared library
being linked, but also adjusts references to all symbols defined in the
object file and referenced by other objects.
This is done by looking at
relocation records saved in the incrementally linked executable or shared
library. On the initial incremental link, the linker processes the input object files
and libraries in the same way as the normal link.
In addition to the normal
linking process, the incremental linker saves information about object
files, global symbols, and relocations, and pads sections in the output
file for expansion.
On subsequent incremental links, the linker uses
timestamps and file sizes to determine which object files have changed,
and updates those modules. Under certain conditions, the incremental linker cannot perform incremental
links.
When this occurs, the incremental linker automatically performs an
initial incremental link to restore the process.
In the following situations,
the linker automatically performs an initial incremental link of the output
file: Changed linker command line, where the linker command line does not
match the command line stored in the output file.
(With the
exceptions of the verbose and tracing options) Any of the padding spaces have been exhausted. Modules have been modified by the
ld -s
or
ld -x
options or tools (for example,
strip(1)).
The incremental linking requires the parts of the
output load module which are stripped out with these options. Incompatible incremental linker version, when you run a new version of
the incremental linker on an executable created by an older version. New working directory, where the incremental linker performs an initial
incremental link if current directory changes. Archive or shared libraries are added/removed to/from the linker command
line. Objects are added/removed to/from the linker command line.
See the
Online Linker and Libraries User's Guide
(ld +help)
for more information. Archive Library Processing The incremental linker searches an archive library if there are unsatisfied
symbols.
It extracts all archive members satisfying unsats and processes them
as new object files.
If an archive library is modified, the linker replaces
the modified archive library. An object file extracted from an archive library in the previous link
remains in the output load module even if all references to symbols defined
in the object file have been removed.
The linker removes these object files
when it performs the next initial incremental link. Shared Library Processing In an initial incremental link, the linker scans shared library symbol
tables and resolves unsats the same way it would in a regular link.
In
incremental links, the linker does not process shared libraries and their
symbol tables at all and does not report shared library unsats.
The dynamic loader detects them at run time.
If any of the shared libraries
on the command line was modified, the linker reverts to an initial
incremental link. Performance Performance of the incremental linker may suffer greatly if you change a
high percentage of object files. The incremental linker may not link small programs much faster, and the
relative increase in size of the executable is greater than that for larger
programs. Generally, the linker needs to scan through all shared libraries on a
link line in order to determine all the unsats, even in incremental links.
This process may slow down incremental links.
The incremental linker does
not scan shared libraries and leaves detection of shared library unsats
to the dynamic loader. Do not use the incremental linker to create final production modules.
Because it reserves additional padding space, modules created by the
incremental linker are considerably larger than those created in regular
links. Notes The HP WDB symbolic debugger only supports debugging of incrementally linked
load modules that you create with the
+objdebug
compiler option enabled.
(The HP DDE debugger does not support the
+ild
option. Any program that modifies an executable (for example,
strip(1)),
may affect the ability of
ld
to perform an incremental link.
When this happens, the incremental linker
issues a message and performs an initial incremental link. Third-party tools that work on object files may have unexpected results on
modules produced by the incremental linker. Kernel Virtual Environment SupportFor virtual environment support for the kernel, build your kernel with the
following linker options (instead of the
-noshared
option):
$ ld
... -B symbolic -b +hideallsymbols +allowrorelocs +linkersyms ...
By using these options, you create the kernel as a self-contained shared
library with no exported symbols (with the
-B symbolic,
-b,
and
+hideallsymbols
options).
Because the kernel contains references to
linker-generated symbols such as
_etext,
_end,
and
_edata,
the
+linkersyms
option instructs the linker to create these symbols (which it does not do
for shared libraries by default).
The kernel contains direct calls and
relocations in read-only data space.
Normally these are applied at link time
and are fixed up to link-time virtual addresses.
In the case of relocatable
kernels, the linker needs to create dynamic relocations to fix up these
references at run-time.
The
+allowrorelocs
option instructs the linker
to allow dynamic relocations in read-only sections (Normally the linker
issues an error message). Security RestrictionsOn a system that supports fine-grained privileges, if a process
gains any privileges from the binary's extended attributes, dynamic path
lookup is disabled.
Similarly, on a system that supports compartments,
if a process changes compartment due to the binary's
extended attributes, the dynamic path lookup is disabled.
See
setflexsec(1M)
on how to set extended attributes on a binary.
See
privileges(5)
and
compartments(5)
for more information about privileges and compartments. Linking Secure ProgramsSecure programs are programs that are commonly run by privileged users,
such as
root,
or programs that run with elevated privileges due to
setuid
or
setgid
protection.
Special precautions should be taken
when linking secure programs that use shared libraries.
The default linker behavior may be sufficient for 32-bit
applications, but not for 64-bit applications. Secure 64-bit programs should be linked with the option
+noenvvar
to disable the use of
SHLIB_PATH
and
LD_LIBRARY_PATH
for locating shared library dependencies.
Secure 64-bit programs should also link with
+nodefaultrpath
to prevent the automatic construction of
an embedded search path based on search directories specified with
-L
options.
Most directories searched at link time don't
need to be searched at run time, and if these directories are
specified as relative paths, they expose the program to the
same security risks as the use of
SHLIB_PATH
and
LD_LIBRARY_PATH. Normal programs that depend on libraries that only exist in
a directory specified in
SHLIB_PATH
or
LD_LIBRARY_PATH
(64-bit mode only) must be linked with
+s
to enable searching
SHLIB_PATH
and
LD_LIBRARY_PATH.
Programs that depend on
SHLIB_PATH
or
LD_LIBRARY_PATH
cannot be protected as setuid or setgid programs. dld
uses the dynamic path lookup (with
SHLIB_PATH
and
LD_LIBRARY_PATH)
only if the following conditions are satisfied:
getuid() == geteuid() && getgid() == getegid() That is, if the
uid
or
gid
does not match its effective counterpart,
dld
does not check the directories specified in
SHLIB_PATH
and
LD_LIBRARY_PATH,
which causes the runtime error "library not found". EXTERNAL INFLUENCESEnvironment VariablesThe following environment variables affect the execution of
ld:
- BROWSER
Specifies the path name of the HTML browser to display the
HP-UX Linker and Libraries Online User's Guide
when you use the
+help
option. - ENABLE_PBO_FORK
By default, when an instrumented executable (see the
-I
option) writes the profile data, it creates a separate process which
runs in the background; and the main process exits.
If this
environment variable is set to "OFF", then a separate process
is not created but the same process writes out the profile data.
This
is useful if you get ETXTBSY errors when removing or modifying the
executable after it has been executed.
This environment variable is
valid for 32-bit executables only.
For instrumented shared libraries,
profile data is always written by the same process. - FDP_FORK
Serves the same purpose as
ENABLE_PBO_FORK
but for 64-bit executables. - FLOW_DATA
An instrumented executable (see the
-I
option) writes out the profile data to
a database file named
flow.data
in the current directory.
The name and
location of this file can be specified by setting
FLOW_DATA
to the desired path name.
The profile data is stored in the database
file under a look-up name that is the same as the basename of the
executable file specified at run-time.
A single
flow.data
file can hold profile data - LDOPTS
Arguments can be passed to the linker through the
LDOPTS
environment variable as well as on the command line.
The linker gets the value of
LDOPTS
and places its contents before any arguments on the command line. - LPATH
Specifies default directories
to search for library files.
See the
-l
option. - LD_LIBRARY_PATH, SHLIB_PATH, and LD_PRELOAD
Specifies, at runtime, directories
to search for library files.
See the
+s
option,
dld.sl(5),
and the
+help
option for the
Online HP-UX Linker and Libraries User's Guide
manual for more information. - LD_PROFILE
Specifies, at runtime, the path of the shared library to be
profiled (See HP-UX Linker and Libraries Online User's Guide
for details.) - LD_GPROF_LIB_NAME
Specifies at runtime, the path of the profiler used to profile
shared libraries.
The default value is
/usr/lib/libgprof32.sl
for 32bit applications and
/usr/lib/pa20_64/libgprof.sl
for
64bit applications. - TMPDIR
Specifies a directory
for temporary files.
The following internationalization variables affect the execution of
ld:
- LANG
Determines the locale category for native language, local customs and
coded character set in the absence of
LC_ALL
and other
LC_*
environment variables.
If
LANG
is not specified or is set to the empty string,
a default of
C
(see
lang(5))
is used instead of
LANG. - LC_ALL
Determines the values for all locale categories and has precedence over
LANG
and other
LC_*
environment variables. - LC_MESSAGES
Determines the locale that should be used to affect the format
and contents of diagnostic messages written to standard error. - LC_NUMERIC
Determines the locale category for numeric formatting. - LC_CTYPE
Determines the locale category for character handling functions. - NLSPATH
Determines the location of message catalogs for the processing
of
LC_MESSAGES.
If any internationalization variable contains an invalid setting,
ld
behaves as if all internationalization variables are set to
C.
See
environ(5). RETURN VALUESld
returns the following values:
- 0
Successful completion.
The link is successful. - n!=0
Failure.
An error has occurred.
EXAMPLESLink part of a C program for later processing by
ld.
(Note the
.o
suffix for the output object file; this is an
HP-UX
convention for indicating a linkable object file): ld -r file1.o file2.o -o prog.o On 32-bit, link a simple FORTRAN program for use with the
dde
symbolic debugger (see
dde(1)).
Output file name is
a.out
since there is no
-o
option in the command line. ld /usr/ccs/lib/crt0.o ftn.o -lcl -lisamstub \
-lc /opt/langtools/lib/end.o To do this on 64-bit: ld ftn.o -lcl -lisamstub \
-lc /opt/langtools/lib/pa20_64/end.o On 64-bit, link a shared bound program in standard mode.
Note that
crt0.o
is not specified because for shared links, it is no longer necessary. On 64-bit, link a compatibility mode program.
crt0.o
is included because this is an archive link. ld /opt/langtools/lib/pa20_64/crt0.o himom.o +compat -a archive -lc Create a shared library: ld -b -o libfunc.sl func1.o func2.o func3.o Create a shared library with an internal name: ld -b -o libfoo1.1 foo1.o foo2.o +h libfoo1.1
ln -s libfoo1.1 libfoo1.sl
cc -g mytest.c -L . -lfoo1
chatr a.out
...
shared library list:
dynamic ./libfoo1.1 If you do not use
+h,
the shared library does not have an internal name.
The linker does not
check whether
.sl
is a symbolic link.
It records the library name that
it looks at, if it does not have the internal name. chatr a.out
...
shared library list:
dynamic ./libfoo1.sl On 32-bit, link a program with
libfunc.sl
but use the archive version of the C library.
Specify the immediate binding mode together with the nonfatal modifier and
allow verbose diagnostics to be displayed: ld /usr/ccs/lib/crt0.o -B immediate -B nonfatal -B verbose \
program.o -L . -lfunc -a archive -lc To do this on 64-bit: ld -B immediate -B nonfatal -B verbose \
program.o -L . -lfunc -a archive -lc On 32-bit, link a Pascal program: ld /usr/ccs/lib/crt0.o main.o -lcl -lm -lc Note that in the above examples,
/usr/ccs/lib/crt0.o
can be replaced by
/opt/langtools/lib/crt0.o. WARNINGSld
recognizes several names as having special meanings.
The symbol
_end
is reserved by the linker to refer to the first address beyond
the end of the program's address space.
Similarly, the symbol
_edata
refers to the first address beyond
the initialized data,
and the symbol
_etext
refers to the first address beyond the program text.
The symbols
end,
edata,
and
etext
are also defined by the linker,
but only if the program contains a reference to these symbols
and does not define them (see
end(3C)
for details).
On 32-bit, the symbol
__tdsize
is the total thread local storage size required by the program or shared
library. On 64-bit, the linker defines a few more symbols.
The symbol
__TLS_SIZE
is the total thread local storage size.
The symbol
_FPU_STATUS
is the initial status of the FPU status register.
The symbol
__SYSTEM_ID
is the largest architecture revision level used by any compilation unit. The linker treats a user definition of any of the symbols listed here as an
error. Through its options, the link editor gives users great flexibility.
However, those who invoke the linker directly must assume some
added responsibilities.
Input options should ensure the following properties for programs:
When the link editor is called through
cc(1),
a start-up routine is linked with the user's program.
This routine calls
exit(2)
after execution of the main program.
If users call
ld
directly, they must ensure that the program always calls
exit()
rather than falling through the end of the entry routine. When linking for use with the symbolic debugger
dde,
the user must ensure that the program contains a routine called
main.
Also, the user must link in the file
/opt/langtools/lib/end.o
on 32-bit and
/opt/langtools/lib/pa20_64/end.o
on 64-bit as the last file named on the command line.
There is no guarantee that the linker will pick up files
from archive libraries and include them in the final program
in the same relative order that they occur within the library. The linker emits warnings wherever it detects any compatibility
issues.
Among other things, these issues include architectural
ones, as well as functionality that may change over time.
Some
of these include:
Linking a PA 2.0 object file, which will not run on a PA 1.x system. Incremental loading with the
-A
option. Procedure call parameter and return type checking, including the
-C
option. Symbols with the same name but different types, such as CODE and DATA. Checking of unsatisfied symbols by the linker, which sometimes skips
certain object files from an archived library.
This warning is only
given if the
-v
option is also provided. Versioning of objects within a shared library.
These messages can be turned off with the
+vnocompatwarnings
option. As noted in the
Options
section, certain options no longer exist in a 64-bit linker.
They are:
AUTHORld
was developed by AT&T, the University of California, Berkeley, and HP. FILES- /usr/lib/lib*
32-bit system archive and shared libraries - /usr/lib/pa20_64/lib*
64-bit system archive and shared libraries - /usr/ccs/lib*
32-bit development archive and shared libraries - /opt/langtools/lib/pa20_64
64-bit development object files, archive and shared libraries - a.out
output file - /usr/lib/dld.sl
32-bit dynamic loader - /usr/lib/pa20_64/dld.sl
64-bit dynamic loader - /opt/langtools/lib/end.o
for use with the 32-bit
dde
debugger - /opt/langtools/lib/pa20_64/end.o
for use with the 64-bit
dde
debugger - /usr/ccs/lib/crt0.o
32-bit run-time startup file - /opt/langtools/lib/crt0.o
Identical to
/usr/ccs/lib/crt0.o - /opt/langtools/lib/pa20_64/crt0.o
64-bit run-time startup file - /usr/ccs/lib/dyncall.o
32-bit only.
Used with
-A
option links - /opt/langtools/lib/mcrt0.o
32-bit run-time startup with profiling (see
prof(1)) - /usr/lib/milli.a
32-bit millicode library automatically searched by
ld - /usr/lib/pa20_64/milli.a
64-bit millicode library automatically searched by
ld - /opt/langtools/lib/gcrt0.o
run-time start-up with profiling (see
gprof(1)) - /opt/langtools/lib/icrt0.o
32-bit run-time start-up with profiling (see
discussion of profile based optimization
above.) - /usr/lib/nls/$LANG/ld.cat
message catalog - /var/tmp/ld*
temporary files - flow.data
file containing profile data generated by running an
instrumented executable - /usr/ccs/bin/fdp
program for creating the procedure link order from
a profile database file created by an instrumented executable;
forked by the
-P
option - /opt/langtools/lbin/ucomp
PA-RISC
code generator
SEE ALSOProfiling and Debugging Tools- adb(1)
absolute debugger - gprof(1)
display call graph profile data - prof(1)
display profile data - dde(1)
C, C++, FORTRAN, and Pascal symbolic debugger
System Tools- aCC(1)
invoke the HP-UX aC++ compiler - ar(1)
create archived libraries - CC(1)
invoke the HP-UX C++ compiler - cc(1)
invoke the HP-UX C compiler - chatr(1)
change program's internal attributes - exec(2)
execute a file - f77(1)
invoke the HP-UX FORTRAN 77 compiler - f90(1)
invoke the HP-UX Fortran 90 compiler - fastbind(1)
invoke the fastbind tool - nm(1)
print name list of object file - pc(1)
invoke the HP-UX Pascal compiler - strip(1)
strip symbol and line number information from an object file
Texts and Tutorials- HP-UX Linker and Libraries Online User Guide
(See the
+help
option) - HP-UX Linker and Libraries User's Guide
(See
manuals(5)
for ordering information)
STANDARDS CONFORMANCEld: SVID2, SVID3, XPG2, XPG4
|