llvm_sys_featured/
object.rs

1//! Object file reading and writing
2
3use super::prelude::*;
4
5#[derive(Debug)]
6pub enum LLVMOpaqueSectionIterator {}
7
8pub type LLVMSectionIteratorRef = *mut LLVMOpaqueSectionIterator;
9
10#[derive(Debug)]
11pub enum LLVMOpaqueSymbolIterator {}
12
13pub type LLVMSymbolIteratorRef = *mut LLVMOpaqueSymbolIterator;
14
15#[derive(Debug)]
16pub enum LLVMOpaqueRelocationIterator {}
17
18pub type LLVMRelocationIteratorRef = *mut LLVMOpaqueRelocationIterator;
19
20#[cfg(LLVM_VERSION_9_OR_GREATER)]
21#[derive(Debug)]
22pub enum LLVMOpaqueBinary {}
23
24#[cfg(LLVM_VERSION_9_OR_GREATER)]
25pub type LLVMBinaryRef = *mut LLVMOpaqueBinary;
26
27#[cfg(LLVM_VERSION_9_OR_GREATER)]
28#[repr(C)]
29#[derive(Debug)]
30pub enum LLVMBinaryType {
31    /// Archive file
32    LLVMBinaryTypeArchive,
33    /// Mach-O Universal Binary file
34    LLVMBinaryTypeMachOUniversalBinary,
35    /// COFF Import file
36    LLVMBinaryTypeCOFFImportFile,
37    /// LLVM IR
38    LLVMBinaryTypeIR,
39    /// Windows resource (.res) file
40    LLVMBinaryTypeWinRes,
41    /// COFF Object file
42    LLVMBinaryTypeCOFF,
43    /// ELF 32-bit, little endian
44    LLVMBinaryTypeELF32L,
45    /// ELF 32-bit, big endian
46    LLVMBinaryTypeELF32B,
47    /// ELF 64-bit, little endian
48    LLVMBinaryTypeELF64L,
49    /// ELF 64-bit, big endian
50    LLVMBinaryTypeELF64B,
51    /// MachO 32-bit, little endian
52    LLVMBinaryTypeMachO32L,
53    /// MachO 32-bit, big endian
54    LLVMBinaryTypeMachO32B,
55    /// MachO 64-bit, little endian
56    LLVMBinaryTypeMachO64L,
57    /// MachO 64-bit, big endian
58    LLVMBinaryTypeMachO64B,
59    /// Web assembly
60    LLVMBinaryTypeWasm,
61}
62
63#[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0"))]
64pub enum LLVMOpaqueObjectFile {}
65
66#[allow(deprecated)]
67#[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0"))]
68pub type LLVMObjectFileRef = *mut LLVMOpaqueObjectFile;
69
70extern "C" {
71    /// Create a binary file from the given memory buffer.
72    #[cfg(LLVM_VERSION_9_OR_GREATER)]
73    pub fn LLVMCreateBinary(
74        MemBuf: LLVMMemoryBufferRef,
75        Context: LLVMContextRef,
76        ErrorMessage: *mut *mut ::libc::c_char,
77    ) -> LLVMBinaryRef;
78    /// Dispose of a binary file
79    #[cfg(LLVM_VERSION_9_OR_GREATER)]
80    pub fn LLVMDisposeBinary(BR: LLVMBinaryRef);
81
82    #[cfg(LLVM_VERSION_9_OR_GREATER)]
83    pub fn LLVMBinaryCopyMemoryBuffer(BR: LLVMBinaryRef) -> LLVMMemoryBufferRef;
84    #[cfg(LLVM_VERSION_9_OR_GREATER)]
85    pub fn LLVMBinaryGetType(BR: LLVMBinaryRef) -> LLVMBinaryType;
86    #[cfg(LLVM_VERSION_9_OR_GREATER)]
87    pub fn LLVMMachOUniversalBinaryCopyObjectForArch(
88        BR: LLVMBinaryRef,
89        Arch: *const ::libc::c_char,
90        ArchLen: ::libc::size_t,
91        ErrorMessage: *mut *mut ::libc::c_char,
92    ) -> LLVMBinaryRef;
93
94    #[cfg(LLVM_VERSION_9_OR_GREATER)]
95    pub fn LLVMObjectFileCopySectionIterator(BR: LLVMBinaryRef) -> LLVMSectionIteratorRef;
96    pub fn LLVMObjectFileIsSectionIteratorAtEnd(
97        #[cfg(LLVM_VERSION_8_OR_LOWER)]
98        ObjectFile: LLVMObjectFileRef,
99        #[cfg(LLVM_VERSION_9_OR_GREATER)]
100        BR: LLVMBinaryRef,
101        SI: LLVMSectionIteratorRef,
102    ) -> LLVMBool;
103    #[cfg(LLVM_VERSION_9_OR_GREATER)]
104    pub fn LLVMObjectFileCopySymbolIterator(BR: LLVMBinaryRef) -> LLVMSymbolIteratorRef;
105    pub fn LLVMObjectFileIsSymbolIteratorAtEnd(
106        #[cfg(LLVM_VERSION_8_OR_LOWER)]
107        ObjectFile: LLVMObjectFileRef,
108        #[cfg(LLVM_VERSION_9_OR_GREATER)]
109        BR: LLVMBinaryRef,
110        SI: LLVMSymbolIteratorRef,
111    ) -> LLVMBool;
112    #[cfg(LLVM_VERSION_9_OR_GREATER)]
113    pub fn LLVMDisposeSectionIterator(SI: LLVMSectionIteratorRef);
114
115    pub fn LLVMMoveToNextSection(SI: LLVMSectionIteratorRef);
116    pub fn LLVMMoveToContainingSection(Sect: LLVMSectionIteratorRef, Sym: LLVMSymbolIteratorRef);
117    pub fn LLVMDisposeSymbolIterator(SI: LLVMSymbolIteratorRef);
118    pub fn LLVMMoveToNextSymbol(SI: LLVMSymbolIteratorRef);
119    pub fn LLVMGetSectionName(SI: LLVMSectionIteratorRef) -> *const ::libc::c_char;
120    pub fn LLVMGetSectionSize(SI: LLVMSectionIteratorRef) -> u64;
121    pub fn LLVMGetSectionContents(SI: LLVMSectionIteratorRef) -> *const ::libc::c_char;
122    pub fn LLVMGetSectionAddress(SI: LLVMSectionIteratorRef) -> u64;
123    pub fn LLVMGetSectionContainsSymbol(
124        SI: LLVMSectionIteratorRef,
125        Sym: LLVMSymbolIteratorRef,
126    ) -> LLVMBool;
127    pub fn LLVMGetRelocations(Section: LLVMSectionIteratorRef) -> LLVMRelocationIteratorRef;
128    pub fn LLVMDisposeRelocationIterator(RI: LLVMRelocationIteratorRef);
129    pub fn LLVMIsRelocationIteratorAtEnd(
130        Section: LLVMSectionIteratorRef,
131        RI: LLVMRelocationIteratorRef,
132    ) -> LLVMBool;
133    pub fn LLVMMoveToNextRelocation(RI: LLVMRelocationIteratorRef);
134    pub fn LLVMGetSymbolName(SI: LLVMSymbolIteratorRef) -> *const ::libc::c_char;
135    pub fn LLVMGetSymbolAddress(SI: LLVMSymbolIteratorRef) -> u64;
136    pub fn LLVMGetSymbolSize(SI: LLVMSymbolIteratorRef) -> u64;
137    pub fn LLVMGetRelocationOffset(RI: LLVMRelocationIteratorRef) -> u64;
138    pub fn LLVMGetRelocationSymbol(RI: LLVMRelocationIteratorRef) -> LLVMSymbolIteratorRef;
139    pub fn LLVMGetRelocationType(RI: LLVMRelocationIteratorRef) -> u64;
140    pub fn LLVMGetRelocationTypeName(RI: LLVMRelocationIteratorRef) -> *const ::libc::c_char;
141    pub fn LLVMGetRelocationValueString(RI: LLVMRelocationIteratorRef) -> *const ::libc::c_char;
142
143    #[allow(deprecated)]
144    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMCreateBinary instead"))]
145    pub fn LLVMCreateObjectFile(MemBuf: LLVMMemoryBufferRef) -> LLVMObjectFileRef;
146    #[allow(deprecated)]
147    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(since = "LLVM 9.0", note = "Use LLVMDisposeBinary instead"))]
148    pub fn LLVMDisposeObjectFile(ObjectFile: LLVMObjectFileRef);
149    #[allow(deprecated)]
150    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(
151        since = "LLVM 9.0",
152        note = "Use LLVMObjectFileCopySectionIterator instead"
153    ))]
154    pub fn LLVMGetSections(ObjectFile: LLVMObjectFileRef) -> LLVMSectionIteratorRef;
155    #[allow(deprecated)]
156    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(
157        since = "LLVM 9.0",
158        note = "Use LLVMObjectFileIsSectionIteratorAtEnd instead"
159    ))]
160    pub fn LLVMIsSectionIteratorAtEnd(
161        ObjectFile: LLVMObjectFileRef,
162        SI: LLVMSectionIteratorRef,
163    ) -> LLVMBool;
164    #[allow(deprecated)]
165    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(
166        since = "LLVM 9.0",
167        note = "Use LLVMObjectFileCopySymbolIterator instead"
168    ))]
169    pub fn LLVMGetSymbols(ObjectFile: LLVMObjectFileRef) -> LLVMSymbolIteratorRef;
170    #[allow(deprecated)]
171    #[cfg_attr(LLVM_VERSION_9_OR_GREATER, deprecated(
172        since = "LLVM 9.0",
173        note = "Use LLVMObjectFileIsSymbolIteratorAtEnd instead"
174    ))]
175    pub fn LLVMIsSymbolIteratorAtEnd(
176        ObjectFile: LLVMObjectFileRef,
177        SI: LLVMSymbolIteratorRef,
178    ) -> LLVMBool;
179}