While the functionality of this flag is obvious in the implementation, tool users may not know what it does with the short description provided. Notably, it is not obvious from the short description that: * Functions provided will be converted to internal linkage (and thus discarded if unused) even if unreferenced. * Functions in the first file will not be internalized, even if referenced by a later one. The Rust for Linux project has [found use for this flag](https://lore.kernel.org/all/20251202-inline-helpers-v1-0-879dae33a66a@google.com/) to support inlining `static inline` functions in C into code compiled by Rust when `rustc` and `clang` share a LLVM.
113 lines
3.1 KiB
ReStructuredText
113 lines
3.1 KiB
ReStructuredText
llvm-link - LLVM bitcode linker
|
|
===============================
|
|
|
|
.. program:: llvm-link
|
|
|
|
SYNOPSIS
|
|
--------
|
|
|
|
:program:`llvm-link` [*options*] *filename ...*
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
:program:`llvm-link` takes several LLVM bitcode files and links them together
|
|
into a single LLVM bitcode file. It writes the output file to standard output,
|
|
unless the :option:`-o` option is used to specify a filename.
|
|
|
|
OPTIONS
|
|
-------
|
|
|
|
.. option:: -f
|
|
|
|
Enable binary output on terminals. Normally, :program:`llvm-link` will refuse
|
|
to write raw bitcode output if the output stream is a terminal. With this
|
|
option, :program:`llvm-link` will write raw bitcode regardless of the output
|
|
device.
|
|
|
|
.. option:: -o filename
|
|
|
|
Specify the output file name. If ``filename`` is "``-``", then
|
|
:program:`llvm-link` will write its output to standard output.
|
|
|
|
.. option:: -S
|
|
|
|
Write output in LLVM intermediate language (instead of bitcode).
|
|
|
|
.. option:: -d
|
|
|
|
If specified, :program:`llvm-link` prints a human-readable version of the
|
|
output bitcode file to standard error.
|
|
|
|
.. option:: --help
|
|
|
|
Print a summary of command line options.
|
|
|
|
.. option:: -v
|
|
|
|
Verbose mode. Print information about what :program:`llvm-link` is doing.
|
|
This typically includes a message for each bitcode file linked in and for each
|
|
library found.
|
|
|
|
.. option:: --override <filename>
|
|
|
|
Adds the passed-in file to the link and overrides symbols that have already
|
|
been declared with the definitions in the file that is passed in. This flag
|
|
can be specified multiple times to have multiple files act as overrides. If
|
|
a symbol is declared more than twice, the definition from the file declared
|
|
last takes precedence.
|
|
|
|
.. option:: --import <function:filename>
|
|
|
|
Specify a function that should be imported from the specified file for
|
|
linking with ThinLTO. This option can be specified multiple times to import
|
|
multiple functions.
|
|
|
|
.. option:: --summary-index <filename>
|
|
|
|
Specify the path to a file containing the module summary index with the
|
|
results of an earlier ThinLTO link. This option is required when
|
|
`--import` is used.
|
|
|
|
.. option:: --internalize
|
|
|
|
Maintains existing linkage for symbols defined in the first input and
|
|
converts linkage in all other inputs to internal linkage unless they are
|
|
referenced by `llvm*.used` or are special-cased runtime functions (e.g.
|
|
stack protector runtime).
|
|
|
|
.. option:: --disable-debug-info-type-map
|
|
|
|
Disables the use of a uniquing type map for debug info.
|
|
|
|
.. option:: --only-needed
|
|
|
|
Link only needed symbols.
|
|
|
|
.. option:: --disable-lazy-loading
|
|
|
|
Disable lazy module loading.
|
|
|
|
.. option:: --suppress-warnings
|
|
|
|
Suppress all linker warnings.
|
|
|
|
.. option:: --preserve-bc-uselistorder
|
|
|
|
Preserve the use-list order when writing LLVM bitcode.
|
|
|
|
.. option:: --preserve-ll-uselistorder
|
|
|
|
Preserve the use-list order when writing LLVM assembly.
|
|
|
|
.. option:: --ignore-non-bitcode
|
|
|
|
Do not error out when a non-bitcode file is encountered while processing
|
|
an archive.
|
|
|
|
EXIT STATUS
|
|
-----------
|
|
|
|
If :program:`llvm-link` succeeds, it will exit with 0. Otherwise, if an error
|
|
occurs, it will exit with a non-zero value.
|