LLVM API Documentation

Defines | Typedefs | Enumerations | Functions
LTO
LLVM-C: C interface to LLVM
Collaboration diagram for LTO:

Defines

#define LTO_API_VERSION   11

Typedefs

typedef struct
LLVMOpaqueLTOModule * 
lto_module_t
typedef struct
LLVMOpaqueLTOCodeGenerator * 
lto_code_gen_t
typedef void(* lto_diagnostic_handler_t )(lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt)

Enumerations

enum  lto_symbol_attributes {
  LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0, LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0, LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
  LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080, LTO_SYMBOL_DEFINITION_MASK = 0x00000700, LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100, LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
  LTO_SYMBOL_DEFINITION_WEAK = 0x00000300, LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400, LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500, LTO_SYMBOL_SCOPE_MASK = 0x00003800,
  LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800, LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000, LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000, LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
  LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800
}
enum  lto_debug_model { LTO_DEBUG_MODEL_NONE = 0, LTO_DEBUG_MODEL_DWARF = 1 }
enum  lto_codegen_model { LTO_CODEGEN_PIC_MODEL_STATIC = 0, LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1, LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2, LTO_CODEGEN_PIC_MODEL_DEFAULT = 3 }
enum  lto_codegen_diagnostic_severity_t { LTO_DS_ERROR = 0, LTO_DS_WARNING = 1, LTO_DS_REMARK = 3, LTO_DS_NOTE = 2 }

Functions

const char * lto_get_version (void)
const char * lto_get_error_message (void)
lto_bool_t lto_module_is_object_file (const char *path)
lto_bool_t lto_module_is_object_file_for_target (const char *path, const char *target_triple_prefix)
lto_bool_t lto_module_is_object_file_in_memory (const void *mem, size_t length)
lto_bool_t lto_module_is_object_file_in_memory_for_target (const void *mem, size_t length, const char *target_triple_prefix)
lto_module_t lto_module_create (const char *path)
lto_module_t lto_module_create_from_memory (const void *mem, size_t length)
lto_module_t lto_module_create_from_memory_with_path (const void *mem, size_t length, const char *path)
lto_module_t lto_module_create_in_local_context (const void *mem, size_t length, const char *path)
 Loads an object file in its own context.
lto_module_t lto_module_create_in_codegen_context (const void *mem, size_t length, const char *path, lto_code_gen_t cg)
 Loads an object file in the codegen context.
lto_module_t lto_module_create_from_fd (int fd, const char *path, size_t file_size)
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)
void lto_module_dispose (lto_module_t mod)
const char * lto_module_get_target_triple (lto_module_t mod)
void lto_module_set_target_triple (lto_module_t mod, const char *triple)
unsigned int lto_module_get_num_symbols (lto_module_t mod)
const char * lto_module_get_symbol_name (lto_module_t mod, unsigned int index)
lto_symbol_attributes lto_module_get_symbol_attribute (lto_module_t mod, unsigned int index)
unsigned int lto_module_get_num_deplibs (lto_module_t mod)
const char * lto_module_get_deplib (lto_module_t mod, unsigned int index)
unsigned int lto_module_get_num_linkeropts (lto_module_t mod)
const char * lto_module_get_linkeropt (lto_module_t mod, unsigned int index)
void lto_codegen_set_diagnostic_handler (lto_code_gen_t, lto_diagnostic_handler_t, void *)
lto_code_gen_t lto_codegen_create (void)
lto_code_gen_t lto_codegen_create_in_local_context (void)
 Instantiate a code generator in its own context.
void lto_codegen_dispose (lto_code_gen_t)
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)
lto_bool_t lto_codegen_set_pic_model (lto_code_gen_t cg, lto_codegen_model)
void lto_codegen_set_cpu (lto_code_gen_t cg, const char *cpu)
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)
void lto_codegen_add_must_preserve_symbol (lto_code_gen_t cg, const char *symbol)
lto_bool_t lto_codegen_write_merged_modules (lto_code_gen_t cg, const char *path)
const void * lto_codegen_compile (lto_code_gen_t cg, size_t *length)
lto_bool_t lto_codegen_compile_to_file (lto_code_gen_t cg, const char **name)
void lto_codegen_debug_options (lto_code_gen_t cg, const char *)
void lto_initialize_disassembler (void)

Define Documentation

#define LTO_API_VERSION   11

Definition at line 43 of file lto.h.


Typedef Documentation

typedef struct LLVMOpaqueLTOCodeGenerator* lto_code_gen_t

opaque reference to a code generator

Definition at line 90 of file lto.h.

typedef void(* lto_diagnostic_handler_t)(lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt)

Diagnostic handler type. severity defines the severity. diag is the actual diagnostic. The diagnostic is not prefixed by any of severity keyword, e.g., 'error: '. ctxt is used to pass the context set with the diagnostic handler.

