123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- =pod
- =head1 NAME
- llvm-ld - LLVM linker
- =head1 SYNOPSIS
- B<llvm-ld> <options> <files>
- =head1 DESCRIPTION
- The B<llvm-ld> tool takes a set of LLVM bitcode files and links them
- together into a single LLVM bitcode file. The output bitcode file can be
- another bitcode file or an executable bitcode program. Using additional
- options, B<llvm-ld> is able to produce native code executables.
- The B<llvm-ld> tool is the main linker for LLVM. It is used to link together
- the output of LLVM front-end compilers and run "link time" optimizations (mostly
- the inter-procedural kind).
- The B<llvm-ld> tools attempts to mimic the interface provided by the default
- system linker so that it can act as a I<drop-in> replacement.
- =head2 Search Order
- When looking for objects specified on the command line, B<llvm-ld> will search
- for the object first in the current directory and then in the directory
- specified by the B<LLVM_LIB_SEARCH_PATH> environment variable. If it cannot
- find the object, it fails.
- When looking for a library specified with the B<-l> option, B<llvm-ld> first
- attempts to load a file with that name from the current directory. If that
- fails, it looks for libI<library>.bc, libI<library>.a, or libI<library>.I<shared
- library extension>, in that order, in each directory added to the library search
- path with the B<-L> option. These directories are searched in the order they
- are specified. If the library cannot be located, then B<llvm-ld> looks in the
- directory specified by the B<LLVM_LIB_SEARCH_PATH> environment variable. If it
- does not find a library there, it fails.
- The I<shared library extension> may be I<.so>, I<.dyld>, I<.dll>, or something
- different, depending upon the system.
- The B<-L> option is global. It does not matter where it is specified in the
- list of command line arguments; the directory is simply added to the search path
- and is applied to all libraries, preceding or succeeding, in the command line.
- =head2 Link order
- All object and bitcode files are linked first in the order they were
- specified on the command line. All library files are linked next.
- Some libraries may not be linked into the object program; see below.
- =head2 Library Linkage
- Object files and static bitcode objects are always linked into the output
- file. Library archives (.a files) load only the objects within the archive
- that define symbols needed by the output file. Hence, libraries should be
- listed after the object files and libraries which need them; otherwise, the
- library may not be linked in, and the dependent library will not have its
- undefined symbols defined.
- =head2 Native code generation
- The B<llvm-ld> program has limited support for native code generation, when
- using the B<-native> or B<-native-cbe> options. Native code generation is
- performed by converting the linked bitcode into native assembly (.s) or C code
- and running the system compiler (typically gcc) on the result.
- =head1 OPTIONS
- =head2 General Options
- =over
- =item B<-help>
- Print a summary of command line options.
- =item B<-v>
- Specifies verbose mode. In this mode the linker will print additional
- information about the actions it takes, programs it executes, etc.
- =item B<-stats>
- Print statistics.
- =item B<-time-passes>
- Record the amount of time needed for each pass and print it to standard
- error.
- =back
- =head2 Input/Output Options
- =over
- =item B<-o> F<filename>
- This overrides the default output file and specifies the name of the file that
- should be generated by the linker. By default, B<llvm-ld> generates a file named
- F<a.out> for compatibility with B<ld>. The output will be written to
- F<filename>.
- =item B<-b> F<filename>
- This option can be used to override the output bitcode file name. By default,
- the name of the bitcode output file is one more ".bc" suffix added to the name
- specified by B<-o filename> option.
- =item B<-l>F<name>
- This option specifies the F<name> of a library to search when resolving symbols
- for the program. Only the base name should be specified as F<name>, without a
- F<lib> prefix or any suffix.
- =item B<-L>F<Path>
- This option tells B<llvm-ld> to look in F<Path> to find any library subsequently
- specified with the B<-l> option. The paths will be searched in the order in
- which they are specified on the command line. If the library is still not found,
- a small set of system specific directories will also be searched. Note that
- libraries specified with the B<-l> option that occur I<before> any B<-L> options
- will not search the paths given by the B<-L> options following it.
- =item B<-link-as-library>
- Link the bitcode files together as a library, not an executable. In this mode,
- undefined symbols will be permitted.
- =item B<-r>
- An alias for -link-as-library.
- =item B<-native>
- Generate a native machine code executable.
- When generating native executables, B<llvm-ld> first checks for a bitcode
- version of the library and links it in, if necessary. If the library is
- missing, B<llvm-ld> skips it. Then, B<llvm-ld> links in the same
- libraries as native code.
- In this way, B<llvm-ld> should be able to link in optimized bitcode
- subsets of common libraries and then link in any part of the library that
- hasn't been converted to bitcode.
- =item B<-native-cbe>
- Generate a native machine code executable with the LLVM C backend.
-
- This option is identical to the B<-native> option, but uses the
- C backend to generate code for the program instead of an LLVM native
- code generator.
- =back
- =head2 Optimization Options
- =over
- =item B<-disable-inlining>
- Do not run the inlining pass. Functions will not be inlined into other
- functions.
- =item B<-disable-opt>
- Completely disable optimization.
- =item B<-disable-internalize>
- Do not mark all symbols as internal.
- =item B<-verify-each>
- Run the verification pass after each of the passes to verify intermediate
- results.
- =item B<-strip-all>
- Strip all debug and symbol information from the executable to make it smaller.
- =item B<-strip-debug>
- Strip all debug information from the executable to make it smaller.
- =item B<-s>
- An alias for B<-strip-all>.
- =item B<-S>
- An alias for B<-strip-debug>.
- =item B<-export-dynamic>
- An alias for B<-disable-internalize>
- =item B<-post-link-opt>F<Path>
- Run post-link optimization program. After linking is completed a bitcode file
- will be generated. It will be passed to the program specified by F<Path> as the
- first argument. The second argument to the program will be the name of a
- temporary file into which the program should place its optimized output. For
- example, the "no-op optimization" would be a simple shell script:
- #!/bin/bash
- cp $1 $2
- =back
- =head1 EXIT STATUS
- If B<llvm-ld> succeeds, it will exit with 0 return code. If an error occurs,
- it will exit with a non-zero return code.
- =head1 ENVIRONMENT
- The C<LLVM_LIB_SEARCH_PATH> environment variable is used to find bitcode
- libraries. Any paths specified in this variable will be searched after the C<-L>
- options.
- =head1 SEE ALSO
- L<llvm-link|llvm-link>
- =head1 AUTHORS
- Maintained by the LLVM Team (L<http://llvm.org>).
- =cut
|