| =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 bytecode files and links them |
| together into a single LLVM bytecode file. The output bytecode file can be |
| another bytecode file or an executable bytecode 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 bytecode 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 bytecode 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 |
| perfomed by converting the linked bytecode 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<-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 bytecode 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<-march=>C<target> |
| |
| Specifies the kind of machine for which code or assembly should be generated. |
| |
| =item B<-native> |
| |
| Generate a native machine code executable. |
| |
| When generating native executables, B<llvm-ld> first checks for a bytecode |
| 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 bytecode |
| subsets of common libraries and then link in any part of the library that |
| hasn't been converted to bytecode. |
| |
| =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<-O0> |
| |
| An alias for the -O1 option. |
| |
| =item B<-O1> |
| |
| Optimize for linking speed, not execution speed. The optimizer will attempt to |
| reduce the size of the linked program to reduce I/O but will not otherwise |
| perform any link-time optimizations. |
| |
| =item B<-O2> |
| |
| Perform only the minimal or required set of scalar optimizations. |
| |
| =item B<-03> |
| |
| An alias for the -O2 option. |
| |
| =item B<-04> |
| |
| Perform the standard link time inter-procedural optimizations. This will |
| attempt to optimize the program taking the entire program into consideration. |
| |
| =item B<-O5> |
| |
| Perform aggressive link time optimizations. This is the same as -O4 but works |
| more aggressively to optimize the program. |
| |
| =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. The various B<-On> options will be ignored and |
| no link time optimization passes will be run. |
| |
| =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<-load> F<module> |
| |
| Load an optimization module, F<module>, which is expected to be a dynamic |
| library that provides the function name C<RunOptimizations>. This function will |
| be passed the PassManager, and the optimization level (values 0-5 based on the |
| B<-On> option). This function may add passes to the PassManager that should be |
| run. This feature allows the optimization passes of B<llvm-ld> to be extended. |
| |
| =item B<-post-link-opt>F<Path> |
| |
| Run post-link optimization program. After linking is completed a bytecode 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 bytecode |
| 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 |