Since:
LTO_API_VERSION=7

Definition at line 338 of file lto.h.

typedef struct LLVMOpaqueLTOModule* lto_module_t

opaque reference to a loaded object module

Definition at line 87 of file lto.h.


Enumeration Type Documentation

Diagnostic severity.

Since:
LTO_API_VERSION=7
Enumerator:
LTO_DS_ERROR 
LTO_DS_WARNING 
LTO_DS_REMARK 
LTO_DS_NOTE 

Definition at line 322 of file lto.h.

Since:
prior to LTO_API_VERSION=3
Enumerator:
LTO_CODEGEN_PIC_MODEL_STATIC 
LTO_CODEGEN_PIC_MODEL_DYNAMIC 
LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC 
LTO_CODEGEN_PIC_MODEL_DEFAULT 

Definition at line 79 of file lto.h.

Since:
prior to LTO_API_VERSION=3
Enumerator:
LTO_DEBUG_MODEL_NONE 
LTO_DEBUG_MODEL_DWARF 

Definition at line 71 of file lto.h.

Since:
prior to LTO_API_VERSION=3
Enumerator:
LTO_SYMBOL_ALIGNMENT_MASK 
LTO_SYMBOL_PERMISSIONS_MASK 
LTO_SYMBOL_PERMISSIONS_CODE 
LTO_SYMBOL_PERMISSIONS_DATA 
LTO_SYMBOL_PERMISSIONS_RODATA 
LTO_SYMBOL_DEFINITION_MASK 
LTO_SYMBOL_DEFINITION_REGULAR 
LTO_SYMBOL_DEFINITION_TENTATIVE 
LTO_SYMBOL_DEFINITION_WEAK 
LTO_SYMBOL_DEFINITION_UNDEFINED 
LTO_SYMBOL_DEFINITION_WEAKUNDEF 
LTO_SYMBOL_SCOPE_MASK 
LTO_SYMBOL_SCOPE_INTERNAL 
LTO_SYMBOL_SCOPE_HIDDEN 
LTO_SYMBOL_SCOPE_PROTECTED 
LTO_SYMBOL_SCOPE_DEFAULT 
LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN 

Definition at line 48 of file lto.h.


Function Documentation

Add an object module to the set of modules for which code will be generated. Returns true on error (check lto_get_error_message() for details).

cg and mod must both be in the same context. See lto_codegen_create_in_local_context() and lto_module_create_in_codegen_context().

Since:
prior to LTO_API_VERSION=3
void lto_codegen_add_must_preserve_symbol ( lto_code_gen_t  cg,
const char *  symbol 
)

Adds to a list of all global symbols that must exist in the final generated code. If a function is not listed there, it might be inlined into every usage and optimized away.

Since:
prior to LTO_API_VERSION=3
const void* lto_codegen_compile ( lto_code_gen_t  cg,
size_t *  length 
)

Generates code for all added modules into one native object file. On success returns a pointer to a generated mach-o/ELF buffer and length set to the buffer size. The buffer is owned by the lto_code_gen_t and will be freed when lto_codegen_dispose() is called, or lto_codegen_compile() is called again. On failure, returns NULL (check lto_get_error_message() for details).

Since:
prior to LTO_API_VERSION=3

Generates code for all added modules into one native object file. The name of the file is written to name. Returns true on error.

Since:
LTO_API_VERSION=5

Instantiates a code generator. Returns NULL on error (check lto_get_error_message() for details).

All modules added using lto_codegen_add_module() must have been created in the same context as the codegen.

Since:
prior to LTO_API_VERSION=3

Instantiate a code generator in its own context.

Instantiates a code generator in its own context. Modules added via lto_codegen_add_module() must have all been created in the same context, using lto_module_create_in_codegen_context().

Since:
LTO_API_VERSION=11
void lto_codegen_debug_options ( lto_code_gen_t  cg,
const char *   
)

Sets options to help debug codegen bugs.

Since:
prior to LTO_API_VERSION=3

Frees all code generator and all memory it internally allocated. Upon return the lto_code_gen_t is no longer valid.

Since:
prior to LTO_API_VERSION=3
void lto_codegen_set_assembler_args ( lto_code_gen_t  cg,
const char **  args,
int  nargs 
)

Sets extra arguments that libLTO should pass to the assembler.

Since:
LTO_API_VERSION=4
void lto_codegen_set_assembler_path ( lto_code_gen_t  cg,
const char *  path 
)

Sets the location of the assembler tool to run. If not set, libLTO will use gcc to invoke the assembler.

Since:
LTO_API_VERSION=3
void lto_codegen_set_cpu ( lto_code_gen_t  cg,
const char *  cpu 
)

Sets the cpu to generate code for.

