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