blob: bff63ad09690d2c25483a80cbd046cd9968544f2 [file] [log] [blame]
Nick Kledzik07b4a622008-02-26 20:26:43 +00001/*===-- 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
Jakub Staszak02a3c9b2013-01-10 00:45:19 +000016#ifndef LLVM_C_LTO_H
17#define LLVM_C_LTO_H
Nick Kledzik07b4a622008-02-26 20:26:43 +000018
Nick Kledzik07b4a622008-02-26 20:26:43 +000019#include <stddef.h>
Peter Collingbournedda35912013-09-25 07:52:21 +000020#include <sys/types.h>
Nick Kledzik07b4a622008-02-26 20:26:43 +000021
Reid Klecknerddac1512013-10-24 22:26:04 +000022#ifndef __cplusplus
23#if !defined(_MSC_VER)
24#include <stdbool.h>
25typedef bool lto_bool_t;
26#else
Rafael Espindolafe3be112013-10-25 12:59:02 +000027/* 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. */
Reid Klecknerddac1512013-10-24 22:26:04 +000030typedef unsigned char lto_bool_t;
31#endif
32#else
33typedef bool lto_bool_t;
34#endif
35
Gregory Szorc34c863a2012-03-21 03:54:29 +000036/**
37 * @defgroup LLVMCLTO LTO
38 * @ingroup LLVMC
39 *
40 * @{
41 */
42
Manman Ren03456a12014-02-10 23:26:14 +000043#define LTO_API_VERSION 9
Nick Kledzikcac8c8a2009-06-04 00:28:45 +000044
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +000045/**
46 * \since prior to LTO_API_VERSION=3
47 */
Nick Kledzik07b4a622008-02-26 20:26:43 +000048typedef enum {
Bill Wendlingdcd7c2b2010-09-27 20:17:45 +000049 LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */
Bill Wendling152e4732012-03-31 10:44:20 +000050 LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
51 LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,
52 LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
53 LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,
54 LTO_SYMBOL_DEFINITION_MASK = 0x00000700,
55 LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,
56 LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
57 LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,
58 LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,
Bill Wendlingdcd7c2b2010-09-27 20:17:45 +000059 LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
Bill Wendling152e4732012-03-31 10:44:20 +000060 LTO_SYMBOL_SCOPE_MASK = 0x00003800,
61 LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,
62 LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,
63 LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
Bill Wendlingdcd7c2b2010-09-27 20:17:45 +000064 LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
65 LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800
Nick Kledzik07b4a622008-02-26 20:26:43 +000066} lto_symbol_attributes;
67
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +000068/**
69 * \since prior to LTO_API_VERSION=3
70 */
Nick Kledzik07b4a622008-02-26 20:26:43 +000071typedef enum {
72 LTO_DEBUG_MODEL_NONE = 0,
73 LTO_DEBUG_MODEL_DWARF = 1
74} lto_debug_model;
75
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +000076/**
77 * \since prior to LTO_API_VERSION=3
78 */
Nick Kledzik07b4a622008-02-26 20:26:43 +000079typedef enum {
80 LTO_CODEGEN_PIC_MODEL_STATIC = 0,
81 LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1,
82 LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2
83} lto_codegen_model;
84
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +000085/**
86 * \since LTO_API_VERSION=6
87 */
Duncan P. N. Exon Smith93be7c42014-01-14 18:52:17 +000088typedef enum {
89 LTO_INTERNALIZE_FULL = 0,
90 LTO_INTERNALIZE_NONE = 1,
91 LTO_INTERNALIZE_HIDDEN = 2
92} lto_internalize_strategy;
Nick Kledzik07b4a622008-02-26 20:26:43 +000093
94/** opaque reference to a loaded object module */
95typedef struct LTOModule* lto_module_t;
96
97/** opaque reference to a code generator */
98typedef struct LTOCodeGenerator* lto_code_gen_t;
99
Nick Kledzik07b4a622008-02-26 20:26:43 +0000100#ifdef __cplusplus
101extern "C" {
102#endif
103
104/**
105 * Returns a printable string.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000106 *
107 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000108 */
109extern const char*
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000110lto_get_version(void);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000111
112
113/**
Chris Lattner0ab5e2c2011-04-15 05:18:47 +0000114 * Returns the last error string or NULL if last operation was successful.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000115 *
116 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000117 */
118extern const char*
Gordon Henriksena735a9c2008-05-04 12:55:34 +0000119lto_get_error_message(void);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000120
Nick Kledzik07b4a622008-02-26 20:26:43 +0000121/**
122 * Checks if a file is a loadable object file.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000123 *
124 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000125 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000126extern lto_bool_t
Nick Kledzik07b4a622008-02-26 20:26:43 +0000127lto_module_is_object_file(const char* path);
128
129
130/**
131 * Checks if a file is a loadable object compiled for requested target.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000132 *
133 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000134 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000135extern lto_bool_t
Bill Wendling152e4732012-03-31 10:44:20 +0000136lto_module_is_object_file_for_target(const char* path,
Nick Lewycky8811ecd2009-02-06 07:01:00 +0000137 const char* target_triple_prefix);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000138
139
140/**
141 * Checks if a buffer is a loadable object file.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000142 *
143 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000144 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000145extern lto_bool_t
Nick Kledzik07b4a622008-02-26 20:26:43 +0000146lto_module_is_object_file_in_memory(const void* mem, size_t length);
147
148
149/**
150 * Checks if a buffer is a loadable object compiled for requested target.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000151 *
152 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000153 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000154extern lto_bool_t
Bill Wendling152e4732012-03-31 10:44:20 +0000155lto_module_is_object_file_in_memory_for_target(const void* mem, size_t length,
Eric Christopher135de902010-07-12 05:13:35 +0000156 const char* target_triple_prefix);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000157
158
159/**
160 * Loads an object file from disk.
161 * Returns NULL on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000162 *
163 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000164 */
165extern lto_module_t
Owen Anderson0ff99382009-07-02 00:31:14 +0000166lto_module_create(const char* path);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000167
168
169/**
170 * Loads an object file from memory.
171 * Returns NULL on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000172 *
173 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000174 */
175extern lto_module_t
Owen Anderson0ff99382009-07-02 00:31:14 +0000176lto_module_create_from_memory(const void* mem, size_t length);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000177
Rafael Espindola56e41f72011-02-08 22:40:47 +0000178/**
Manman Ren03456a12014-02-10 23:26:14 +0000179 * Loads an object file from memory with an extra path argument.
180 * Returns NULL on error (check lto_get_error_message() for details).
181 *
182 * \since prior to LTO_API_VERSION=9
183 */
184extern lto_module_t
185lto_module_create_from_memory_with_path(const void* mem, size_t length,
186 const char *path);
187
188/**
Rafael Espindola56e41f72011-02-08 22:40:47 +0000189 * Loads an object file from disk. The seek point of fd is not preserved.
190 * Returns NULL on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000191 *
192 * \since LTO_API_VERSION=5
Rafael Espindola56e41f72011-02-08 22:40:47 +0000193 */
194extern lto_module_t
Rafael Espindolab39c7c72011-03-17 00:36:11 +0000195lto_module_create_from_fd(int fd, const char *path, size_t file_size);
196
197/**
198 * Loads an object file from disk. The seek point of fd is not preserved.
199 * Returns NULL on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000200 *
201 * \since LTO_API_VERSION=5
Rafael Espindolab39c7c72011-03-17 00:36:11 +0000202 */
203extern lto_module_t
204lto_module_create_from_fd_at_offset(int fd, const char *path, size_t file_size,
205 size_t map_size, off_t offset);
Rafael Espindola56e41f72011-02-08 22:40:47 +0000206
Nick Kledzik07b4a622008-02-26 20:26:43 +0000207/**
208 * Frees all memory internally allocated by the module.
209 * Upon return the lto_module_t is no longer valid.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000210 *
211 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000212 */
213extern void
214lto_module_dispose(lto_module_t mod);
215
Nick Kledzik07b4a622008-02-26 20:26:43 +0000216/**
217 * Returns triple string which the object module was compiled under.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000218 *
219 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000220 */
221extern const char*
222lto_module_get_target_triple(lto_module_t mod);
223
Rafael Espindola4ef89f52010-08-09 21:09:46 +0000224/**
225 * Sets triple string with which the object will be codegened.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000226 *
227 * \since LTO_API_VERSION=4
Rafael Espindola4ef89f52010-08-09 21:09:46 +0000228 */
229extern void
230lto_module_set_target_triple(lto_module_t mod, const char *triple);
231
Nick Kledzik07b4a622008-02-26 20:26:43 +0000232
233/**
234 * Returns the number of symbols in the object module.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000235 *
236 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000237 */
Devang Patel39bd6ce2011-01-07 22:26:25 +0000238extern unsigned int
Nick Kledzik07b4a622008-02-26 20:26:43 +0000239lto_module_get_num_symbols(lto_module_t mod);
240
241
242/**
243 * Returns the name of the ith symbol in the object module.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000244 *
245 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000246 */
247extern const char*
Devang Patel39bd6ce2011-01-07 22:26:25 +0000248lto_module_get_symbol_name(lto_module_t mod, unsigned int index);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000249
250
251/**
252 * Returns the attributes of the ith symbol in the object module.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000253 *
254 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000255 */
256extern lto_symbol_attributes
Devang Patel39bd6ce2011-01-07 22:26:25 +0000257lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000258
Yunzhong Gaoa88d7ab2014-01-21 18:31:27 +0000259
260/**
261 * Returns the number of dependent libraries in the object module.
262 *
263 * \since LTO_API_VERSION=8
264 */
265extern unsigned int
266lto_module_get_num_deplibs(lto_module_t mod);
267
268
269/**
270 * Returns the ith dependent library in the module.
271 *
272 * \since LTO_API_VERSION=8
273 */
274extern const char*
275lto_module_get_deplib(lto_module_t mod, unsigned int index);
276
277
278/**
279 * Returns the number of linker options in the object module.
280 *
281 * \since LTO_API_VERSION=8
282 */
283extern unsigned int
284lto_module_get_num_linkeropts(lto_module_t mod);
285
286
287/**
288 * Returns the ith linker option in the module.
289 *
290 * \since LTO_API_VERSION=8
291 */
292extern const char*
293lto_module_get_linkeropt(lto_module_t mod, unsigned int index);
294
295
Quentin Colombet5fa1f6f2014-01-15 22:04:35 +0000296/**
297 * Diagnostic severity.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000298 *
299 * \since LTO_API_VERSION=7
Quentin Colombet5fa1f6f2014-01-15 22:04:35 +0000300 */
301typedef enum {
302 LTO_DS_ERROR,
303 LTO_DS_WARNING,
304 LTO_DS_NOTE
305} lto_codegen_diagnostic_severity_t;
306
307/**
308 * Diagnostic handler type.
309 * \p severity defines the severity.
310 * \p diag is the actual diagnostic.
311 * The diagnostic is not prefixed by any of severity keyword, e.g., 'error: '.
312 * \p ctxt is used to pass the context set with the diagnostic handler.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000313 *
314 * \since LTO_API_VERSION=7
Quentin Colombet5fa1f6f2014-01-15 22:04:35 +0000315 */
316typedef void (*lto_diagnostic_handler_t)(
317 lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt);
318
319/**
320 * Set a diagnostic handler and the related context (void *).
321 * This is more general than lto_get_error_message, as the diagnostic handler
322 * can be called at anytime within lto.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000323 *
324 * \since LTO_API_VERSION=7
Quentin Colombet5fa1f6f2014-01-15 22:04:35 +0000325 */
326extern void lto_codegen_set_diagnostic_handler(lto_code_gen_t,
327 lto_diagnostic_handler_t,
328 void *);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000329
330/**
331 * Instantiates a code generator.
332 * Returns NULL on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000333 *
334 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000335 */
336extern lto_code_gen_t
Owen Anderson0ff99382009-07-02 00:31:14 +0000337lto_codegen_create(void);
Nick Kledzik07b4a622008-02-26 20:26:43 +0000338
Nick Kledzik07b4a622008-02-26 20:26:43 +0000339/**
340 * Frees all code generator and all memory it internally allocated.
341 * Upon return the lto_code_gen_t is no longer valid.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000342 *
343 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000344 */
345extern void
346lto_codegen_dispose(lto_code_gen_t);
347
Nick Kledzik07b4a622008-02-26 20:26:43 +0000348/**
349 * Add an object module to the set of modules for which code will be generated.
350 * Returns true on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000351 *
352 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000353 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000354extern lto_bool_t
Nick Kledzik07b4a622008-02-26 20:26:43 +0000355lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);
356
Nick Kledzik07b4a622008-02-26 20:26:43 +0000357/**
358 * Sets if debug info should be generated.
359 * Returns true on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000360 *
361 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000362 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000363extern lto_bool_t
Nick Kledzik07b4a622008-02-26 20:26:43 +0000364lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model);
365
366
367/**
368 * Sets which PIC code model to generated.
369 * Returns true on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000370 *
371 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000372 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000373extern lto_bool_t
Nick Kledzik07b4a622008-02-26 20:26:43 +0000374lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model);
375
376
377/**
Rafael Espindolaccab1dd2010-08-11 00:15:13 +0000378 * Sets the cpu to generate code for.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000379 *
380 * \since LTO_API_VERSION=4
Rafael Espindolaccab1dd2010-08-11 00:15:13 +0000381 */
382extern void
383lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu);
384
385
386/**
Nick Kledzikcac8c8a2009-06-04 00:28:45 +0000387 * Sets the location of the assembler tool to run. If not set, libLTO
388 * will use gcc to invoke the assembler.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000389 *
390 * \since LTO_API_VERSION=3
Nick Kledzikcac8c8a2009-06-04 00:28:45 +0000391 */
392extern void
393lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
394
Rafael Espindola00456462010-08-10 18:55:09 +0000395/**
396 * Sets extra arguments that libLTO should pass to the assembler.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000397 *
398 * \since LTO_API_VERSION=4
Rafael Espindola00456462010-08-10 18:55:09 +0000399 */
400extern void
401lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args,
402 int nargs);
Nick Kledzikcac8c8a2009-06-04 00:28:45 +0000403
404/**
Duncan P. N. Exon Smith93be7c42014-01-14 18:52:17 +0000405 * Sets the strategy to use during internalize. Default strategy is
406 * LTO_INTERNALIZE_FULL.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000407 *
408 * \since LTO_API_VERSION=6
Duncan P. N. Exon Smith93be7c42014-01-14 18:52:17 +0000409 */
410extern void
411lto_codegen_set_internalize_strategy(lto_code_gen_t cg,
412 lto_internalize_strategy);
413
414/**
Rafael Espindolacda29112013-10-03 18:29:09 +0000415 * Tells LTO optimization passes that this symbol must be preserved
416 * because it is referenced by native code or a command line option.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000417 *
418 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000419 */
420extern void
421lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const char* symbol);
422
Nick Kledzik07b4a622008-02-26 20:26:43 +0000423/**
424 * Writes a new object file at the specified path that contains the
425 * merged contents of all modules added so far.
426 * Returns true on error (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000427 *
428 * \since LTO_API_VERSION=5
Nick Kledzik07b4a622008-02-26 20:26:43 +0000429 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000430extern lto_bool_t
Nick Kledzik07b4a622008-02-26 20:26:43 +0000431lto_codegen_write_merged_modules(lto_code_gen_t cg, const char* path);
432
Nick Kledzik07b4a622008-02-26 20:26:43 +0000433/**
434 * Generates code for all added modules into one native object file.
Chris Lattner0ab5e2c2011-04-15 05:18:47 +0000435 * On success returns a pointer to a generated mach-o/ELF buffer and
Bill Wendling152e4732012-03-31 10:44:20 +0000436 * length set to the buffer size. The buffer is owned by the
Nick Kledzik91a6dcf2008-02-27 22:25:36 +0000437 * lto_code_gen_t and will be freed when lto_codegen_dispose()
438 * is called, or lto_codegen_compile() is called again.
Nick Kledzik07b4a622008-02-26 20:26:43 +0000439 * On failure, returns NULL (check lto_get_error_message() for details).
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000440 *
441 * \since prior to LTO_API_VERSION=3
Nick Kledzik07b4a622008-02-26 20:26:43 +0000442 */
Nick Kledzik91a6dcf2008-02-27 22:25:36 +0000443extern const void*
Nick Kledzik07b4a622008-02-26 20:26:43 +0000444lto_codegen_compile(lto_code_gen_t cg, size_t* length);
445
Rafael Espindola26b57ff2011-03-22 20:57:13 +0000446/**
447 * Generates code for all added modules into one native object file.
448 * The name of the file is written to name. Returns true on error.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000449 *
450 * \since LTO_API_VERSION=5
Rafael Espindola26b57ff2011-03-22 20:57:13 +0000451 */
Reid Klecknerddac1512013-10-24 22:26:04 +0000452extern lto_bool_t
Rafael Espindola26b57ff2011-03-22 20:57:13 +0000453lto_codegen_compile_to_file(lto_code_gen_t cg, const char** name);
454
Nick Kledzik07b4a622008-02-26 20:26:43 +0000455
Devang Patela0e4fb82008-07-03 22:53:14 +0000456/**
457 * Sets options to help debug codegen bugs.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000458 *
459 * \since prior to LTO_API_VERSION=3
Devang Patela0e4fb82008-07-03 22:53:14 +0000460 */
461extern void
462lto_codegen_debug_options(lto_code_gen_t cg, const char *);
Bill Wendling152e4732012-03-31 10:44:20 +0000463
Benjamin Kramer9bcb9222012-11-24 16:59:10 +0000464/**
465 * Initializes LLVM disassemblers.
466 * FIXME: This doesn't really belong here.
Duncan P. N. Exon Smith40fdf5f2014-01-16 21:37:17 +0000467 *
468 * \since LTO_API_VERSION=5
Benjamin Kramer9bcb9222012-11-24 16:59:10 +0000469 */
470extern void
471lto_initialize_disassembler(void);
472
Nick Kledzik07b4a622008-02-26 20:26:43 +0000473#ifdef __cplusplus
474}
475#endif
476
Gregory Szorc34c863a2012-03-21 03:54:29 +0000477/**
478 * @}
479 */
Nick Kledzik07b4a622008-02-26 20:26:43 +0000480
481#endif