| /*===-- llvm-c/Disassembler.h - Disassembler Public C Interface ---*- C -*-===*\ |
| |* *| |
| |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |
| |* Exceptions. *| |
| |* See https://llvm.org/LICENSE.txt for license information. *| |
| |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |
| |* *| |
| |*===----------------------------------------------------------------------===*| |
| |* *| |
| |* This header provides a public interface to a disassembler library. *| |
| |* LLVM provides an implementation of this interface. *| |
| |* *| |
| \*===----------------------------------------------------------------------===*/ |
| |
| #ifndef LLVM_C_DISASSEMBLER_H |
| #define LLVM_C_DISASSEMBLER_H |
| |
| #include "llvm-c/DisassemblerTypes.h" |
| #include "llvm-c/ExternC.h" |
| |
| /** |
| * @defgroup LLVMCDisassembler Disassembler |
| * @ingroup LLVMC |
| * |
| * @{ |
| */ |
| |
| LLVM_C_EXTERN_C_BEGIN |
| |
| /** |
| * Create a disassembler for the TripleName. Symbolic disassembly is supported |
| * by passing a block of information in the DisInfo parameter and specifying the |
| * TagType and callback functions as described above. These can all be passed |
| * as NULL. If successful, this returns a disassembler context. If not, it |
| * returns NULL. This function is equivalent to calling |
| * LLVMCreateDisasmCPUFeatures() with an empty CPU name and feature set. |
| */ |
| LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo, |
| int TagType, LLVMOpInfoCallback GetOpInfo, |
| LLVMSymbolLookupCallback SymbolLookUp); |
| |
| /** |
| * Create a disassembler for the TripleName and a specific CPU. Symbolic |
| * disassembly is supported by passing a block of information in the DisInfo |
| * parameter and specifying the TagType and callback functions as described |
| * above. These can all be passed * as NULL. If successful, this returns a |
| * disassembler context. If not, it returns NULL. This function is equivalent |
| * to calling LLVMCreateDisasmCPUFeatures() with an empty feature set. |
| */ |
| LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU, |
| void *DisInfo, int TagType, |
| LLVMOpInfoCallback GetOpInfo, |
| LLVMSymbolLookupCallback SymbolLookUp); |
| |
| /** |
| * Create a disassembler for the TripleName, a specific CPU and specific feature |
| * string. Symbolic disassembly is supported by passing a block of information |
| * in the DisInfo parameter and specifying the TagType and callback functions as |
| * described above. These can all be passed * as NULL. If successful, this |
| * returns a disassembler context. If not, it returns NULL. |
| */ |
| LLVMDisasmContextRef |
| LLVMCreateDisasmCPUFeatures(const char *Triple, const char *CPU, |
| const char *Features, void *DisInfo, int TagType, |
| LLVMOpInfoCallback GetOpInfo, |
| LLVMSymbolLookupCallback SymbolLookUp); |
| |
| /** |
| * Set the disassembler's options. Returns 1 if it can set the Options and 0 |
| * otherwise. |
| */ |
| int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, uint64_t Options); |
| |
| /* The option to produce marked up assembly. */ |
| #define LLVMDisassembler_Option_UseMarkup 1 |
| /* The option to print immediates as hex. */ |
| #define LLVMDisassembler_Option_PrintImmHex 2 |
| /* The option use the other assembler printer variant */ |
| #define LLVMDisassembler_Option_AsmPrinterVariant 4 |
| /* The option to set comment on instructions */ |
| #define LLVMDisassembler_Option_SetInstrComments 8 |
| /* The option to print latency information alongside instructions */ |
| #define LLVMDisassembler_Option_PrintLatency 16 |
| |
| /** |
| * Dispose of a disassembler context. |
| */ |
| void LLVMDisasmDispose(LLVMDisasmContextRef DC); |
| |
| /** |
| * Disassemble a single instruction using the disassembler context specified in |
| * the parameter DC. The bytes of the instruction are specified in the |
| * parameter Bytes, and contains at least BytesSize number of bytes. The |
| * instruction is at the address specified by the PC parameter. If a valid |
| * instruction can be disassembled, its string is returned indirectly in |
| * OutString whose size is specified in the parameter OutStringSize. This |
| * function returns the number of bytes in the instruction or zero if there was |
| * no valid instruction. |
| */ |
| size_t LLVMDisasmInstruction(LLVMDisasmContextRef DC, uint8_t *Bytes, |
| uint64_t BytesSize, uint64_t PC, |
| char *OutString, size_t OutStringSize); |
| |
| /** |
| * @} |
| */ |
| |
| LLVM_C_EXTERN_C_END |
| |
| #endif /* LLVM_C_DISASSEMBLER_H */ |