llvm_sys/
disassembler.rs

1//! A disassembler library.
2
3#![allow(non_upper_case_globals, non_snake_case)]
4
5#[derive(Debug)]
6pub enum LLVMOpaqueDisasmContext {}
7
8pub type LLVMDisasmContextRef = *mut LLVMOpaqueDisasmContext;
9
10pub type LLVMOpInfoCallback = Option<
11    extern "C" fn(
12        DisInfo: *mut ::libc::c_void,
13        PC: u64,
14        Offset: u64,
15        OpSize: u64,
16        InstSize: u64,
17        TagType: ::libc::c_int,
18        TagBuf: *mut ::libc::c_void,
19    ) -> ::libc::c_int,
20>;
21
22#[repr(C)]
23#[derive(Debug)]
24pub struct LLVMOpInfoSymbol1 {
25    /// 1 if this symbol is present.
26    pub Present: u64,
27    /// Symbol name if not NULL.
28    pub Name: *const ::libc::c_char,
29    /// Symbol value if name is NULL.
30    pub Value: u64,
31}
32
33#[repr(C)]
34#[derive(Debug)]
35pub struct Struct_LLVMOpInfo1 {
36    pub AddSymbol: LLVMOpInfoSymbol1,
37    pub SubtractSymbol: LLVMOpInfoSymbol1,
38    pub Value: u64,
39    pub VariantKind: u64,
40}
41
42pub const LLVMDisassembler_VariantKind_None: u64 = 0;
43pub const LLVMDisassembler_VariantKind_ARM_HI16: u64 = 1;
44pub const LLVMDisassembler_VariantKind_ARM_LO16: u64 = 2;
45pub const LLVMDisassembler_VariantKind_ARM64_PAGE: u64 = 1;
46pub const LLVMDisassembler_VariantKind_ARM64_PAGEOFF: u64 = 2;
47pub const LLVMDisassembler_VariantKind_ARM64_GOTPAGE: u64 = 3;
48pub const LLVMDisassembler_VariantKind_ARM64_GOTPAGEOFF: u64 = 4;
49pub const LLVMDisassembler_VariantKind_ARM64_TLVP: u64 = 5;
50pub const LLVMDisassembler_VariantKind_ARM64_TLVOFF: u64 = 6;
51
52/// No input reference type or no output reference type.
53pub const LLVMDisassembler_ReferenceType_InOut_None: u64 = 0;
54
55/// The input reference is from a branch instruction.
56pub const LLVMDisassembler_ReferenceType_In_Branch: u64 = 1;
57/// The input reference is from a PC relative load instruction.
58pub const LLVMDisassembler_ReferenceType_In_PCrel_Load: u64 = 2;
59
60/// The input reference is from an ARM64::ADRP instruction.
61pub const LLVMDisassembler_ReferenceType_In_ARM64_ADRP: u64 = 0x100000001;
62/// The input reference is from an ARM64::ADDXri instruction.
63pub const LLVMDisassembler_ReferenceType_In_ARM64_ADDXri: u64 = 0x100000002;
64/// The input reference is from an ARM64::LDRXui instruction.
65pub const LLVMDisassembler_ReferenceType_In_ARM64_LDRXui: u64 = 0x100000003;
66/// The input reference is from an ARM64::LDRXl instruction.
67pub const LLVMDisassembler_ReferenceType_In_ARM64_LDRXl: u64 = 0x100000004;
68/// The input reference is from an ARM64::ADR instruction.
69pub const LLVMDisassembler_ReferenceType_In_ARM64_ADR: u64 = 0x100000005;
70
71/// The output reference is to as symbol stub.
72pub const LLVMDisassembler_ReferenceType_Out_SymbolStub: u64 = 1;
73/// The output reference is to a symbol address in a literal pool.
74pub const LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr: u64 = 2;
75/// The output reference is to a cstring address in a literal pool.
76pub const LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr: u64 = 3;
77
78/// The output reference is to a Objective-C CoreFoundation string.
79pub const LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref: u64 = 4;
80/// The output reference is to a Objective-C message.
81pub const LLVMDisassembler_ReferenceType_Out_Objc_Message: u64 = 5;
82/// The output reference is to a Objective-C message ref.
83pub const LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref: u64 = 6;
84/// The output reference is to a Objective-C selector ref.
85pub const LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref: u64 = 7;
86/// The output reference is to a Objective-C class ref.
87pub const LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref: u64 = 8;
88/// The output reference is to a C++ symbol name.
89pub const LLVMDisassembler_ReferenceType_DeMangled_Name: u64 = 9;
90
91/// The option to produce marked up assembly.
92pub const LLVMDisassembler_Option_UseMarkup: u64 = 1;
93/// The option to print immediates as hex.
94pub const LLVMDisassembler_Option_PrintImmHex: u64 = 2;
95/// The option use the other assembler printer variant
96pub const LLVMDisassembler_Option_AsmPrinterVariant: u64 = 4;
97/// The option to set comment on instructions
98pub const LLVMDisassembler_Option_SetInstrComments: u64 = 8;
99/// The option to print latency information alongside instructions
100pub const LLVMDisassembler_Option_PrintLatency: u64 = 16;
101/// The option to print in color
102pub const LLVMDisassembler_Option_Color: u64 = 32;
103
104pub type LLVMSymbolLookupCallback = Option<
105    extern "C" fn(
106        DisInfo: *mut ::libc::c_void,
107        ReferenceValue: u64,
108        ReferenceType: *mut u64,
109        ReferencePC: u64,
110        ReferenceName: *mut *const ::libc::c_char,
111    ) -> *const ::libc::c_char,
112>;
113
114extern "C" {
115    pub fn LLVMCreateDisasm(
116        TripleName: *const ::libc::c_char,
117        DisInfo: *mut ::libc::c_void,
118        TagType: ::libc::c_int,
119        GetOpInfo: LLVMOpInfoCallback,
120        SymbolLookUp: LLVMSymbolLookupCallback,
121    ) -> LLVMDisasmContextRef;
122    pub fn LLVMCreateDisasmCPU(
123        Triple: *const ::libc::c_char,
124        CPU: *const ::libc::c_char,
125        DisInfo: *mut ::libc::c_void,
126        TagType: ::libc::c_int,
127        GetOpInfo: LLVMOpInfoCallback,
128        SymbolLookUp: LLVMSymbolLookupCallback,
129    ) -> LLVMDisasmContextRef;
130    pub fn LLVMCreateDisasmCPUFeatures(
131        Triple: *const ::libc::c_char,
132        CPU: *const ::libc::c_char,
133        Features: *const ::libc::c_char,
134        DisInfo: *mut ::libc::c_void,
135        TagType: ::libc::c_int,
136        GetOpInfo: LLVMOpInfoCallback,
137        SymbolLookUp: LLVMSymbolLookupCallback,
138    ) -> LLVMDisasmContextRef;
139    pub fn LLVMSetDisasmOptions(DC: LLVMDisasmContextRef, Options: u64) -> ::libc::c_int;
140    pub fn LLVMDisasmDispose(DC: LLVMDisasmContextRef);
141    pub fn LLVMDisasmInstruction(
142        DC: LLVMDisasmContextRef,
143        Bytes: *mut u8,
144        BytesSize: u64,
145        PC: u64,
146        OutString: *mut ::libc::c_char,
147        OutStringSize: ::libc::size_t,
148    ) -> ::libc::size_t;
149}