-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathLLVM.Imports.ObjectFile.pas
187 lines (163 loc) · 8.7 KB
/
LLVM.Imports.ObjectFile.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
unit LLVM.Imports.ObjectFile;
interface
//based on Object.h
uses
LLVM.Imports,
LLVM.Imports.Types;
type
TLLVMObjectFileRef = type TLLVMRef;
TLLVMSectionIteratorRef = type TLLVMRef;
TLLVMSymbolIteratorRef = type TLLVMRef;
TLLVMRelocationIteratorRef = type TLLVMRef;
TLLVMBinaryType = (
LLVMBinaryTypeArchive, (* Archive file. *)
LLVMBinaryTypeMachOUniversalBinary, (* Mach-O Universal Binary file. *)
LLVMBinaryTypeCOFFImportFile, (* COFF Import file. *)
LLVMBinaryTypeIR, (* LLVM IR. *)
LLVMBinaryTypeWinRes, (* Windows resource (.res) file. *)
LLVMBinaryTypeCOFF, (* COFF Object file. *)
LLVMBinaryTypeELF32L, (* ELF 32-bit, little endian. *)
LLVMBinaryTypeELF32B, (* ELF 32-bit, big endian. *)
LLVMBinaryTypeELF64L, (* ELF 64-bit, little endian. *)
LLVMBinaryTypeELF64B, (* ELF 64-bit, big endian. *)
LLVMBinaryTypeMachO32L, (* MachO 32-bit, little endian. *)
LLVMBinaryTypeMachO32B, (* MachO 32-bit, big endian. *)
LLVMBinaryTypeMachO64L, (* MachO 64-bit, little endian. *)
LLVMBinaryTypeMachO64B, (* MachO 64-bit, big endian. *)
LLVMBinaryTypeWasm (* Web Assembly. *)
) ;
(*
* Create a binary file from the given memory buffer.
*
* The exact type of the binary file will be inferred automatically, and the
* appropriate implementation selected. The context may be NULL except if
* the resulting file is an LLVM IR file.
*
* The memory buffer is not consumed by this function. It is the responsibilty
* of the caller to free it with \c LLVMDisposeMemoryBuffer.
*
* If NULL is returned, the \p ErrorMessage parameter is populated with the
* error's description. It is then the caller's responsibility to free this
* message by calling \c LLVMDisposeMessage.
*
* @see llvm::object::createBinary
*)
function LLVMCreateBinary(MemBuf: TLLVMMemoryBufferRef; Context: TLLVMContextRef; ErrorMessage: PLLVMChar):TLLVMBinaryRef; cdecl; external CLLVMLibrary;
(*
* Dispose of a binary file.
*
* The binary file does not own its backing buffer. It is the responsibilty
* of the caller to free it with \c LLVMDisposeMemoryBuffer.
*)
procedure LLVMDisposeBinary(BR: TLLVMBinaryRef);cdecl; external CLLVMLibrary;
(*
* Retrieves a copy of the memory buffer associated with this object file.
*
* The returned buffer is merely a shallow copy and does not own the actual
* backing buffer of the binary. Nevertheless, it is the responsibility of the
* caller to free it with \c LLVMDisposeMemoryBuffer.
*
* @see llvm::object::getMemoryBufferRef
*)
function LLVMBinaryCopyMemoryBuffer(BR: TLLVMBinaryRef): TLLVMMemoryBufferRef;cdecl; external CLLVMLibrary;
(*
* Retrieve the specific type of a binary.
*
* @see llvm::object::Binary::getType
*)
function LLVMBinaryGetType(BR: TLLVMBinaryRef): TLLVMBinaryType; cdecl; external CLLVMLibrary;
(*
* For a Mach-O universal binary file, retrieves the object file corresponding
* to the given architecture if it is present as a slice.
*
* If NULL is returned, the \p ErrorMessage parameter is populated with the
* error's description. It is then the caller's responsibility to free this
* message by calling \c LLVMDisposeMessage.
*
* It is the responsiblity of the caller to free the returned object file by
* calling \c LLVMDisposeBinary.
*)
function LLVMMachOUniversalBinaryCopyObjectForArch(BR : TLLVMBinaryRef;
Arch : PLLVMChar;
ArchLen : TLLVMSizeT;
ErrorMessage: PLLVMChar): TLLVMBinaryRef;cdecl; external CLLVMLibrary;
(*
* Retrieve a copy of the section iterator for this object file.
*
* If there are no sections, the result is NULL.
*
* The returned iterator is merely a shallow copy. Nevertheless, it is
* the responsibility of the caller to free it with
* \c LLVMDisposeSectionIterator.
*
* @see llvm::object::sections()
*)
function LLVMObjectFileCopySectionIterator(BR: TLLVMBinaryRef): TLLVMSectionIteratorRef; cdecl; external CLLVMLibrary;
(*
* Returns whether the given section iterator is at the end.
*
* @see llvm::object::section_end
*)
function LLVMObjectFileIsSectionIteratorAtEnd(BR: TLLVMBinaryRef; SI: TLLVMSectionIteratorRef): TLLVMBool; cdecl; external CLLVMLibrary;
(*
* Retrieve a copy of the symbol iterator for this object file.
*
* If there are no symbols, the result is NULL.
*
* The returned iterator is merely a shallow copy. Nevertheless, it is
* the responsibility of the caller to free it with
* \c LLVMDisposeSymbolIterator.
*
* @see llvm::object::symbols()
*)
function LLVMObjectFileCopySymbolIterator(BR: TLLVMBinaryRef): TLLVMSymbolIteratorRef; cdecl; external CLLVMLibrary;
(*
* Returns whether the given symbol iterator is at the end.
*
* @see llvm::object::symbol_end
*)
function LLVMObjectFileIsSymbolIteratorAtEnd(BR: TLLVMBinaryRef; SI: TLLVMSymbolIteratorRef): TLLVMBool; cdecl; external CLLVMLibrary;
// ObjectFile Section iterators
procedure LLVMDisposeSectionIterator(SI: TLLVMSectionIteratorRef); cdecl; external CLLVMLibrary;
procedure LLVMMoveToNextSection(SI: TLLVMSectionIteratorRef); cdecl; external CLLVMLibrary;
procedure LLVMMoveToContainingSection(Sect: TLLVMSectionIteratorRef; Sym: TLLVMSymbolIteratorRef); cdecl; external CLLVMLibrary;
// ObjectFile Symbol iterators
procedure LLVMDisposeSymbolIterator(SI: TLLVMSymbolIteratorRef); cdecl; external CLLVMLibrary;
procedure LLVMMoveToNextSymbol(SI: TLLVMSymbolIteratorRef); cdecl; external CLLVMLibrary;
// SectionRef accessors
function LLVMGetSectionName(SI: TLLVMSectionIteratorRef): PLLVMChar; cdecl; external CLLVMLibrary;
function LLVMGetSectionSize(SI: TLLVMSectionIteratorRef): UInt64; cdecl; external CLLVMLibrary;
function LLVMGetSectionContents(SI: TLLVMSectionIteratorRef): PLLVMChar; cdecl; external CLLVMLibrary;
function LLVMGetSectionAddress(SI: TLLVMSectionIteratorRef): UInt64; cdecl; external CLLVMLibrary;
function LLVMGetSectionContainsSymbol(SI: TLLVMSectionIteratorRef; Sym: TLLVMSymbolIteratorRef): TLLVMBool; cdecl; external CLLVMLibrary;
// Section Relocation iterators
function LLVMGetRelocations(Section: TLLVMSectionIteratorRef): TLLVMRelocationIteratorRef; cdecl; external CLLVMLibrary;
procedure LLVMDisposeRelocationIterator(RI: TLLVMRelocationIteratorRef); cdecl; external CLLVMLibrary;
function LLVMIsRelocationIteratorAtEnd(Section: TLLVMSectionIteratorRef; RI: TLLVMRelocationIteratorRef): TLLVMBool; cdecl; external CLLVMLibrary;
procedure LLVMMoveToNextRelocation(RI: TLLVMRelocationIteratorRef); cdecl; external CLLVMLibrary;
// SymbolRef accessors
function LLVMGetSymbolName(SI: TLLVMSymbolIteratorRef): PLLVMChar; cdecl; external CLLVMLibrary;
function LLVMGetSymbolAddress(SI: TLLVMSymbolIteratorRef): UInt64; cdecl; external CLLVMLibrary;
function LLVMGetSymbolSize(SI: TLLVMSymbolIteratorRef): UInt64; cdecl; external CLLVMLibrary;
// RelocationRef accessors
function LLVMGetRelocationOffset(RI: TLLVMRelocationIteratorRef): UInt64; cdecl; external CLLVMLibrary;
function LLVMGetRelocationSymbol(RI: TLLVMRelocationIteratorRef): TLLVMSymbolIteratorRef; cdecl; external CLLVMLibrary;
function LLVMGetRelocationType(RI: TLLVMRelocationIteratorRef): UInt64; cdecl; external CLLVMLibrary;
// NOTE: Caller takes ownership of returned string of the two
// following functions.
function LLVMGetRelocationTypeName(RI: TLLVMRelocationIteratorRef): PLLVMChar; cdecl; external CLLVMLibrary;
function LLVMGetRelocationValueString(RI: TLLVMRelocationIteratorRef): PLLVMChar; cdecl; external CLLVMLibrary;
{/** Deprecated: Use LLVMCreateBinary instead. */}
function LLVMCreateObjectFile(MemBuf: TLLVMMemoryBufferRef): TLLVMObjectFileRef; cdecl; external CLLVMLibrary;
{/** Deprecated: Use LLVMDisposeBinary instead. */}
procedure LLVMDisposeObjectFile(ObjectFile: TLLVMObjectFileRef); cdecl; external CLLVMLibrary;
{/** Deprecated: Use LLVMObjectFileCopySectionIterator instead. */}
function LLVMGetSections(ObjectFile: TLLVMObjectFileRef): TLLVMSectionIteratorRef; cdecl; external CLLVMLibrary;
{/** Deprecated: Use LLVMObjectFileIsSectionIteratorAtEnd instead. */}
function LLVMIsSectionIteratorAtEnd(ObjectFile: TLLVMObjectFileRef; SI: TLLVMSectionIteratorRef): TLLVMBool; cdecl; external CLLVMLibrary;
{/** Deprecated: Use LLVMObjectFileCopySymbolIterator instead. */}
function LLVMGetSymbols(ObjectFile: TLLVMObjectFileRef): TLLVMSymbolIteratorRef; cdecl; external CLLVMLibrary;
{/** Deprecated: Use LLVMObjectFileIsSymbolIteratorAtEnd instead. */}
function LLVMIsSymbolIteratorAtEnd(ObjectFile: TLLVMObjectFileRef; SI: TLLVMSymbolIteratorRef): TLLVMBool; cdecl; external CLLVMLibrary;
implementation
end.