Since:
LTO_API_VERSION=4

Sets if debug info should be generated. Returns true on error (check lto_get_error_message() for details).

Since:
prior to LTO_API_VERSION=3

Set a diagnostic handler and the related context (void *). This is more general than lto_get_error_message, as the diagnostic handler can be called at anytime within lto.

Since:
LTO_API_VERSION=7

Sets which PIC code model to generated. Returns true on error (check lto_get_error_message() for details).

Since:
prior to LTO_API_VERSION=3

Writes a new object file at the specified path that contains the merged contents of all modules added so far. Returns true on error (check lto_get_error_message() for details).

Since:
LTO_API_VERSION=5
const char* lto_get_error_message ( void  )

Returns the last error string or NULL if last operation was successful.

Since:
prior to LTO_API_VERSION=3
const char* lto_get_version ( void  )

Returns a printable string.

Since:
prior to LTO_API_VERSION=3
void lto_initialize_disassembler ( void  )

Initializes LLVM disassemblers. FIXME: This doesn't really belong here.

Since:
LTO_API_VERSION=5

Loads an object file from disk. Returns NULL on error (check lto_get_error_message() for details).

Since:
prior to LTO_API_VERSION=3
lto_module_t lto_module_create_from_fd ( int  fd,
const char *  path,
size_t  file_size 
)

Loads an object file from disk. The seek point of fd is not preserved. Returns NULL on error (check lto_get_error_message() for details).

Since:
LTO_API_VERSION=5
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 
)

Loads an object file from disk. The seek point of fd is not preserved. Returns NULL on error (check lto_get_error_message() for details).

Since:
LTO_API_VERSION=5
lto_module_t lto_module_create_from_memory ( const void *  mem,
size_t  length 
)

Loads an object file from memory. Returns NULL on error (check lto_get_error_message() for details).

Since:
prior to LTO_API_VERSION=3
lto_module_t lto_module_create_from_memory_with_path ( const void *  mem,
size_t  length,
const char *  path 
)

Loads an object file from memory with an extra path argument. Returns NULL on error (check lto_get_error_message() for details).

Since:
prior to LTO_API_VERSION=9
lto_module_t lto_module_create_in_codegen_context ( const void *  mem,
size_t  length,
const char *  path,
lto_code_gen_t  cg 
)

Loads an object file in the codegen context.

Loads an object file into the same context as cg. The module is safe to add using lto_codegen_add_module().

Returns NULL on error (check lto_get_error_message() for details).

Since:
LTO_API_VERSION=11
lto_module_t lto_module_create_in_local_context ( const void *  mem,
size_t  length,
const char *  path 
)

Loads an object file in its own context.

Loads an object file in its own LLVMContext. This function call is thread-safe. However, modules created this way should not be merged into an lto_code_gen_t using lto_codegen_add_module().

Returns NULL on error (check lto_get_error_message() for details).

Since:
LTO_API_VERSION=11

Frees all memory internally allocated by the module. Upon return the lto_module_t is no longer valid.

Since:
prior to LTO_API_VERSION=3
const char* lto_module_get_deplib ( lto_module_t  mod,
unsigned int  index 
)

Returns the ith dependent library in the module.

Since:
LTO_API_VERSION=8

Returns the ith linker option in the module.

Since:
LTO_API_VERSION=8

Returns the number of dependent libraries in the object module.

Since:
LTO_API_VERSION=8

Returns the number of linker options in the object module.

Since:
LTO_API_VERSION=8

Returns the number of symbols in the object module.

Since:
prior to LTO_API_VERSION=3

Returns the attributes of the ith symbol in the object module.

Since:
prior to LTO_API_VERSION=3

Returns the name of the ith symbol in the object module.

Since:
prior to LTO_API_VERSION=3

Returns triple string which the object module was compiled under.

Since:
prior to LTO_API_VERSION=3

Checks if a file is a loadable object file.

Since:
prior to LTO_API_VERSION=3
lto_bool_t lto_module_is_object_file_for_target ( const char *  path,
const char *  target_triple_prefix 
)

Checks if a file is a loadable object compiled for requested target.

Since:
prior to LTO_API_VERSION=3
lto_bool_t lto_module_is_object_file_in_memory ( const void *  mem,
size_t  length 
)

Checks if a buffer is a loadable object file.

Since:
prior to LTO_API_VERSION=3
lto_bool_t lto_module_is_object_file_in_memory_for_target ( const void *  mem,
size_t  length,
const char *  target_triple_prefix 
)

Checks if a buffer is a loadable object compiled for requested target.

Since:
prior to LTO_API_VERSION=3
void lto_module_set_target_triple ( lto_module_t  mod,
const char *  triple 
)

Sets triple string with which the object will be codegened.

Since:
LTO_API_VERSION=4