Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | llvm-ld - LLVM linker |
| 6 | |
| 7 | =head1 SYNOPSIS |
| 8 | |
| 9 | B<llvm-ld> <options> <files> |
| 10 | |
| 11 | =head1 DESCRIPTION |
| 12 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 13 | The B<llvm-ld> tool takes a set of LLVM bitcode files and links them |
| 14 | together into a single LLVM bitcode file. The output bitcode file can be |
| 15 | another bitcode file or an executable bitcode program. Using additional |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 16 | options, B<llvm-ld> is able to produce native code executables. |
| 17 | |
| 18 | The B<llvm-ld> tool is the main linker for LLVM. It is used to link together |
| 19 | the output of LLVM front-end compilers and run "link time" optimizations (mostly |
| 20 | the inter-procedural kind). |
| 21 | |
Reid Spencer | ec5cf81 | 2007-07-09 05:58:08 +0000 | [diff] [blame] | 22 | The B<llvm-ld> tools attempts to mimic the interface provided by the default |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 23 | system linker so that it can act as a I<drop-in> replacement. |
| 24 | |
| 25 | =head2 Search Order |
| 26 | |
| 27 | When looking for objects specified on the command line, B<llvm-ld> will search |
| 28 | for the object first in the current directory and then in the directory |
| 29 | specified by the B<LLVM_LIB_SEARCH_PATH> environment variable. If it cannot |
| 30 | find the object, it fails. |
| 31 | |
| 32 | When looking for a library specified with the B<-l> option, B<llvm-ld> first |
| 33 | attempts to load a file with that name from the current directory. If that |
| 34 | fails, it looks for libI<library>.bc, libI<library>.a, or libI<library>.I<shared |
| 35 | library extension>, in that order, in each directory added to the library search |
| 36 | path with the B<-L> option. These directories are searched in the order they |
| 37 | are specified. If the library cannot be located, then B<llvm-ld> looks in the |
| 38 | directory specified by the B<LLVM_LIB_SEARCH_PATH> environment variable. If it |
| 39 | does not find a library there, it fails. |
| 40 | |
| 41 | The I<shared library extension> may be I<.so>, I<.dyld>, I<.dll>, or something |
| 42 | different, depending upon the system. |
| 43 | |
| 44 | The B<-L> option is global. It does not matter where it is specified in the |
| 45 | list of command line arguments; the directory is simply added to the search path |
| 46 | and is applied to all libraries, preceding or succeeding, in the command line. |
| 47 | |
| 48 | =head2 Link order |
| 49 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 50 | All object and bitcode files are linked first in the order they were |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 51 | specified on the command line. All library files are linked next. |
| 52 | Some libraries may not be linked into the object program; see below. |
| 53 | |
| 54 | =head2 Library Linkage |
| 55 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 56 | Object files and static bitcode objects are always linked into the output |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 57 | file. Library archives (.a files) load only the objects within the archive |
| 58 | that define symbols needed by the output file. Hence, libraries should be |
| 59 | listed after the object files and libraries which need them; otherwise, the |
| 60 | library may not be linked in, and the dependent library will not have its |
| 61 | undefined symbols defined. |
| 62 | |
| 63 | =head2 Native code generation |
| 64 | |
| 65 | The B<llvm-ld> program has limited support for native code generation, when |
| 66 | using the B<-native> or B<-native-cbe> options. Native code generation is |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 67 | performed by converting the linked bitcode into native assembly (.s) or C code |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 68 | and running the system compiler (typically gcc) on the result. |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 69 | |
| 70 | =head1 OPTIONS |
| 71 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 72 | =head2 General Options |
| 73 | |
Reid Spencer | 4d9e7fe | 2007-02-09 04:15:08 +0000 | [diff] [blame] | 74 | =over |
| 75 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 76 | =item B<-help> |
| 77 | |
| 78 | Print a summary of command line options. |
| 79 | |
| 80 | =item B<-v> |
| 81 | |
| 82 | Specifies verbose mode. In this mode the linker will print additional |
| 83 | information about the actions it takes, programs it executes, etc. |
| 84 | |
| 85 | =item B<-stats> |
| 86 | |
| 87 | Print statistics. |
| 88 | |
| 89 | =item B<-time-passes> |
| 90 | |
| 91 | Record the amount of time needed for each pass and print it to standard |
| 92 | error. |
| 93 | |
Reid Spencer | 4d9e7fe | 2007-02-09 04:15:08 +0000 | [diff] [blame] | 94 | =back |
| 95 | |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 96 | =head2 Input/Output Options |
| 97 | |
| 98 | =over |
| 99 | |
| 100 | =item B<-o> F<filename> |
| 101 | |
| 102 | This overrides the default output file and specifies the name of the file that |
| 103 | should be generated by the linker. By default, B<llvm-ld> generates a file named |
| 104 | F<a.out> for compatibility with B<ld>. The output will be written to |
| 105 | F<filename>. |
| 106 | |
| 107 | =item B<-l>F<name> |
| 108 | |
| 109 | This option specifies the F<name> of a library to search when resolving symbols |
| 110 | for the program. Only the base name should be specified as F<name>, without a |
| 111 | F<lib> prefix or any suffix. |
| 112 | |
| 113 | =item B<-L>F<Path> |
| 114 | |
| 115 | This option tells B<llvm-ld> to look in F<Path> to find any library subsequently |
| 116 | specified with the B<-l> option. The paths will be searched in the order in |
| 117 | which they are specified on the command line. If the library is still not found, |
| 118 | a small set of system specific directories will also be searched. Note that |
| 119 | libraries specified with the B<-l> option that occur I<before> any B<-L> options |
| 120 | will not search the paths given by the B<-L> options following it. |
| 121 | |
| 122 | =item B<-link-as-library> |
| 123 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 124 | Link the bitcode files together as a library, not an executable. In this mode, |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 125 | undefined symbols will be permitted. |
| 126 | |
| 127 | =item B<-r> |
| 128 | |
| 129 | An alias for -link-as-library. |
| 130 | |
| 131 | =item B<-march=>C<target> |
| 132 | |
| 133 | Specifies the kind of machine for which code or assembly should be generated. |
| 134 | |
| 135 | =item B<-native> |
| 136 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 137 | Generate a native machine code executable. |
| 138 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 139 | When generating native executables, B<llvm-ld> first checks for a bitcode |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 140 | version of the library and links it in, if necessary. If the library is |
| 141 | missing, B<llvm-ld> skips it. Then, B<llvm-ld> links in the same |
| 142 | libraries as native code. |
| 143 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 144 | In this way, B<llvm-ld> should be able to link in optimized bitcode |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 145 | subsets of common libraries and then link in any part of the library that |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 146 | hasn't been converted to bitcode. |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 147 | |
| 148 | =item B<-native-cbe> |
| 149 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 150 | Generate a native machine code executable with the LLVM C backend. |
| 151 | |
| 152 | This option is identical to the B<-native> option, but uses the |
| 153 | C backend to generate code for the program instead of an LLVM native |
| 154 | code generator. |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 155 | |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 156 | =back |
| 157 | |
| 158 | =head2 Optimization Options |
| 159 | |
| 160 | =over |
| 161 | |
| 162 | =item B<-O0> |
| 163 | |
| 164 | An alias for the -O1 option. |
| 165 | |
| 166 | =item B<-O1> |
| 167 | |
| 168 | Optimize for linking speed, not execution speed. The optimizer will attempt to |
| 169 | reduce the size of the linked program to reduce I/O but will not otherwise |
| 170 | perform any link-time optimizations. |
| 171 | |
| 172 | =item B<-O2> |
| 173 | |
| 174 | Perform only the minimal or required set of scalar optimizations. |
| 175 | |
| 176 | =item B<-03> |
| 177 | |
| 178 | An alias for the -O2 option. |
| 179 | |
| 180 | =item B<-04> |
| 181 | |
| 182 | Perform the standard link time inter-procedural optimizations. This will |
| 183 | attempt to optimize the program taking the entire program into consideration. |
| 184 | |
| 185 | =item B<-O5> |
| 186 | |
| 187 | Perform aggressive link time optimizations. This is the same as -O4 but works |
| 188 | more aggressively to optimize the program. |
| 189 | |
| 190 | =item B<-disable-inlining> |
| 191 | |
| 192 | Do not run the inlining pass. Functions will not be inlined into other |
| 193 | functions. |
| 194 | |
| 195 | =item B<-disable-opt> |
| 196 | |
| 197 | Completely disable optimization. The various B<-On> options will be ignored and |
| 198 | no link time optimization passes will be run. |
| 199 | |
| 200 | =item B<-disable-internalize> |
| 201 | |
| 202 | Do not mark all symbols as internal. |
| 203 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 204 | =item B<-verify-each> |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 205 | |
| 206 | Run the verification pass after each of the passes to verify intermediate |
| 207 | results. |
| 208 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 209 | =item B<-strip-all> |
| 210 | |
| 211 | Strip all debug and symbol information from the executable to make it smaller. |
| 212 | |
| 213 | =item B<-strip-debug> |
| 214 | |
| 215 | Strip all debug information from the executable to make it smaller. |
| 216 | |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 217 | =item B<-s> |
| 218 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 219 | An alias for B<-strip-all>. |
| 220 | |
| 221 | =item B<-S> |
| 222 | |
| 223 | An alias for B<-strip-debug>. |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 224 | |
| 225 | =item B<-export-dynamic> |
| 226 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 227 | An alias for B<-disable-internalize> |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 228 | |
| 229 | =item B<-load> F<module> |
| 230 | |
| 231 | Load an optimization module, F<module>, which is expected to be a dynamic |
| 232 | library that provides the function name C<RunOptimizations>. This function will |
| 233 | be passed the PassManager, and the optimization level (values 0-5 based on the |
| 234 | B<-On> option). This function may add passes to the PassManager that should be |
| 235 | run. This feature allows the optimization passes of B<llvm-ld> to be extended. |
| 236 | |
Reid Spencer | fa8dab4 | 2005-12-21 05:13:06 +0000 | [diff] [blame] | 237 | =item B<-post-link-opt>F<Path> |
| 238 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 239 | Run post-link optimization program. After linking is completed a bitcode file |
Reid Spencer | fa8dab4 | 2005-12-21 05:13:06 +0000 | [diff] [blame] | 240 | will be generated. It will be passed to the program specified by F<Path> as the |
| 241 | first argument. The second argument to the program will be the name of a |
| 242 | temporary file into which the program should place its optimized output. For |
| 243 | example, the "no-op optimization" would be a simple shell script: |
| 244 | |
Reid Spencer | 4d9e7fe | 2007-02-09 04:15:08 +0000 | [diff] [blame] | 245 | #!/bin/bash |
| 246 | cp $1 $2 |
Reid Spencer | fa8dab4 | 2005-12-21 05:13:06 +0000 | [diff] [blame] | 247 | |
| 248 | =back |
| 249 | |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 250 | =head1 EXIT STATUS |
| 251 | |
| 252 | If B<llvm-ld> succeeds, it will exit with 0 return code. If an error occurs, |
| 253 | it will exit with a non-zero return code. |
| 254 | |
Reid Spencer | f8d3e4a | 2004-11-29 03:43:29 +0000 | [diff] [blame] | 255 | =head1 ENVIRONMENT |
| 256 | |
Gabor Greif | 3bd6e0d | 2007-07-09 11:24:05 +0000 | [diff] [blame] | 257 | The C<LLVM_LIB_SEARCH_PATH> environment variable is used to find bitcode |
Reid Spencer | f8d3e4a | 2004-11-29 03:43:29 +0000 | [diff] [blame] | 258 | libraries. Any paths specified in this variable will be searched after the C<-L> |
| 259 | options. |
| 260 | |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 261 | =head1 SEE ALSO |
| 262 | |
Reid Spencer | 8645f26 | 2007-02-09 04:12:51 +0000 | [diff] [blame] | 263 | L<llvm-link|llvm-link> |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 264 | |
| 265 | =head1 AUTHORS |
| 266 | |
Reid Spencer | cd143fc | 2006-03-14 05:42:07 +0000 | [diff] [blame] | 267 | Maintained by the LLVM Team (L<http://llvm.org>). |
Reid Spencer | 28e8e42 | 2004-11-21 18:20:16 +0000 | [diff] [blame] | 268 | |
| 269 | =cut |