summaryrefslogtreecommitdiff
path: root/ld/ld.1
diff options
context:
space:
mode:
Diffstat (limited to 'ld/ld.1')
-rw-r--r--ld/ld.1478
1 files changed, 478 insertions, 0 deletions
diff --git a/ld/ld.1 b/ld/ld.1
new file mode 100644
index 0000000000000..122050312de95
--- /dev/null
+++ b/ld/ld.1
@@ -0,0 +1,478 @@
+.\" Copyright (c) 2016 Joseph Koshy. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" This software is provided by the author and contributors ``as is''
+.\" and any express or implied warranties, including, but not limited
+.\" to, the implied warranties of merchantability and fitness for a
+.\" particular purpose are disclaimed. In no event shall the author or
+.\" contributors be liable for any direct, indirect, incidental, special,
+.\" exemplary, or consequential damages (including, but not limited to,
+.\" procurement of substitute goods or services; loss of use, data, or
+.\" profits; or business interruption) however caused and on any
+.\" theory of liability, whether in contract, strict liability, or
+.\" tort (including negligence or otherwise) arising in any way
+.\" out of the use of this software, even if advised of the
+.\" possibility of such damage.
+.\"
+.\" $Id$
+.\"
+.Dd February 14, 2016
+.Os
+.Dt LD 1
+.Sh NAME
+.Nm ld
+.Nd link editor
+.Sh SYNOPSIS
+.Nm
+.Op Fl \&(
+.Op Fl \&)
+.Op Fl Bdynamic
+.Op Fl Bshareable
+.Op Fl Bstatic
+.Op Fl I Ar file | Fl -dynamic-linker= Ns Ar file
+.Op Fl L Ar dir | Fl -library-path= Ns Ar dir
+.Op Fl M | Fl -print-map
+.Op Fl T Ar script-file | Fl -script= Ns Ar script-file
+.Op Fl V | Fl v | Fl -version
+.Op Fl a Ar linkmode
+.Op Fl b Ar input-format | Fl -format= Ns Ar input-format
+.Op Fl call_shared
+.Op Fl d | Fl dc | Fl dp
+.Op Fl dn
+.Op Fl dy
+.Op Fl e Ar symbol | Fl -entry= Ns Ar symbol
+.Op Fl h Ar name | Fl soname= Ns Ar name
+.Op Fl l Ar library | Fl -library= Ns Ar library
+.Op Fl o Ar output-file | Fl -output= Ns Ar output-file
+.Op Fl q | Fl -emit-relocs
+.Op Fl r | Fl -relocatable
+.Op Fl u Ar name | Fl -undefined= Ns Ar name
+.Op Fl z Ar keyword
+.Op Fl -as-needed
+.Op Fl -eh-frame-hdr
+.Op Fl -end-group
+.Op Fl -gc-sections
+.Op Fl -no-as-needed
+.Op Fl -no-define-common
+.Op Fl -no-gc-sections
+.Op Fl -no-print-gc-sections
+.Op Fl -no-whole-archive
+.Op Fl -oformat= Ns Ar format
+.Op Fl -pic-executable | Fl pie
+.Op Fl -print-gc-sections
+.Op Fl -rpath= Ns Ar dirs
+.Op Fl -rpath-link= Ns Ar dirs
+.Op Fl -start-group
+.Op Fl shared
+.Op Fl static
+.Op Fl -version-script= Ns Ar script
+.Op Fl -whole-archive
+.Ar
+.Sh DESCRIPTION
+The
+.Nm
+utility combines ELF objects and
+.Xr ar 1
+archives containing ELF objects into an executable or a partially
+relocated object.
+.Pp
+The
+.Nm
+utility processes options and files in the order presented on the
+command line.
+Unlike most
+.Ux
+utilities, options and file names may be interspersed.
+Options seen on the command line will generally apply to subsequent
+files, or till overridden by another option.
+.Sh OPTIONS
+.Pp
+The
+.Nm
+utility supports the following options:
+.Bl -tag -width indent
+.It Xo
+.Fl \&(
+.Ar archives Ns ...
+.Fl \&)
+.Xc
+Start a group of archives that are to be searched repeatedly until no new
+undefined references are created.
+This option is used when there are circular references between one or
+more archives in the archive group.
+.Pp
+The files named by the arguments
+.Ar archives
+are expected to be archive files.
+.Pp
+Each use of the
+.Fl \&(
+option starts a new archive group that is ended by a matching
+.Fl \&)
+option.
+.It Fl Bdynamic
+Choose dynamic libraries for the libraries specified by subsequent
+.Fl l
+options.
+.It Fl Bshareable
+Create a shared library.
+.It Fl Bstatic
+Choose static libraries for the libraries specified by subsequent
+.Fl l
+options.
+.It Fl I Ar file | Fl -dynamic-linker= Ns Ar file
+Set the name of the dynamic linker when generating ELF executables.
+.It Fl L Ar dir | Fl -library-path= Ns Ar dir
+Add directory
+.Ar dir
+to the list of paths that
+.Nm
+will search for archive libraries.
+This option may be specified multiple times.
+User supplied directories are searched in the order specified on
+the command line.
+.It Fl M | Fl -print-map
+Print a link map to standard output.
+.It Fl T Ar script-file | Fl -script= Ns Ar script-file
+Use the file name by argument
+.Ar script-file
+as the linker script instead of the default.
+.It Fl V | Fl v | Fl version
+Print a version identifier for
+.Nm
+and exit.
+.It Fl a Ar linkmode
+Select linking mode.
+The value of the argument
+.Ar linkmode
+should be one of the following literals:
+.Bl -tag -width ".Li default" -compact
+.It Cm default
+Equivalent to specifying
+.Fl Bdynamic .
+.It Cm archive
+Equivalent to specifying
+.Fl Bstatic .
+.It Cm shared
+Equivalent to specifying
+.Fl Bdynamic .
+.El
+.It Fl b Ar input-format | Fl -format Ar input-format
+Set the input format to that specified by argument
+.Ar input-format .
+The legal values for the argument
+.Ar input-format
+are those supported by
+.Xr elftc_bfd_find_target 3 .
+.It Fl d | Fl dc | Fl dp
+Assign space for common symbols even if generating a relocatable object.
+.It Fl dn
+Equivalent to specifying option
+.Fl Bstatic .
+.It Fl dy
+Equivalent to specifying option
+.Fl Bdynamic .
+.It Fl e Ar entry | Fl -entry Ar entry
+Set execution to start at the symbol named by the argument
+.Ar entry .
+The argument should be the name of a symbol.
+.It Fl h Ar name | Fl soname Ar name
+Set the
+.Li DT_SONAME
+field in the object to that specified by the argument
+.Ar name .
+.It Fl l Ar name | Fl -library= Ns Ar name
+Add the archive library or shared library named by argument
+.Ar name
+to the set of files to link.
+This file is looked for in the list of directories specified by prior
+.Fl L
+options on the command line.
+.It Fl o Ar output-file | Fl -output= Ns Ar output-file
+Use the file specified by argument
+.Ar output-file
+for the output, instead of the default file name of
+.Sq a.out .
+.It Fl q | Fl -emit-relocs
+Preserve relocation information in executables, for use by post-link
+analysis tools.
+.It Fl r | Fl -relocatable
+Generate a relocatable output file that can be used as input for subsequent
+linker runs.
+.It Fl u Ar name | Fl -undefined= Ns Ar name
+Add the symbol specified by argument
+.Ar name
+to the output file as an undefined symbol.
+This option may be specified multiple times.
+.It Fl z Ar keyword
+Recognized keywords include:
+.Bl -tag -width ".Li defaultextract" -compact
+.It Cm execstack
+Require the object to use an executable stack.
+.It Cm noexecstack
+Do not require the object to use an executable stack.
+.El
+.It Fl -as-needed
+Add
+.Li DT_NEEDED
+tags for only those shared libraries that satisfy non-weak
+unresolved references from object files or other dynamic libraries
+seen so far on the command line.
+.It Fl call_shared
+Equivalent to specifying option
+.Fl Bdynamic .
+.It Fl -eh-frame-hdr
+Create a
+.Dq ".eh_frame_hdr"
+section, and a
+.Li PT_GNU_EH_FRAME
+segment header, containing exception handling information.
+.It Fl -end-group
+Equivalent to specifying option
+.Fl \&) .
+.It Fl -gc-sections
+Garbage collect unused input sections.
+.It Fl -no-as-needed
+Insert
+.Li DT_NEEDED
+tags for all shared libraries seen henceforth on the command line,
+irrespective of whether the shared library is needed to resolve an
+undefined symbol or not.
+This behavior is the default.
+.It Fl -no-define-common
+Do not assign addresses to common symbols.
+.It Fl -no-gc-sections
+Do not garbage collect input sections that contain unreferenced
+symbols.
+.It Fl -no-print-gc-sections
+Do not print the list of sections removed when the
+.Fl -gc-sections
+directive is active.
+.It Fl -no-whole-archive
+Only include objects in an archive that satisfy an unresolved reference
+in the link.
+This behavior is the default.
+.It Fl non_shared
+Equivalent to specifying option
+.Fl Bstatic .
+.It Fl -oformat= Ns Ar format
+Set the desired output format to that specified by the argument
+.Ar format .
+Supported values for argument
+.Ar format
+are those understood by
+.Xr elftc_bfd_find_target 3 .
+.It Fl -pic-executable | Fl pie
+Create a position-independent executable.
+.It Fl -print-gc-sections
+Print the list of sections removed when the
+.Fl -gc-sections
+directive is active.
+The output is printed to stderr.
+.It Fl -rpath= Ns Ar dirs
+Add the colon-separated list of directories named by the argument
+.Ar dirs
+to the runtime library search path and to the link-time search
+path.
+.It Fl -rpath-link= Ns Ar dirs
+Add the directories specified by the colon-separated list of directories
+in argument
+.Ar dirs
+to the link-time search path for libraries.
+The directories specified by this option are searched before those
+specified by
+.Fl -rpath
+options.
+.It Fl shared
+Equivalent to specifying option
+.Fl Bshareable .
+.It Fl -start-group
+Equivalent to specifying option
+.Fl \&( .
+.It Fl static
+Equivalent to specifying option
+.Fl Bstatic .
+.It Fl -version-script= Ns Ar script-file
+Use the version script in the file named by argument
+.Ar script-file .
+.It Fl -whole-archive
+Include the entire contents of every archive file encountered on the
+command line after this option in the link.
+.El
+.Sh DIAGNOSTICS
+.Ex -std
+.Sh SEE ALSO
+.Xr ar 1 ,
+.Xr ranlib 1 ,
+.Xr archive 3 ,
+.Xr elf 3 ,
+.Xr elftc_bfd_find_target 3 ,
+.Xr dwarf 3
+.Sh IMPLEMENTATION NOTES
+The
+.Nm
+utility differs from its GNU equivalent in the following:
+.Bl -bullet
+.It
+The
+.Nm
+utility currently supports a limited range of output formats.
+.It
+The
+.Fl e
+and
+.Fl -entry
+options only accept a symbol name as an argument, and not a numeric
+address.
+.It
+The
+.Fl l
+option only searches files in the directories specified by
+prior
+.Fl L
+options.
+.It
+The
+.Fl T | Fl -script
+option does not search for script files in the directories specified
+by prior
+.Fl L
+options.
+.It
+The
+.Fl -rpath
+option accepts a colon-separated list of directories instead of
+single directory.
+.El
+.Pp
+The following options are recognized, but are currently unimplemented:
+.Fl Bgroup ,
+.Fl Bsymbolic ,
+.Fl Bsymbolic_functions ,
+.Fl E ,
+.Fl EB ,
+.Fl EL ,
+.Fl F ,
+.Fl Map ,
+.Fl N ,
+.Fl O ,
+.Fl Qy ,
+.Fl R ,
+.Fl S ,
+.Fl Tbss ,
+.Fl Tdata ,
+.Fl Ttext ,
+.Fl X ,
+.Fl Y ,
+.Fl Ur ,
+.Fl c ,
+.Fl f ,
+.Fl g ,
+.Fl i ,
+.Fl m ,
+.Fl n ,
+.Fl s ,
+.Fl t ,
+.Fl x ,
+.Fl y ,
+.Fl -accept-unknown-input-arch ,
+.Fl -allow-multiple-definition ,
+.Fl -allow-shlib-undefined ,
+.Fl -assert ,
+.Fl -auxiliary ,
+.Fl -build-id ,
+.Fl -check-sections ,
+.Fl -cref ,
+.Fl -defsym ,
+.Fl -demangle ,
+.Fl -disable-new-dtags ,
+.Fl -discard-all ,
+.Fl -discard-locals ,
+.Fl -error-unresolved-symbols ,
+.Fl -export-dynamic ,
+.Fl -emulation ,
+.Fl -enable-new-dtags ,
+.Fl -fatal-warnings ,
+.Fl -filter ,
+.Fl -fini ,
+.Fl -hash-style ,
+.Fl -help ,
+.Fl -init ,
+.Fl -just-symbols ,
+.Fl -mri-script ,
+.Fl -nmagic ,
+.Fl nostdlib ,
+.Fl -no-accept-unknown-input-arch ,
+.Fl -no-allow-shlib-undefined ,
+.Fl -no-assert ,
+.Fl -no-check-sections ,
+.Fl -no-demangle ,
+.Fl -no-keep-memory ,
+.Fl -no-omagic ,
+.Fl -no-undefined ,
+.Fl -no-undefined-version ,
+.Fl -no-warn-mismatch ,
+.Fl -omagic ,
+.Fl -qmagic ,
+.Fl -relax ,
+.Fl -retain-symbols-file ,
+.Fl -runpath ,
+.Fl -section-start ,
+.Fl -sort-common ,
+.Fl -split-by-file ,
+.Fl -split-by-reloc ,
+.Fl -stats ,
+.Fl -strip-all ,
+.Fl -strip-debug ,
+.Fl -trace ,
+.Fl -trace_symbol ,
+.Fl -traditional-format ,
+.Fl -unique ,
+.Fl -unresolved-symbols ,
+.Fl -verbose ,
+.Fl -warn-common ,
+.Fl -warn-constructors ,
+.Fl -warn-multiple-gp ,
+.Fl -warn-once ,
+.Fl -warn-section-align ,
+.Fl -warn-shared-textrel ,
+.Fl -warn-unresolved-symbols ,
+.Fl -wrap .
+.Pp
+The following keywords are recognized by the
+.Fl z
+option, but are currently unimplemented:
+.Cm allextract ,
+.Cm defaultextract ,
+.Cm defs ,
+.Cm ignore ,
+.Cm initfirst ,
+.Cm lazyload ,
+.Cm muldefs ,
+.Cm nodefaultlib ,
+.Cm nodefs ,
+.Cm nodelete ,
+.Cm nodlopen ,
+.Cm nolazyload ,
+.Cm now ,
+.Cm origin ,
+.Cm record ,
+.Cm systemlibrary ,
+.Cm weakextract .
+.Sh HISTORY
+A
+.Nm
+command first appeared in AT&T UNIX Version 1.
+.Pp
+The Elftoolchain implementation of
+.Nm
+was written by
+.An Kai Wang Aq Mt kaiwang27@gmail.com .