| .\" This file is distributed under the University of Illinois Open Source | |
| .\" License. See LICENSE.TXT for details. | |
| .\" | |
| .\" This man page documents only lld's ELF linking support, obtained originally | |
| .\" from FreeBSD. | |
| .Dd July 30, 2018 | |
| .Dt LD.LLD 1 | |
| .Os | |
| .Sh NAME | |
| .Nm ld.lld | |
| .Nd ELF linker from the LLVM project | |
| .Sh SYNOPSIS | |
| .Nm ld.lld | |
| .Op Ar options | |
| .Ar objfile ... | |
| .Sh DESCRIPTION | |
| A linker takes one or more object, archive, and library files, and combines | |
| them into an output file (an executable, a shared library, or another object | |
| file). | |
| It relocates code and data from the input files and resolves symbol | |
| references between them. | |
| .Pp | |
| .Nm | |
| is a drop-in replacement for the GNU BFD and gold linkers. | |
| It accepts most of the same command line arguments and linker scripts | |
| as GNU linkers. | |
| .Pp | |
| These options are available: | |
| .Bl -tag -width indent | |
| .It Fl -allow-multiple-definition | |
| Do not error if a symbol is defined multiple times. | |
| The first definition will be used. | |
| .It Fl -apply-dynamic-relocs | |
| Apply link-time values for dynamic relocations. | |
| .It Fl -as-needed | |
| Only set | |
| .Dv DT_NEEDED | |
| for shared libraries if used. | |
| .It Fl -auxiliary Ns = Ns Ar value | |
| Set the | |
| .Dv DT_AUXILIARY | |
| field to the specified name. | |
| .It Fl -Bdynamic , Fl -dy | |
| Link against shared libraries. | |
| .It Fl -Bstatic , Fl -static , Fl -dn | |
| Do not link against shared libraries. | |
| .It Fl -Bsymbolic | |
| Bind defined symbols locally. | |
| .It Fl -Bsymbolic-functions | |
| Bind defined function symbols locally. | |
| .It Fl -build-id Ns = Ns Ar value | |
| Generate a build ID note. | |
| .Ar value | |
| may be one of | |
| .Cm fast , | |
| .Cm md5 , | |
| .Cm sha1 , | |
| .Cm tree , | |
| .Cm uuid , | |
| .Cm 0x Ns Ar hex-string , | |
| and | |
| .Cm none . | |
| .Cm tree | |
| is an alias for | |
| .Cm sha1 . | |
| Build-IDs of type | |
| .Cm fast , | |
| .Cm md5 , | |
| .Cm sha1 , | |
| and | |
| .Cm tree | |
| are calculated from the object contents. | |
| .Cm fast | |
| is not intended to be cryptographically secure. | |
| .It Fl -build-id | |
| Synonym for | |
| .Fl -build-id Ns = Ns Cm fast . | |
| .It Fl -color-diagnostics Ns = Ns Ar value | |
| Use colors in diagnostics. | |
| .Ar value | |
| may be one of | |
| .Cm always , | |
| .Cm auto , | |
| and | |
| .Cm never . | |
| .Cm auto | |
| enables color if and only if output is to a terminal. | |
| .It Fl -color-diagnostics | |
| Alias for | |
| .Fl -color-diagnostics Ns = Ns Cm auto . | |
| .It Fl -compress-debug-sections Ns = Ns Ar value | |
| Compress DWARF debug sections. | |
| .Ar value | |
| may be | |
| .Cm none | |
| or | |
| .Cm zlib . | |
| .It Fl -cref | |
| Output cross reference table. | |
| .It Fl -define-common , Fl d | |
| Assign space to common symbols. | |
| .It Fl -defsym Ns = Ns Ar symbol Ns = Ns Ar expression | |
| Define a symbol alias. | |
| .Ar expression | |
| may be another symbol or a linker script expression. | |
| For example, | |
| .Ql --defsym=foo=bar | |
| or | |
| .Ql --defsym=foo=bar+0x100 . | |
| .It Fl -demangle | |
| Demangle symbol names. | |
| .It Fl -disable-new-dtags | |
| Disable new dynamic tags. | |
| .It Fl -discard-all , Fl x | |
| Delete all local symbols. | |
| .It Fl -discard-locals , Fl X | |
| Delete temporary local symbols. | |
| .It Fl -discard-none | |
| Keep all symbols in the symbol table. | |
| .It Fl -dynamic-linker Ns = Ns Ar value | |
| Specify the dynamic linker to be used for a dynamically linked executable. | |
| This is recorded in an ELF segment of type | |
| .Dv PT_INTERP . | |
| .It Fl -dynamic-list Ns = Ns Ar file | |
| Read a list of dynamic symbols from | |
| .Ar file . | |
| .It Fl -eh-frame-hdr | |
| Request creation of | |
| .Li .eh_frame_hdr | |
| section and | |
| .Dv PT_GNU_EH_FRAME | |
| segment header. | |
| .It Fl -emit-relocs , Fl q | |
| Generate relocations in the output. | |
| .It Fl -enable-new-dtags | |
| Enable new dynamic tags. | |
| .It Fl -end-lib | |
| End a grouping of objects that should be treated as if they were together | |
| in an archive. | |
| .It Fl -entry Ns = Ns Ar entry | |
| Name of entry point symbol. | |
| .It Fl -error-limit Ns = Ns Ar value | |
| Maximum number of errors to emit before stopping. | |
| A value of zero indicates that there is no limit. | |
| .It Fl -error-unresolved-symbols | |
| Report unresolved symbols as errors. | |
| .It Fl -exclude-libs Ns = Ns Ar value | |
| Exclude static libraries from automatic export. | |
| .It Fl -export-dynamic , Fl E | |
| Put symbols in the dynamic symbol table. | |
| .It Fl -export-dynamic-symbol Ns = Ns Ar symbol | |
| Include | |
| .Ar symbol | |
| in the dynamic symbol table. | |
| .It Fl -fatal-warnings | |
| Treat warnings as errors. | |
| .It Fl -filter Ns = Ns Ar value , Fl F Ar value | |
| Set the | |
| .Dv DT_FILTER | |
| field to the specified value. | |
| .It Fl -fini Ns = Ns Ar symbol | |
| Specify a finalizer function. | |
| .It Fl -format Ns = Ns Ar input-format , Fl b Ar input-format | |
| Specify the format of the inputs following this option. | |
| .Ar input-format | |
| may be one of | |
| .Cm binary , | |
| .Cm elf , | |
| and | |
| .Cm default . | |
| .Cm default | |
| is a synonym for | |
| .Cm elf . | |
| .It Fl -gc-sections | |
| Enable garbage collection of unused sections. | |
| .It Fl -gdb-index | |
| Generate | |
| .Li .gdb_index | |
| section. | |
| .It Fl -hash-style Ns = Ns Ar value | |
| Specify hash style. | |
| .Ar value | |
| may be | |
| .Cm sysv , | |
| .Cm gnu , | |
| or | |
| .Cm both . | |
| .Cm both | |
| is the default. | |
| .It Fl -help | |
| Print a help message. | |
| .It Fl -icf Ns = Ns Cm all | |
| Enable identical code folding. | |
| .It Fl -icf Ns = Ns Cm safe | |
| Enable safe identical code folding. | |
| .It Fl -icf Ns = Ns Cm none | |
| Disable identical code folding. | |
| .It Fl -image-base Ns = Ns Ar value | |
| Set the base address to | |
| .Ar value . | |
| .It Fl -init Ns = Ns Ar symbol | |
| Specify an initializer function. | |
| .It Fl -keep-unique Ns = Ns Ar symbol | |
| Do not fold | |
| .Ar symbol | |
| during ICF. | |
| .It Fl l Ar libName, Fl -library Ns = Ns Ar libName | |
| Root name of library to use. | |
| .It Fl L Ar dir , Fl -library-path Ns = Ns Ar dir | |
| Add a directory to the library search path. | |
| .It Fl -lto-aa-pipeline Ns = Ns Ar value | |
| AA pipeline to run during LTO. | |
| Used in conjunction with | |
| .Fl -lto-newpm-passes . | |
| .It Fl -lto-newpm-passes Ns = Ns Ar value | |
| Passes to run during LTO. | |
| .It Fl -lto-O Ns Ar opt-level | |
| Optimization level for LTO. | |
| .It Fl -lto-partitions Ns = Ns Ar value | |
| Number of LTO codegen partitions. | |
| .It Fl m Ar value | |
| Set target emulation. | |
| .It Fl -Map Ns = Ns Ar file , Fl M Ar file | |
| Print a link map to | |
| .Ar file . | |
| .It Fl -no-as-needed | |
| Always set | |
| .Dv DT_NEEDED | |
| for shared libraries. | |
| .It Fl -no-color-diagnostics | |
| Do not use colors in diagnostics. | |
| .It Fl -no-define-common | |
| Do not assign space to common symbols. | |
| .It Fl -no-demangle | |
| Do not demangle symbol names. | |
| .It Fl -no-dynamic-linker | |
| Inhibit output of an | |
| .Li .interp | |
| section. | |
| .It Fl -no-gc-sections | |
| Disable garbage collection of unused sections. | |
| .It Fl -no-gnu-unique | |
| Disable STB_GNU_UNIQUE symbol binding. | |
| .It Fl -no-rosegment | |
| Do not put read-only non-executable sections in their own segment. | |
| .It Fl -no-threads | |
| Do not run the linker multi-threaded. | |
| .It Fl -no-undefined-version | |
| Report version scripts that refer undefined symbols. | |
| .It Fl -no-undefined | |
| Report unresolved symbols even if the linker is creating a shared library. | |
| .It Fl -no-whole-archive | |
| Restores the default behavior of loading archive members. | |
| .It Fl -no-pie | |
| Do not create a position independent executable. | |
| .It Fl -noinhibit-exec | |
| Retain the executable output file whenever it is still usable. | |
| .It Fl -nostdlib | |
| Only search directories specified on the command line. | |
| .It Fl o Ar path | |
| Write the output executable, library, or object to | |
| .Ar path . | |
| If not specified, | |
| .Dv a.out | |
| is used as a default. | |
| .It Fl O Ns Ar value | |
| Optimize output file size. | |
| .Ar value | |
| may be: | |
| .Pp | |
| .Bl -tag -width 2n -compact | |
| .It Cm 0 | |
| Disable string merging. | |
| .It Cm 1 | |
| Enable string merging. | |
| .It Cm 2 | |
| Enable string tail merging. | |
| .El | |
| .Pp | |
| .Fl O Ns Cm 1 | |
| is the default. | |
| .It Fl -oformat Ns = Ns Ar format | |
| Specify the format for the output object file. | |
| The only supported | |
| .Ar format | |
| is | |
| .Cm binary , | |
| which produces output with no ELF header. | |
| .It Fl -omagic , Fl N | |
| Set the text and data sections to be readable and writable. | |
| .It Fl -opt-remarks-filename Ar file | |
| Write optimization remarks in YAML format to | |
| .Ar file . | |
| .It Fl -opt-remarks-with-hotness | |
| Include hotness information in the optimization remarks file. | |
| .It Fl -pie | |
| Create a position independent executable. | |
| .It Fl -print-gc-sections | |
| List removed unused sections. | |
| .It Fl -print-map | |
| Print a link map to the standard output. | |
| .It Fl -push-state | |
| Save the current state of | |
| .Fl -as-needed , | |
| .Fl -static , | |
| and | |
| .Fl -while-archive. | |
| .It Fl -pop-state | |
| Undo the effect of | |
| .Fl -push-state. | |
| .It Fl -relocatable , Fl r | |
| Create relocatable object file. | |
| .It Fl -reproduce Ns = Ns Ar value | |
| Dump linker invocation and input files for debugging. | |
| .It Fl -retain-symbols-file Ns = Ns Ar file | |
| Retain only the symbols listed in the file. | |
| .It Fl -rpath Ns = Ns Ar value , Fl R Ar value | |
| Add a | |
| .Dv DT_RUNPATH | |
| to the output. | |
| .It Fl -rsp-quoting Ns = Ns Ar value | |
| Quoting style for response files. | |
| The supported values are | |
| .Cm windows | |
| and | |
| .Cm posix . | |
| .It Fl -script Ns = Ns Ar file , Fl T Ar file | |
| Read linker script from | |
| .Ar file . | |
| .It Fl -section-start Ns = Ns Ar section Ns = Ns Ar address | |
| Set address of section. | |
| .It Fl -shared , Fl -Bsharable | |
| Build a shared object. | |
| .It Fl -soname Ns = Ns Ar value , Fl h Ar value | |
| Set | |
| .Dv DT_SONAME | |
| to | |
| .Ar value . | |
| .It Fl -sort-section Ns = Ns Ar value | |
| Specifies sections sorting rule when linkerscript is used. | |
| .It Fl -start-lib | |
| Start a grouping of objects that should be treated as if they were together | |
| in an archive. | |
| .It Fl -strip-all , Fl s | |
| Strip all symbols. | |
| .It Fl -strip-debug , Fl S | |
| Strip debugging information. | |
| .It Fl -symbol-ordering-file Ns = Ns Ar file | |
| Lay out sections in the order specified by | |
| .Ar file . | |
| .It Fl -sysroot Ns = Ns Ar value | |
| Set the system root. | |
| .It Fl -target1-abs | |
| Interpret | |
| .Dv R_ARM_TARGET1 | |
| as | |
| .Dv R_ARM_ABS32 . | |
| .It Fl -target1-rel | |
| Interpret | |
| .Dv R_ARM_TARGET1 | |
| as | |
| .Dv R_ARM_REL32 . | |
| .It Fl -target2 Ns = Ns Ar type | |
| Interpret | |
| .Dv R_ARM_TARGET2 | |
| as | |
| .Ar type , | |
| where | |
| .Ar type | |
| is one of | |
| .Cm rel , | |
| .Cm abs , | |
| or | |
| .Cm got-rel . | |
| .It Fl -Tbss Ns = Ns Ar value | |
| Same as | |
| .Fl -section-start | |
| with | |
| .Li .bss | |
| as the sectionname. | |
| .It Fl -Tdata Ns = Ns Ar value | |
| Same as | |
| .Fl -section-start | |
| with | |
| .Li .data | |
| as the sectionname. | |
| .It Fl -Ttext Ns = Ns Ar value | |
| Same as | |
| .Fl -section-start | |
| with | |
| .Li .text | |
| as the sectionname. | |
| .It Fl -thinlto-cache-dir Ns = Ns Ar value | |
| Path to ThinLTO cached object file directory. | |
| .It Fl -thinlto-cache-policy Ns = Ns Ar value | |
| Pruning policy for the ThinLTO cache. | |
| .It Fl -thinlto-jobs Ns = Ns Ar value | |
| Number of ThinLTO jobs. | |
| .It Fl -threads | |
| Run the linker multi-threaded. | |
| This option is enabled by default. | |
| .It Fl -trace | |
| Print the names of the input files. | |
| .It Fl -trace-symbol Ns = Ns Ar symbol , Fl y Ar symbol | |
| Trace references to | |
| .Ar symbol . | |
| .It Fl -undefined Ns = Ns Ar symbol , Fl u Ar symbol | |
| Force | |
| .Ar symbol | |
| to be an undefined symbol during linking. | |
| .It Fl -unresolved-symbols Ns = Ns Ar value | |
| Determine how to handle unresolved symbols. | |
| .It Fl v | |
| Display the version number and proceed with linking if object files are | |
| specified. | |
| .It Fl V , Fl -version | |
| Display the version number and exit. | |
| .It Fl -verbose | |
| Verbose mode. | |
| .It Fl -version-script Ns = Ns Ar file | |
| Read version script from | |
| .Ar file . | |
| .It Fl -warn-backrefs | |
| Warn about reverse or cyclic dependencies to or between static archives. | |
| This can be used to ensure linker invocation remains compatible with | |
| traditional Unix-like linkers. | |
| .It Fl -warn-common | |
| Warn about duplicate common symbols. | |
| .It Fl -warn-unresolved-symbols | |
| Report unresolved symbols as warnings. | |
| .It Fl -whole-archive | |
| Force load of all members in a static library. | |
| .It Fl -wrap Ns = Ns Ar symbol | |
| Use wrapper functions for symbol. | |
| .It Fl z Ar option | |
| Linker option extensions. | |
| .Bl -tag -width indent | |
| .It Cm execstack | |
| Make the main stack executable. | |
| Stack permissions are recorded in the | |
| .Dv PT_GNU_STACK | |
| segment. | |
| .It Cm initfirst | |
| Sets the | |
| .Dv DF_1_INITFIRST | |
| flag to indicate the module should be initialized first. | |
| .It Cm muldefs | |
| Do not error if a symbol is defined multiple times. | |
| The first definition will be used. | |
| This is a synonym for | |
| .Fl -allow-multiple-definition. | |
| .It Cm nocombreloc | |
| Disable combining and sorting multiple relocation sections. | |
| .It Cm nocopyreloc | |
| Disable the creation of copy relocations. | |
| .It Cm nodelete | |
| Set the | |
| .Dv DF_1_NODELETE | |
| flag to indicate that the object cannot be unloaded from a process. | |
| .It Cm nodlopen | |
| Set the | |
| .Dv DF_1_NOOPEN | |
| flag to indcate that the object may not be opened by | |
| .Xr dlopen 3 . | |
| .It Cm norelro | |
| Do not indicate that portions of the object shold be mapped read-only | |
| after initial relocation processing. | |
| The object will omit the | |
| .Dv PT_GNU_RELRO | |
| segment. | |
| .It Cm notext | |
| Allow relocations against read-only segments. | |
| Sets the | |
| .Dv DT_TEXTREL flag in the | |
| .Dv DYNAMIC | |
| section. | |
| .It Cm now | |
| Set the | |
| .Dv DF_BIND_NOW | |
| flag to indicate that the run-time loader should perform all relocation | |
| processing as part of object initialization. | |
| By default relocations may be performed on demand. | |
| .It Cm origin | |
| Set the | |
| .Dv DF_ORIGIN | |
| flag to indicate that the object requires | |
| $ORIGIN | |
| processing. | |
| .It Cm retpolineplt | |
| Emit retpoline format PLT entries as a mitigation for CVE-2017-5715. | |
| .It Cm rodynamic | |
| Make the | |
| .Li .dynamic | |
| section read-only. | |
| The | |
| .Dv DT_DEBUG | |
| tag will not be emitted. | |
| .It Cm stack-size Ns = Ns Ar size | |
| Set the main thread's stack size to | |
| .Ar size . | |
| The stack size is recorded as the size of the | |
| .Ar size . | |
| .Dv PT_GNU_STACK | |
| program segment. | |
| .It Cm text | |
| Do not allow relocations against read-only segments. | |
| This is the default. | |
| .It Cm wxneeded | |
| Create a | |
| .Dv PT_OPENBSD_WXNEEDED | |
| segment. | |
| .El | |
| .El | |
| .Sh IMPLEMENTATION NOTES | |
| .Nm Ap s | |
| handing of archive files (those with a | |
| .Pa .a | |
| file extension) is different from traditional linkers used on Unix-like | |
| systems. | |
| .Pp | |
| Traditional linkers maintain a set of undefined symbols during linking. | |
| The linker processes each file in the order in which it appears on the | |
| command line, until the set of undefined symbols becomes empty. | |
| An object file is linked into the output object when it is encountered, | |
| with its undefined symbols added to the set. | |
| Upon encountering an archive file a traditional linker searches the objects | |
| contained therein, and processes those that satisfy symbols in the unresolved | |
| set. | |
| .Pp | |
| Handling mutually dependent archives may be awkward when using a traditional | |
| linker. | |
| Archive files may have to be specified multiple times, or the special command | |
| line options | |
| .Fl -start-group | |
| and | |
| .Fl -end-group | |
| may be used to have the linker loop over the files in the group until no new | |
| symbols are added to the set. | |
| .Pp | |
| .Nm | |
| records all symbols found in objects and archives as it iterates over | |
| command line arguments. | |
| When | |
| .Nm | |
| encounters an undefined symbol that can be resolved by an object file | |
| contained in a previously processed archive file, it immediately extracts | |
| and links it into the output object. | |
| .Pp | |
| With certain archive inputs | |
| .Nm | |
| may produce different results compared to traditional linkers. | |
| In practice, large bodies of third party software have been linked with | |
| .Nm | |
| without material issues. | |
| .Pp | |
| The | |
| .Fl -warn-backrefs | |
| option may be used to identify a linker invocation that may be incompatible | |
| with traditional Unix-like linker behavior. |