Skip to main content

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    /// DirectX Binary Container
61    LLVMBinaryTypeDXcontainer,
62}
63
64#[deprecated(since = "90.0.0")]
65pub enum LLVMOpaqueObjectFile {}
66
67#[allow(deprecated)]
68#[deprecated(since = "90.0.0")]
69pub type LLVMObjectFileRef = *mut LLVMOpaqueObjectFile;
70
71extern "C" {
72    /// Create a binary file from the given memory buffer.
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    pub fn LLVMDisposeBinary(BR: LLVMBinaryRef);
80
81    pub fn LLVMBinaryCopyMemoryBuffer(BR: LLVMBinaryRef) -> LLVMMemoryBufferRef;
82    pub fn LLVMBinaryGetType(BR: LLVMBinaryRef) -> LLVMBinaryType;
83    pub fn LLVMMachOUniversalBinaryCopyObjectForArch(
84        BR: LLVMBinaryRef,
85        Arch: *const ::libc::c_char,
86        ArchLen: ::libc::size_t,
87        ErrorMessage: *mut *mut ::libc::c_char,
88    ) -> LLVMBinaryRef;
89
90    pub fn LLVMObjectFileCopySectionIterator(BR: LLVMBinaryRef) -> LLVMSectionIteratorRef;
91    pub fn LLVMObjectFileIsSectionIteratorAtEnd(
92        BR: LLVMBinaryRef,
93        SI: LLVMSectionIteratorRef,
94    ) -> LLVMBool;
95    pub fn LLVMObjectFileCopySymbolIterator(BR: LLVMBinaryRef) -> LLVMSymbolIteratorRef;
96    pub fn LLVMObjectFileIsSymbolIteratorAtEnd(
97        BR: LLVMBinaryRef,
98        SI: LLVMSymbolIteratorRef,
99    ) -> LLVMBool;
100    pub fn LLVMDisposeSectionIterator(SI: LLVMSectionIteratorRef);
101
102    pub fn LLVMMoveToNextSection(SI: LLVMSectionIteratorRef);
103    pub fn LLVMMoveToContainingSection(Sect: LLVMSectionIteratorRef, Sym: LLVMSymbolIteratorRef);
104    pub fn LLVMDisposeSymbolIterator(SI: LLVMSymbolIteratorRef);
105    pub fn LLVMMoveToNextSymbol(SI: LLVMSymbolIteratorRef);
106    pub fn LLVMGetSectionName(SI: LLVMSectionIteratorRef) -> *const ::libc::c_char;
107    pub fn LLVMGetSectionSize(SI: LLVMSectionIteratorRef) -> u64;
108    pub fn LLVMGetSectionContents(SI: LLVMSectionIteratorRef) -> *const ::libc::c_char;
109    pub fn LLVMGetSectionAddress(SI: LLVMSectionIteratorRef) -> u64;
110    pub fn LLVMGetSectionContainsSymbol(
111        SI: LLVMSectionIteratorRef,
112        Sym: LLVMSymbolIteratorRef,
113    ) -> LLVMBool;
114    pub fn LLVMGetRelocations(Section: LLVMSectionIteratorRef) -> LLVMRelocationIteratorRef;
115    pub fn LLVMDisposeRelocationIterator(RI: LLVMRelocationIteratorRef);
116    pub fn LLVMIsRelocationIteratorAtEnd(
117        Section: LLVMSectionIteratorRef,
118        RI: LLVMRelocationIteratorRef,
119    ) -> LLVMBool;
120    pub fn LLVMMoveToNextRelocation(RI: LLVMRelocationIteratorRef);
121    pub fn LLVMGetSymbolName(SI: LLVMSymbolIteratorRef) -> *const ::libc::c_char;
122    pub fn LLVMGetSymbolAddress(SI: LLVMSymbolIteratorRef) -> u64;
123    pub fn LLVMGetSymbolSize(SI: LLVMSymbolIteratorRef) -> u64;
124    pub fn LLVMGetRelocationOffset(RI: LLVMRelocationIteratorRef) -> u64;
125    pub fn LLVMGetRelocationSymbol(RI: LLVMRelocationIteratorRef) -> LLVMSymbolIteratorRef;
126    pub fn LLVMGetRelocationType(RI: LLVMRelocationIteratorRef) -> u64;
127    pub fn LLVMGetRelocationTypeName(RI: LLVMRelocationIteratorRef) -> *const ::libc::c_char;
128    pub fn LLVMGetRelocationValueString(RI: LLVMRelocationIteratorRef) -> *const ::libc::c_char;
129
130    #[allow(deprecated)]
131    #[deprecated(since = "90.0.0", note = "Use LLVMCreateBinary instead")]
132    pub fn LLVMCreateObjectFile(MemBuf: LLVMMemoryBufferRef) -> LLVMObjectFileRef;
133    #[allow(deprecated)]
134    #[deprecated(since = "90.0.0", note = "Use LLVMDisposeBinary instead")]
135    pub fn LLVMDisposeObjectFile(ObjectFile: LLVMObjectFileRef);
136    #[allow(deprecated)]
137    #[deprecated(
138        since = "90.0.0",
139        note = "Use LLVMObjectFileCopySectionIterator instead"
140    )]
141    pub fn LLVMGetSections(ObjectFile: LLVMObjectFileRef) -> LLVMSectionIteratorRef;
142    #[allow(deprecated)]
143    #[deprecated(
144        since = "90.0.0",
145        note = "Use LLVMObjectFileIsSectionIteratorAtEnd instead"
146    )]
147    pub fn LLVMIsSectionIteratorAtEnd(
148        ObjectFile: LLVMObjectFileRef,
149        SI: LLVMSectionIteratorRef,
150    ) -> LLVMBool;
151    #[allow(deprecated)]
152    #[deprecated(
153        since = "90.0.0",
154        note = "Use LLVMObjectFileCopySymbolIterator instead"
155    )]
156    pub fn LLVMGetSymbols(ObjectFile: LLVMObjectFileRef) -> LLVMSymbolIteratorRef;
157    #[allow(deprecated)]
158    #[deprecated(
159        since = "90.0.0",
160        note = "Use LLVMObjectFileIsSymbolIteratorAtEnd instead"
161    )]
162    pub fn LLVMIsSymbolIteratorAtEnd(
163        ObjectFile: LLVMObjectFileRef,
164        SI: LLVMSymbolIteratorRef,
165    ) -> LLVMBool;
166}