LLVM 20.0.0git
|
Macros | |
#define | LTO_API_VERSION 29 |
Typedefs | |
typedef struct LLVMOpaqueLTOModule * | lto_module_t |
opaque reference to a loaded object module | |
typedef struct LLVMOpaqueLTOCodeGenerator * | lto_code_gen_t |
opaque reference to a code generator | |
typedef struct LLVMOpaqueThinLTOCodeGenerator * | thinlto_code_gen_t |
opaque reference to a thin code generator | |
typedef void(* | lto_diagnostic_handler_t) (lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt) |
Diagnostic handler type. | |
typedef struct LLVMOpaqueLTOInput * | lto_input_t |
Opaque reference to an LTO input file. | |
Functions | |
LLVM_C_EXTERN_C_BEGIN const char * | lto_get_version (void) |
Returns a printable string. | |
const char * | lto_get_error_message (void) |
Returns the last error string or NULL if last operation was successful. | |
lto_bool_t | lto_module_is_object_file (const char *path) |
Checks if a file is a loadable object file. | |
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. | |
lto_bool_t | lto_module_has_objc_category (const void *mem, size_t length) |
Return true if Buffer contains a bitcode file with ObjC code (category or class) in it. | |
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. | |
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. | |
lto_module_t | lto_module_create (const char *path) |
Loads an object file from disk. | |
lto_module_t | lto_module_create_from_memory (const void *mem, size_t length) |
Loads an object file from memory. | |
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. | |
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) |
Loads an object file from disk. | |
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. | |
void | lto_module_dispose (lto_module_t mod) |
Frees all memory internally allocated by the module. | |
const char * | lto_module_get_target_triple (lto_module_t mod) |
Returns triple string which the object module was compiled under. | |
void | lto_module_set_target_triple (lto_module_t mod, const char *triple) |
Sets triple string with which the object will be codegened. | |
unsigned int | lto_module_get_num_symbols (lto_module_t mod) |
Returns the number of symbols in the object module. | |
const char * | lto_module_get_symbol_name (lto_module_t mod, unsigned int index) |
Returns the name of the ith symbol in the object module. | |
lto_symbol_attributes | lto_module_get_symbol_attribute (lto_module_t mod, unsigned int index) |
Returns the attributes of the ith symbol in the object module. | |
const char * | lto_module_get_linkeropts (lto_module_t mod) |
Returns the module's linker options. | |
lto_bool_t | lto_module_get_macho_cputype (lto_module_t mod, unsigned int *out_cputype, unsigned int *out_cpusubtype) |
If targeting mach-o on darwin, this function gets the CPU type and subtype that will end up being encoded in the mach-o header. | |
lto_bool_t | lto_module_has_ctor_dtor (lto_module_t mod) |
This function can be used by the linker to check if a given module has any constructor or destructor functions. | |
void | lto_codegen_set_diagnostic_handler (lto_code_gen_t, lto_diagnostic_handler_t, void *) |
Set a diagnostic handler and the related context (void *). | |
lto_code_gen_t | lto_codegen_create (void) |
Instantiates a code generator. | |
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) |
Frees all code generator and all memory it internally allocated. | |
lto_bool_t | lto_codegen_add_module (lto_code_gen_t cg, lto_module_t mod) |
Add an object module to the set of modules for which code will be generated. | |
void | lto_codegen_set_module (lto_code_gen_t cg, lto_module_t mod) |
Sets the object module for code generation. | |
lto_bool_t | lto_codegen_set_debug_model (lto_code_gen_t cg, lto_debug_model) |
Sets if debug info should be generated. | |
lto_bool_t | lto_codegen_set_pic_model (lto_code_gen_t cg, lto_codegen_model) |
Sets which PIC code model to generated. | |
void | lto_codegen_set_cpu (lto_code_gen_t cg, const char *cpu) |
Sets the cpu to generate code for. | |
void | lto_codegen_set_assembler_path (lto_code_gen_t cg, const char *path) |
Sets the location of the assembler tool to run. | |
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. | |
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. | |
lto_bool_t | lto_codegen_write_merged_modules (lto_code_gen_t cg, const char *path) |
Writes a new object file at the specified path that contains the merged contents of all modules added so far. | |
const void * | lto_codegen_compile (lto_code_gen_t cg, size_t *length) |
Generates code for all added modules into one native object file. | |
lto_bool_t | lto_codegen_compile_to_file (lto_code_gen_t cg, const char **name) |
Generates code for all added modules into one native object file. | |
lto_bool_t | lto_codegen_optimize (lto_code_gen_t cg) |
Runs optimization for the merged module. | |
const void * | lto_codegen_compile_optimized (lto_code_gen_t cg, size_t *length) |
Generates code for the optimized merged module into one native object file. | |
unsigned int | lto_api_version (void) |
Returns the runtime API version. | |
void | lto_set_debug_options (const char *const *options, int number) |
Parses options immediately, making them available as early as possible. | |
void | lto_codegen_debug_options (lto_code_gen_t cg, const char *) |
Sets options to help debug codegen bugs. | |
void | lto_codegen_debug_options_array (lto_code_gen_t cg, const char *const *, int number) |
Same as the previous function, but takes every option separately through an array. | |
void | lto_initialize_disassembler (void) |
Initializes LLVM disassemblers. | |
void | lto_codegen_set_should_internalize (lto_code_gen_t cg, lto_bool_t ShouldInternalize) |
Sets if we should run internalize pass during optimization and code generation. | |
void | lto_codegen_set_should_embed_uselists (lto_code_gen_t cg, lto_bool_t ShouldEmbedUselists) |
Set whether to embed uselists in bitcode. | |
lto_input_t | lto_input_create (const void *buffer, size_t buffer_size, const char *path) |
Creates an LTO input file from a buffer. | |
void | lto_input_dispose (lto_input_t input) |
Frees all memory internally allocated by the LTO input file. | |
unsigned | lto_input_get_num_dependent_libraries (lto_input_t input) |
Returns the number of dependent library specifiers for the given LTO input file. | |
const char * | lto_input_get_dependent_library (lto_input_t input, size_t index, size_t *size) |
Returns the ith dependent library specifier for the given LTO input file. | |
const char *const * | lto_runtime_lib_symbols_list (size_t *size) |
Returns the list of libcall symbols that can be generated by LTO that might not be visible from the symbol table of bitcode files. | |
typedef struct LLVMOpaqueLTOCodeGenerator* lto_code_gen_t |
typedef void(* lto_diagnostic_handler_t) (lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt) |
typedef struct LLVMOpaqueLTOInput* lto_input_t |
typedef struct LLVMOpaqueLTOModule* lto_module_t |
typedef struct LLVMOpaqueThinLTOCodeGenerator* thinlto_code_gen_t |
enum lto_codegen_model |
enum lto_debug_model |
unsigned int lto_api_version | ( | void | ) |
Returns the runtime API version.
lto_bool_t lto_codegen_add_module | ( | lto_code_gen_t | cg, |
lto_module_t | mod | ||
) |
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().
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.
const void * lto_codegen_compile | ( | lto_code_gen_t | cg, |
size_t * | length | ||
) |
Generates code for all added modules into one native object file.
This calls lto_codegen_optimize then lto_codegen_compile_optimized.
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).
const void * lto_codegen_compile_optimized | ( | lto_code_gen_t | cg, |
size_t * | length | ||
) |
Generates code for the optimized merged module into one native object file.
It will not run any IR optimizations on the merged module.
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_optimized() is called again. On failure, returns NULL (check lto_get_error_message() for details).
lto_bool_t lto_codegen_compile_to_file | ( | lto_code_gen_t | cg, |
const char ** | name | ||
) |
Generates code for all added modules into one native object file.
This calls lto_codegen_optimize then lto_codegen_compile_optimized (instead of returning a generated mach-o/ELF buffer, it writes to a file).
The name of the file is written to name. Returns true on error.
lto_code_gen_t lto_codegen_create | ( | void | ) |
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.
lto_code_gen_t lto_codegen_create_in_local_context | ( | void | ) |
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().
void lto_codegen_debug_options | ( | lto_code_gen_t | cg, |
const char * | |||
) |
Sets options to help debug codegen bugs.
Since parsing shud only happen once, only one of lto_codegen_debug_options or lto_set_debug_options should be called.
This function takes one or more options separated by spaces. Warning: passing file paths through this function may confuse the argument parser if the paths contain spaces.
void lto_codegen_debug_options_array | ( | lto_code_gen_t | cg, |
const char *const * | , | ||
int | number | ||
) |
Same as the previous function, but takes every option separately through an array.
void lto_codegen_dispose | ( | lto_code_gen_t | ) |
Frees all code generator and all memory it internally allocated.
Upon return the lto_code_gen_t is no longer valid.
lto_bool_t lto_codegen_optimize | ( | lto_code_gen_t | cg | ) |
Runs optimization for the merged module.
Returns true on error.
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.
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.
void lto_codegen_set_cpu | ( | lto_code_gen_t | cg, |
const char * | cpu | ||
) |
Sets the cpu to generate code for.
lto_bool_t lto_codegen_set_debug_model | ( | lto_code_gen_t | cg, |
lto_debug_model | |||
) |
Sets if debug info should be generated.
Returns true on error (check lto_get_error_message() for details).
void lto_codegen_set_diagnostic_handler | ( | lto_code_gen_t | , |
lto_diagnostic_handler_t | , | ||
void * | |||
) |
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.
void lto_codegen_set_module | ( | lto_code_gen_t | cg, |
lto_module_t | mod | ||
) |
Sets the object module for code generation.
This will transfer the ownership of the module to the code generator.
cg
and mod
must both be in the same context.
lto_bool_t lto_codegen_set_pic_model | ( | lto_code_gen_t | cg, |
lto_codegen_model | |||
) |
Sets which PIC code model to generated.
Returns true on error (check lto_get_error_message() for details).
void lto_codegen_set_should_embed_uselists | ( | lto_code_gen_t | cg, |
lto_bool_t | ShouldEmbedUselists | ||
) |
Set whether to embed uselists in bitcode.
Sets whether lto_codegen_write_merged_modules() should embed uselists in output bitcode. This should be turned on for all -save-temps output.
void lto_codegen_set_should_internalize | ( | lto_code_gen_t | cg, |
lto_bool_t | ShouldInternalize | ||
) |
Sets if we should run internalize pass during optimization and code generation.
lto_bool_t lto_codegen_write_merged_modules | ( | lto_code_gen_t | cg, |
const char * | path | ||
) |
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).
Returns the last error string or NULL if last operation was successful.
LLVM_C_EXTERN_C_BEGIN const char * lto_get_version | ( | void | ) |
Returns a printable string.
void lto_initialize_disassembler | ( | void | ) |
Initializes LLVM disassemblers.
FIXME: This doesn't really belong here.
lto_input_t lto_input_create | ( | const void * | buffer, |
size_t | buffer_size, | ||
const char * | path | ||
) |
Creates an LTO input file from a buffer.
The path argument is used for diagnotics as this function otherwise does not know which file the given buffer is associated with.
void lto_input_dispose | ( | lto_input_t | input | ) |
Frees all memory internally allocated by the LTO input file.
Upon return the lto_module_t is no longer valid.
const char * lto_input_get_dependent_library | ( | lto_input_t | input, |
size_t | index, | ||
size_t * | size | ||
) |
Returns the ith dependent library specifier for the given LTO input file.
The returned string is not null-terminated.
unsigned lto_input_get_num_dependent_libraries | ( | lto_input_t | input | ) |
Returns the number of dependent library specifiers for the given LTO input file.
lto_module_t lto_module_create | ( | const char * | path | ) |
Loads an object file from disk.
Returns NULL on error (check lto_get_error_message() for details).
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).
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).
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).
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).
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).
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).
void lto_module_dispose | ( | lto_module_t | mod | ) |
Frees all memory internally allocated by the module.
Upon return the lto_module_t is no longer valid.
const char * lto_module_get_linkeropts | ( | lto_module_t | mod | ) |
Returns the module's linker options.
The linker options may consist of multiple flags. It is the linker's responsibility to split the flags using a platform-specific mechanism.
lto_bool_t lto_module_get_macho_cputype | ( | lto_module_t | mod, |
unsigned int * | out_cputype, | ||
unsigned int * | out_cpusubtype | ||
) |
If targeting mach-o on darwin, this function gets the CPU type and subtype that will end up being encoded in the mach-o header.
These are the values that can be found in mach/machine.h.
out_cputype
and out_cpusubtype
must be non-NULL.
Returns true on error (check lto_get_error_message() for details).
unsigned int lto_module_get_num_symbols | ( | lto_module_t | mod | ) |
Returns the number of symbols in the object module.
lto_symbol_attributes lto_module_get_symbol_attribute | ( | lto_module_t | mod, |
unsigned int | index | ||
) |
Returns the attributes of the ith symbol in the object module.
const char * lto_module_get_symbol_name | ( | lto_module_t | mod, |
unsigned int | index | ||
) |
Returns the name of the ith symbol in the object module.
const char * lto_module_get_target_triple | ( | lto_module_t | mod | ) |
Returns triple string which the object module was compiled under.
lto_bool_t lto_module_has_ctor_dtor | ( | lto_module_t | mod | ) |
This function can be used by the linker to check if a given module has any constructor or destructor functions.
Returns true if the module has either the @llvm.global_ctors or the @llvm.global_dtors symbol. Otherwise returns false.
lto_bool_t lto_module_has_objc_category | ( | const void * | mem, |
size_t | length | ||
) |
Return true if Buffer
contains a bitcode file with ObjC code (category or class) in it.
lto_bool_t lto_module_is_object_file | ( | const char * | path | ) |
Checks if a file is a loadable object file.
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.
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.
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.
void lto_module_set_target_triple | ( | lto_module_t | mod, |
const char * | triple | ||
) |
Sets triple string with which the object will be codegened.
Returns the list of libcall symbols that can be generated by LTO that might not be visible from the symbol table of bitcode files.
Parses options immediately, making them available as early as possible.
For example during executing codegen::InitTargetOptionsFromCodeGenFlags. Since parsing shud only happen once, only one of lto_codegen_debug_options or lto_set_debug_options should be called.
This function takes one or more options separated by spaces. Warning: passing file paths through this function may confuse the argument parser if the paths contain spaces.