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