LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
lto.h
Go to the documentation of this file.
1 /*===-- llvm-c/lto.h - LTO Public C Interface ---------------------*- C -*-===*\
2 |* *|
3 |* The LLVM Compiler Infrastructure *|
4 |* *|
5 |* This file is distributed under the University of Illinois Open Source *|
6 |* License. See LICENSE.TXT for details. *|
7 |* *|
8 |*===----------------------------------------------------------------------===*|
9 |* *|
10 |* This header provides public interface to an abstract link time optimization*|
11 |* library. LLVM provides an implementation of this interface for use with *|
12 |* llvm bitcode files. *|
13 |* *|
14 \*===----------------------------------------------------------------------===*/
15 
16 #ifndef LLVM_C_LTO_H
17 #define LLVM_C_LTO_H
18 
19 #include <stddef.h>
20 #include <sys/types.h>
21 
22 #ifndef __cplusplus
23 #if !defined(_MSC_VER)
24 #include <stdbool.h>
25 typedef bool lto_bool_t;
26 #else
27 /* MSVC in particular does not have anything like _Bool or bool in C, but we can
28  at least make sure the type is the same size. The implementation side will
29  use C++ bool. */
30 typedef unsigned char lto_bool_t;
31 #endif
32 #else
33 typedef bool lto_bool_t;
34 #endif
35 
36 /**
37  * @defgroup LLVMCLTO LTO
38  * @ingroup LLVMC
39  *
40  * @{
41  */
42 
43 #define LTO_API_VERSION 5
44 
45 typedef enum {
46  LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */
57  LTO_SYMBOL_SCOPE_MASK = 0x00003800,
64 
65 typedef enum {
69 
70 typedef enum {
75 
76 
77 /** opaque reference to a loaded object module */
78 typedef struct LTOModule* lto_module_t;
79 
80 /** opaque reference to a code generator */
82 
83 #ifdef __cplusplus
84 extern "C" {
85 #endif
86 
87 /**
88  * Returns a printable string.
89  */
90 extern const char*
91 lto_get_version(void);
92 
93 
94 /**
95  * Returns the last error string or NULL if last operation was successful.
96  */
97 extern const char*
99 
100 /**
101  * Checks if a file is a loadable object file.
102  */
103 extern lto_bool_t
104 lto_module_is_object_file(const char* path);
105 
106 
107 /**
108  * Checks if a file is a loadable object compiled for requested target.
109  */
110 extern lto_bool_t
111 lto_module_is_object_file_for_target(const char* path,
112  const char* target_triple_prefix);
113 
114 
115 /**
116  * Checks if a buffer is a loadable object file.
117  */
118 extern lto_bool_t
119 lto_module_is_object_file_in_memory(const void* mem, size_t length);
120 
121 
122 /**
123  * Checks if a buffer is a loadable object compiled for requested target.
124  */
125 extern lto_bool_t
126 lto_module_is_object_file_in_memory_for_target(const void* mem, size_t length,
127  const char* target_triple_prefix);
128 
129 
130 /**
131  * Loads an object file from disk.
132  * Returns NULL on error (check lto_get_error_message() for details).
133  */
134 extern lto_module_t
135 lto_module_create(const char* path);
136 
137 
138 /**
139  * Loads an object file from memory.
140  * Returns NULL on error (check lto_get_error_message() for details).
141  */
142 extern lto_module_t
143 lto_module_create_from_memory(const void* mem, size_t length);
144 
145 /**
146  * Loads an object file from disk. The seek point of fd is not preserved.
147  * Returns NULL on error (check lto_get_error_message() for details).
148  */
149 extern lto_module_t
150 lto_module_create_from_fd(int fd, const char *path, size_t file_size);
151 
152 /**
153  * Loads an object file from disk. The seek point of fd is not preserved.
154  * Returns NULL on error (check lto_get_error_message() for details).
155  */
156 extern lto_module_t
157 lto_module_create_from_fd_at_offset(int fd, const char *path, size_t file_size,
158  size_t map_size, off_t offset);
159 
160 
161 /**
162  * Frees all memory internally allocated by the module.
163  * Upon return the lto_module_t is no longer valid.
164  */
165 extern void
166 lto_module_dispose(lto_module_t mod);
167 
168 
169 /**
170  * Returns triple string which the object module was compiled under.
171  */
172 extern const char*
173 lto_module_get_target_triple(lto_module_t mod);
174 
175 /**
176  * Sets triple string with which the object will be codegened.
177  */
178 extern void
179 lto_module_set_target_triple(lto_module_t mod, const char *triple);
180 
181 
182 /**
183  * Returns the number of symbols in the object module.
184  */
185 extern unsigned int
186 lto_module_get_num_symbols(lto_module_t mod);
187 
188 
189 /**
190  * Returns the name of the ith symbol in the object module.
191  */
192 extern const char*
193 lto_module_get_symbol_name(lto_module_t mod, unsigned int index);
194 
195 
196 /**
197  * Returns the attributes of the ith symbol in the object module.
198  */
200 lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index);
201 
202 
203 /**
204  * Instantiates a code generator.
205  * Returns NULL on error (check lto_get_error_message() for details).
206  */
207 extern lto_code_gen_t
208 lto_codegen_create(void);
209 
210 
211 /**
212  * Frees all code generator and all memory it internally allocated.
213  * Upon return the lto_code_gen_t is no longer valid.
214  */
215 extern void
216 lto_codegen_dispose(lto_code_gen_t);
217 
218 
219 
220 /**
221  * Add an object module to the set of modules for which code will be generated.
222  * Returns true on error (check lto_get_error_message() for details).
223  */
224 extern lto_bool_t
225 lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);
226 
227 
228 
229 /**
230  * Sets if debug info should be generated.
231  * Returns true on error (check lto_get_error_message() for details).
232  */
233 extern lto_bool_t
234 lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model);
235 
236 
237 /**
238  * Sets which PIC code model to generated.
239  * Returns true on error (check lto_get_error_message() for details).
240  */
241 extern lto_bool_t
242 lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model);
243 
244 
245 /**
246  * Sets the cpu to generate code for.
247  */
248 extern void
249 lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu);
250 
251 
252 /**
253  * Sets the location of the assembler tool to run. If not set, libLTO
254  * will use gcc to invoke the assembler.
255  */
256 extern void
257 lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
258 
259 /**
260  * Sets extra arguments that libLTO should pass to the assembler.
261  */
262 extern void
263 lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args,
264  int nargs);
265 
266 /**
267  * Tells LTO optimization passes that this symbol must be preserved
268  * because it is referenced by native code or a command line option.
269  */
270 extern void
271 lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const char* symbol);
272 
273 /**
274  * Writes a new object file at the specified path that contains the
275  * merged contents of all modules added so far.
276  * Returns true on error (check lto_get_error_message() for details).
277  */
278 extern lto_bool_t
279 lto_codegen_write_merged_modules(lto_code_gen_t cg, const char* path);
280 
281 /**
282  * Generates code for all added modules into one native object file.
283  * On success returns a pointer to a generated mach-o/ELF buffer and
284  * length set to the buffer size. The buffer is owned by the
285  * lto_code_gen_t and will be freed when lto_codegen_dispose()
286  * is called, or lto_codegen_compile() is called again.
287  * On failure, returns NULL (check lto_get_error_message() for details).
288  */
289 extern const void*
290 lto_codegen_compile(lto_code_gen_t cg, size_t* length);
291 
292 /**
293  * Generates code for all added modules into one native object file.
294  * The name of the file is written to name. Returns true on error.
295  */
296 extern lto_bool_t
297 lto_codegen_compile_to_file(lto_code_gen_t cg, const char** name);
298 
299 
300 /**
301  * Sets options to help debug codegen bugs.
302  */
303 extern void
304 lto_codegen_debug_options(lto_code_gen_t cg, const char *);
305 
306 /**
307  * Initializes LLVM disassemblers.
308  * FIXME: This doesn't really belong here.
309  */
310 extern void
312 
313 #ifdef __cplusplus
314 }
315 #endif
316 
317 /**
318  * @}
319  */
320 
321 #endif
lto_code_gen_t lto_codegen_create(void)
struct LTOModule * lto_module_t
Definition: lto.h:78
lto_bool_t lto_module_is_object_file_in_memory(const void *mem, size_t length)
lto_module_t lto_module_create(const char *path)
lto_symbol_attributes lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index)
lto_module_t lto_module_create_from_fd_at_offset(int fd, const char *path, size_t file_size, size_t map_size, off_t offset)
lto_bool_t lto_module_is_object_file_in_memory_for_target(const void *mem, size_t length, const char *target_triple_prefix)
error_code file_size(const Twine &Path, uint64_t &Result)
Get file size.
Definition: FileSystem.h:539
const void * lto_codegen_compile(lto_code_gen_t cg, size_t *length)
bool lto_bool_t
Definition: lto.h:25
void lto_codegen_set_assembler_path(lto_code_gen_t cg, const char *path)
void lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args, int nargs)
unsigned int lto_module_get_num_symbols(lto_module_t mod)
lto_debug_model
Definition: lto.h:65
lto_bool_t lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model)
lto_bool_t lto_module_is_object_file_for_target(const char *path, const char *target_triple_prefix)
lto_bool_t lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name)
void lto_module_set_target_triple(lto_module_t mod, const char *triple)
lto_module_t lto_module_create_from_memory(const void *mem, size_t length)
void lto_codegen_debug_options(lto_code_gen_t cg, const char *)
lto_bool_t lto_module_is_object_file(const char *path)
const char * lto_get_version(void)
lto_codegen_model
Definition: lto.h:70
const char * lto_get_error_message(void)
void lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu)
lto_module_t lto_module_create_from_fd(int fd, const char *path, size_t file_size)
void lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const char *symbol)
void lto_initialize_disassembler(void)
lto_symbol_attributes
Definition: lto.h:45
struct LTOCodeGenerator * lto_code_gen_t
Definition: lto.h:81
void lto_module_dispose(lto_module_t mod)
lto_bool_t lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod)
lto_bool_t lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model)
void lto_codegen_dispose(lto_code_gen_t)
const char * lto_module_get_target_triple(lto_module_t mod)
lto_bool_t lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path)
const char * lto_module_get_symbol_name(lto_module_t mod, unsigned int index)