llvm_sys_featured/
debuginfo.rs

1//! Generation of DWARF debug info.
2use super::*;
3
4// Debug info flags.
5pub type LLVMDIFlags = ::libc::c_int;
6pub const LLVMDIFlagZero: LLVMDIFlags = 0;
7pub const LLVMDIFlagPrivate: LLVMDIFlags = 1;
8pub const LLVMDIFlagProtected: LLVMDIFlags = 2;
9pub const LLVMDIFlagPublic: LLVMDIFlags = 3;
10pub const LLVMDIFlagFwdDecl: LLVMDIFlags = 1 << 2;
11pub const LLVMDIFlagAppleBlock: LLVMDIFlags = 1 << 3;
12#[cfg(LLVM_VERSION_9_OR_LOWER)]
13pub const LLVMDIFlagBlockByrefStruct: LLVMDIFlags = 1 << 4;
14#[cfg(LLVM_VERSION_10_OR_GREATER)]
15pub const LLVMDIFlagReservedBit4: LLVMDIFlags = 1 << 4;
16pub const LLVMDIFlagVirtual: LLVMDIFlags = 1 << 5;
17pub const LLVMDIFlagArtificial: LLVMDIFlags = 1 << 6;
18pub const LLVMDIFlagExplicit: LLVMDIFlags = 1 << 7;
19pub const LLVMDIFlagPrototyped: LLVMDIFlags = 1 << 8;
20pub const LLVMDIFlagObjcClassComplete: LLVMDIFlags = 1 << 9;
21pub const LLVMDIFlagObjectPointer: LLVMDIFlags = 1 << 10;
22pub const LLVMDIFlagVector: LLVMDIFlags = 1 << 11;
23pub const LLVMDIFlagStaticMember: LLVMDIFlags = 1 << 12;
24pub const LLVMDIFlagLValueReference: LLVMDIFlags = 1 << 13;
25pub const LLVMDIFlagRValueReference: LLVMDIFlags = 1 << 14;
26pub const LLVMDIFlagReserved: LLVMDIFlags = 1 << 15;
27pub const LLVMDIFlagSingleInheritance: LLVMDIFlags = 1 << 16;
28pub const LLVMDIFlagMultipleInheritance: LLVMDIFlags = 2 << 16;
29pub const LLVMDIFlagVirtualInheritance: LLVMDIFlags = 3 << 16;
30pub const LLVMDIFlagIntroducedVirtual: LLVMDIFlags = 1 << 18;
31pub const LLVMDIFlagBitField: LLVMDIFlags = 1 << 19;
32pub const LLVMDIFlagNoReturn: LLVMDIFlags = 1 << 20;
33pub const LLVMDIFlagTypePassByValue: LLVMDIFlags = 1 << 22;
34pub const LLVMDIFlagTypePassByReference: LLVMDIFlags = 1 << 23;
35pub const LLVMDIFlagEnumClass: LLVMDIFlags = 1 << 24;
36pub const LLVMDIFlagThunk: LLVMDIFlags = 1 << 25;
37#[cfg(LLVM_VERSION_8_OR_LOWER)]
38pub const LLVMDIFlagTrivial: LLVMDIFlags = 1 << 26;
39#[cfg(LLVM_VERSION_9_OR_GREATER)]
40pub const LLVMDIFlagNonTrivial: LLVMDIFlags = 1 << 26;
41pub const LLVMDIFlagBigendian: LLVMDIFlags = 1 << 27;
42pub const LLVMDIFlagLittleEndian: LLVMDIFlags = 1 << 28;
43pub const LLVMDIFlagIndirectVirtualBase: LLVMDIFlags = (1 << 2) | (1 << 5);
44pub const LLVMDIFlagAccessibility: LLVMDIFlags =
45    LLVMDIFlagProtected | LLVMDIFlagPrivate | LLVMDIFlagPublic;
46pub const LLVMDIFlagPtrToMemberRep: LLVMDIFlags =
47    LLVMDIFlagSingleInheritance | LLVMDIFlagMultipleInheritance | LLVMDIFlagVirtualInheritance;
48
49/// Source languages known by DWARF.
50#[repr(C)]
51#[derive(Debug)]
52pub enum LLVMDWARFSourceLanguage {
53    LLVMDWARFSourceLanguageC89,
54    LLVMDWARFSourceLanguageC,
55    LLVMDWARFSourceLanguageAda83,
56    LLVMDWARFSourceLanguageC_plus_plus,
57    LLVMDWARFSourceLanguageCobol74,
58    LLVMDWARFSourceLanguageCobol85,
59    LLVMDWARFSourceLanguageFortran77,
60    LLVMDWARFSourceLanguageFortran90,
61    LLVMDWARFSourceLanguagePascal83,
62    LLVMDWARFSourceLanguageModula2,
63    // New in DWARF v3:
64    LLVMDWARFSourceLanguageJava,
65    LLVMDWARFSourceLanguageC99,
66    LLVMDWARFSourceLanguageAda95,
67    LLVMDWARFSourceLanguageFortran95,
68    LLVMDWARFSourceLanguagePLI,
69    LLVMDWARFSourceLanguageObjC,
70    LLVMDWARFSourceLanguageObjC_plus_plus,
71    LLVMDWARFSourceLanguageUPC,
72    LLVMDWARFSourceLanguageD,
73    // New in DWARF v4:
74    LLVMDWARFSourceLanguagePython,
75    // New in DWARF v5:
76    LLVMDWARFSourceLanguageOpenCL,
77    LLVMDWARFSourceLanguageGo,
78    LLVMDWARFSourceLanguageModula3,
79    LLVMDWARFSourceLanguageHaskell,
80    LLVMDWARFSourceLanguageC_plus_plus_03,
81    LLVMDWARFSourceLanguageC_plus_plus_11,
82    LLVMDWARFSourceLanguageOCaml,
83    LLVMDWARFSourceLanguageRust,
84    LLVMDWARFSourceLanguageC11,
85    LLVMDWARFSourceLanguageSwift,
86    LLVMDWARFSourceLanguageJulia,
87    LLVMDWARFSourceLanguageDylan,
88    LLVMDWARFSourceLanguageC_plus_plus_14,
89    LLVMDWARFSourceLanguageFortran03,
90    LLVMDWARFSourceLanguageFortran08,
91    LLVMDWARFSourceLanguageRenderScript,
92    LLVMDWARFSourceLanguageBLISS,
93    // Vendor extensions:
94    LLVMDWARFSourceLanguageMips_Assembler,
95    LLVMDWARFSourceLanguageGOOGLE_RenderScript,
96    LLVMDWARFSourceLanguageBORLAND_Delphi,
97}
98
99/// The amount of debug information to emit.
100#[repr(C)]
101#[derive(Debug)]
102pub enum LLVMDWARFEmissionKind {
103    LLVMDWARFEmissionKindNone = 0,
104    LLVMDWARFEmissionKindFull,
105    LLVMDWARFEmissionKindLineTablesOnly,
106}
107
108#[repr(C)]
109#[derive(Debug)]
110pub enum LLVMMetadataKind {
111    LLVMMDStringMetadataKind,
112    LLVMConstantAsMetadataMetadataKind,
113    LLVMLocalAsMetadataMetadataKind,
114    LLVMDistinctMDOperandPlaceholderMetadataKind,
115    LLVMMDTupleMetadataKind,
116    LLVMDILocationMetadataKind,
117    LLVMDIExpressionMetadataKind,
118    LLVMDIGlobalVariableExpressionMetadataKind,
119    LLVMGenericDINodeMetadataKind,
120    LLVMDISubrangeMetadataKind,
121    LLVMDIEnumeratorMetadataKind,
122    LLVMDIBasicTypeMetadataKind,
123    LLVMDIDerivedTypeMetadataKind,
124    LLVMDICompositeTypeMetadataKind,
125    LLVMDISubroutineTypeMetadataKind,
126    LLVMDIFileMetadataKind,
127    LLVMDICompileUnitMetadataKind,
128    LLVMDISubprogramMetadataKind,
129    LLVMDILexicalBlockMetadataKind,
130    LLVMDILexicalBlockFileMetadataKind,
131    LLVMDINamespaceMetadataKind,
132    LLVMDIModuleMetadataKind,
133    LLVMDITemplateTypeParameterMetadataKind,
134    LLVMDITemplateValueParameterMetadataKind,
135    LLVMDIGlobalVariableMetadataKind,
136    LLVMDILocalVariableMetadataKind,
137    LLVMDILabelMetadataKind,
138    LLVMDIObjCPropertyMetadataKind,
139    LLVMDIImportedEntityMetadataKind,
140    LLVMDIMacroMetadataKind,
141    LLVMDIMacroFileMetadataKind,
142    #[cfg(LLVM_VERSION_9_OR_GREATER)]
143    LLVMDICommonBlockMetadataKind,
144}
145
146pub type LLVMDWARFTypeEncoding = ::libc::c_uint;
147
148#[cfg(LLVM_VERSION_10_OR_GREATER)]
149#[repr(C)]
150#[derive(Debug)]
151pub enum LLVMDWARFMacinfoRecordType {
152    LLVMDWARFMacinfoRecordTypeDefine = 0x01,
153    LLVMDWARFMacinfoRecordTypeMacro = 0x02,
154    LLVMDWARFMacinfoRecordTypeStartFile = 0x03,
155    LLVMDWARFMacinfoRecordTypeEndFile = 0x04,
156    LLVMDWARFMacinfoRecordTypeVendorExt = 0xff,
157}
158
159extern "C" {
160    /// The current debug metadata version number.
161    pub fn LLVMDebugMetadataVersion() -> ::libc::c_uint;
162    /// The version of debug metadata that's present in the provided Module.
163    pub fn LLVMGetModuleDebugMetadataVersion(Module: LLVMModuleRef) -> ::libc::c_uint;
164    /// Strip debug info in the module if it exists.
165    pub fn LLVMStripModuleDebugInfo(Module: LLVMModuleRef) -> LLVMBool;
166    /// Construct a builder for a module, do not allow unresolved nodes.
167    pub fn LLVMCreateDIBuilderDisallowUnresolved(M: LLVMModuleRef) -> LLVMDIBuilderRef;
168    /// Construct a builder for a module and collect unresolved nodes.
169    pub fn LLVMCreateDIBuilder(M: LLVMModuleRef) -> LLVMDIBuilderRef;
170    /// Deallocate a builder and everything it owns.
171    ///
172    /// The builder must be finalized before this.
173    pub fn LLVMDisposeDIBuilder(Builder: LLVMDIBuilderRef);
174    /// Construct any deferred debug info descriptors.
175    pub fn LLVMDIBuilderFinalize(Builder: LLVMDIBuilderRef);
176    pub fn LLVMDIBuilderCreateCompileUnit(
177        Builder: LLVMDIBuilderRef,
178        Lang: LLVMDWARFSourceLanguage,
179        FileRef: LLVMMetadataRef,
180        Producer: *const ::libc::c_char,
181        ProducerLen: ::libc::size_t,
182        isOptimized: LLVMBool,
183        Flags: *const ::libc::c_char,
184        FlagsLen: ::libc::size_t,
185        RuntimeVer: ::libc::c_uint,
186        SplitName: *const ::libc::c_char,
187        SplitNameLen: ::libc::size_t,
188        Kind: LLVMDWARFEmissionKind,
189        DWOId: ::libc::c_uint,
190        SplitDebugInlining: LLVMBool,
191        DebugInfoForProfiling: LLVMBool,
192    ) -> LLVMMetadataRef;
193    /// Create a file descriptor to hold debugging information for a file.
194    pub fn LLVMDIBuilderCreateFile(
195        Builder: LLVMDIBuilderRef,
196        Filename: *const ::libc::c_char,
197        FilenameLen: ::libc::size_t,
198        Directory: *const ::libc::c_char,
199        DirectoryLen: ::libc::size_t,
200    ) -> LLVMMetadataRef;
201
202    /// Creates a new descriptor for a module with the specified parent scope.
203    pub fn LLVMDIBuilderCreateModule(
204        Builder: LLVMDIBuilderRef,
205        ParentScope: LLVMMetadataRef,
206        Name: *const ::libc::c_char,
207        NameLen: ::libc::size_t,
208        ConfigMacros: *const ::libc::c_char,
209        ConfigMacrosLen: ::libc::size_t,
210        IncludePath: *const ::libc::c_char,
211        IncludePathLen: ::libc::size_t,
212        #[cfg(LLVM_VERSION_9_OR_LOWER)]
213        ISysRoot: *const ::libc::c_char,
214        #[cfg(LLVM_VERSION_10_OR_GREATER)]
215        SysRoot: *const ::libc::c_char,
216        #[cfg(LLVM_VERSION_9_OR_LOWER)]
217        ISysRootLen: ::libc::size_t,
218        #[cfg(LLVM_VERSION_10_OR_GREATER)]
219        SysRootLen: ::libc::size_t,
220    ) -> LLVMMetadataRef;
221
222    /// Creates a new descriptor for a namespace with the specified parent scope.
223    pub fn LLVMDIBuilderCreateNameSpace(
224        Builder: LLVMDIBuilderRef,
225        ParentScope: LLVMMetadataRef,
226        Name: *const ::libc::c_char,
227        NameLen: ::libc::size_t,
228        ExportSymbols: LLVMBool,
229    ) -> LLVMMetadataRef;
230
231    /// Create a new descriptor for the specified subprogram.
232    pub fn LLVMDIBuilderCreateFunction(
233        Builder: LLVMDIBuilderRef,
234        Scope: LLVMMetadataRef,
235        Name: *const ::libc::c_char,
236        NameLen: ::libc::size_t,
237        LinkageName: *const ::libc::c_char,
238        LinkageNameLen: ::libc::size_t,
239        File: LLVMMetadataRef,
240        LineNo: ::libc::c_uint,
241        Ty: LLVMMetadataRef,
242        IsLocalToUnit: LLVMBool,
243        IsDefinition: LLVMBool,
244        ScopeLine: ::libc::c_uint,
245        Flags: LLVMDIFlags,
246        IsOptimized: LLVMBool,
247    ) -> LLVMMetadataRef;
248
249    /// Create a descriptor for a lexical block with the specified parent context.
250    pub fn LLVMDIBuilderCreateLexicalBlock(
251        Builder: LLVMDIBuilderRef,
252        Scope: LLVMMetadataRef,
253        File: LLVMMetadataRef,
254        Line: ::libc::c_uint,
255        Column: ::libc::c_uint,
256    ) -> LLVMMetadataRef;
257
258    /// Create a descriptor for a lexical block with a new file attached.
259    pub fn LLVMDIBuilderCreateLexicalBlockFile(
260        Builder: LLVMDIBuilderRef,
261        Scope: LLVMMetadataRef,
262        File: LLVMMetadataRef,
263        Discriminator: ::libc::c_uint,
264    ) -> LLVMMetadataRef;
265
266    /// Create a descriptor for an imported namespace. Suitable for e.g. C++ using declarations.
267    pub fn LLVMDIBuilderCreateImportedModuleFromNamespace(
268        Builder: LLVMDIBuilderRef,
269        Scope: LLVMMetadataRef,
270        NS: LLVMMetadataRef,
271        File: LLVMMetadataRef,
272        Line: ::libc::c_uint,
273    ) -> LLVMMetadataRef;
274
275    /// Create a descriptor for an imported module that aliases another imported entity descriptor.
276    pub fn LLVMDIBuilderCreateImportedModuleFromAlias(
277        Builder: LLVMDIBuilderRef,
278        Scope: LLVMMetadataRef,
279        ImportedEntity: LLVMMetadataRef,
280        File: LLVMMetadataRef,
281        Line: ::libc::c_uint,
282    ) -> LLVMMetadataRef;
283
284    /// Create a descriptor for an imported module.
285    pub fn LLVMDIBuilderCreateImportedModuleFromModule(
286        Builder: LLVMDIBuilderRef,
287        Scope: LLVMMetadataRef,
288        M: LLVMMetadataRef,
289        File: LLVMMetadataRef,
290        Line: ::libc::c_uint,
291    ) -> LLVMMetadataRef;
292
293    /// Create a descriptor for an imported function, type, or variable.
294    ///
295    /// Suitable for e.g. FORTRAN-style USE declarations.
296    pub fn LLVMDIBuilderCreateImportedDeclaration(
297        Builder: LLVMDIBuilderRef,
298        Scope: LLVMMetadataRef,
299        Decl: LLVMMetadataRef,
300        File: LLVMMetadataRef,
301        Line: ::libc::c_uint,
302        Name: *const ::libc::c_char,
303        NameLen: ::libc::size_t,
304    ) -> LLVMMetadataRef;
305
306    /// Creates a new DebugLocation that describes a source location.
307    pub fn LLVMDIBuilderCreateDebugLocation(
308        Ctx: LLVMContextRef,
309        Line: ::libc::c_uint,
310        Column: ::libc::c_uint,
311        Scope: LLVMMetadataRef,
312        InlinedAt: LLVMMetadataRef,
313    ) -> LLVMMetadataRef;
314
315    /// Get the line number of this debug location.
316    pub fn LLVMDILocationGetLine(Location: LLVMMetadataRef) -> ::libc::c_uint;
317
318    /// Get the column number of this debug location.
319    pub fn LLVMDILocationGetColumn(Location: LLVMMetadataRef) -> ::libc::c_uint;
320
321    /// Get the local scope associated with this debug location.
322    pub fn LLVMDILocationGetScope(Location: LLVMMetadataRef) -> LLVMMetadataRef;
323
324    /// Get the "inline at" location associated with this debug location.
325    #[cfg(LLVM_VERSION_9_OR_GREATER)]
326    pub fn LLVMDILocationGetInlinedAt(Location: LLVMMetadataRef) -> LLVMMetadataRef;
327
328    /// Get the metadata of the file associated with a given scope.
329    #[cfg(LLVM_VERSION_9_OR_GREATER)]
330    pub fn LLVMDIScopeGetFile(Scope: LLVMMetadataRef) -> LLVMMetadataRef;
331
332    /// Get the directory of a given file.
333    #[cfg(LLVM_VERSION_9_OR_GREATER)]
334    pub fn LLVMDIFileGetDirectory(
335        File: LLVMMetadataRef,
336        Len: *mut ::libc::c_uint,
337    ) -> *const ::libc::c_char;
338
339    /// Get the name of a given file.
340    #[cfg(LLVM_VERSION_9_OR_GREATER)]
341    pub fn LLVMDIFileGetFilename(
342        File: LLVMMetadataRef,
343        Len: *mut ::libc::c_uint,
344    ) -> *const ::libc::c_char;
345
346    /// Get the source of a given file.
347    #[cfg(LLVM_VERSION_9_OR_GREATER)]
348    pub fn LLVMDIFileGetSource(
349        File: LLVMMetadataRef,
350        Len: *mut ::libc::c_uint,
351    ) -> *const ::libc::c_char;
352
353    /// Create a type array.
354    pub fn LLVMDIBuilderGetOrCreateTypeArray(
355        Builder: LLVMDIBuilderRef,
356        Data: *mut LLVMMetadataRef,
357        NumElements: ::libc::size_t,
358    ) -> LLVMMetadataRef;
359
360    /// Create subroutine type.
361    pub fn LLVMDIBuilderCreateSubroutineType(
362        Builder: LLVMDIBuilderRef,
363        File: LLVMMetadataRef,
364        ParameterTypes: *mut LLVMMetadataRef,
365        NumParameterTypes: ::libc::c_uint,
366        Flags: LLVMDIFlags,
367    ) -> LLVMMetadataRef;
368
369    #[cfg(LLVM_VERSION_10_OR_GREATER)]
370    pub fn LLVMDIBuilderCreateMacro(
371        Builder: LLVMDIBuilderRef,
372        ParentMacroFile: LLVMMetadataRef,
373        Line: ::libc::c_uint,
374        RecordType: LLVMDWARFMacinfoRecordType,
375        Name: *const ::libc::c_char,
376        NameLen: usize,
377        Value: *const ::libc::c_char,
378        ValueLen: usize
379    ) -> LLVMMetadataRef;
380
381    #[cfg(LLVM_VERSION_10_OR_GREATER)]
382    pub fn LLVMDIBuilderCreateTempMacroFile(
383        Builder: LLVMDIBuilderRef,
384        ParentMacroFile: LLVMMetadataRef,
385        Line: ::libc::c_uint,
386        File: LLVMMetadataRef
387    ) -> LLVMMetadataRef;
388
389    /// Create debugging information entry for an enumerator.
390    #[cfg(LLVM_VERSION_9_OR_GREATER)]
391    pub fn LLVMDIBuilderCreateEnumerator(
392        Builder: LLVMDIBuilderRef,
393        Name: *const ::libc::c_char,
394        NameLen: ::libc::size_t,
395        Value: i64,
396        IsUnsigned: LLVMBool,
397    ) -> LLVMMetadataRef;
398
399    /// Create debugging information entry for an enumeration.
400    pub fn LLVMDIBuilderCreateEnumerationType(
401        Builder: LLVMDIBuilderRef,
402        Scope: LLVMMetadataRef,
403        Name: *const ::libc::c_char,
404        NameLen: ::libc::size_t,
405        File: LLVMMetadataRef,
406        LineNumber: ::libc::c_uint,
407        SizeInBits: u64,
408        AlignInBits: u32,
409        Elements: *mut LLVMMetadataRef,
410        NumElements: ::libc::c_uint,
411        ClassTy: LLVMMetadataRef,
412    ) -> LLVMMetadataRef;
413
414    /// Create debugging information entry for a union.
415    pub fn LLVMDIBuilderCreateUnionType(
416        Builder: LLVMDIBuilderRef,
417        Scope: LLVMMetadataRef,
418        Name: *const ::libc::c_char,
419        NameLen: ::libc::size_t,
420        File: LLVMMetadataRef,
421        LineNumber: ::libc::c_uint,
422        SizeInBits: u64,
423        AlignInBits: u32,
424        Flags: LLVMDIFlags,
425        Elements: *mut LLVMMetadataRef,
426        NumElements: ::libc::c_uint,
427        RunTimeLang: ::libc::c_uint,
428        UniqueId: *const ::libc::c_char,
429        UniqueIdLen: ::libc::size_t,
430    ) -> LLVMMetadataRef;
431
432    /// Create debugging information entry for an array.
433    pub fn LLVMDIBuilderCreateArrayType(
434        Builder: LLVMDIBuilderRef,
435        Size: u64,
436        AlignInBits: u32,
437        Ty: LLVMMetadataRef,
438        Subscripts: *mut LLVMMetadataRef,
439        NumSubscripts: ::libc::c_uint,
440    ) -> LLVMMetadataRef;
441
442    /// Create debugging information entry for a vector type.
443    pub fn LLVMDIBuilderCreateVectorType(
444        Builder: LLVMDIBuilderRef,
445        Size: u64,
446        AlignInBits: u32,
447        Ty: LLVMMetadataRef,
448        Subscripts: *mut LLVMMetadataRef,
449        NumSubscripts: ::libc::c_uint,
450    ) -> LLVMMetadataRef;
451
452    /// Create a DWARF unspecified type.
453    pub fn LLVMDIBuilderCreateUnspecifiedType(
454        Builder: LLVMDIBuilderRef,
455        Name: *const ::libc::c_char,
456        NameLen: ::libc::size_t,
457    ) -> LLVMMetadataRef;
458
459    /// Create debugging information entry for a basic type.
460    pub fn LLVMDIBuilderCreateBasicType(
461        Builder: LLVMDIBuilderRef,
462        Name: *const ::libc::c_char,
463        NameLen: ::libc::size_t,
464        SizeInBits: u64,
465        Encoding: LLVMDWARFTypeEncoding,
466        Flags: LLVMDIFlags,
467    ) -> LLVMMetadataRef;
468
469    /// Create debugging information entry for a pointer.
470    pub fn LLVMDIBuilderCreatePointerType(
471        Builder: LLVMDIBuilderRef,
472        PointeeTy: LLVMMetadataRef,
473        SizeInBits: u64,
474        AlignInBits: u32,
475        AddressSpace: ::libc::c_uint,
476        Name: *const ::libc::c_char,
477        NameLen: ::libc::size_t,
478    ) -> LLVMMetadataRef;
479
480    /// Create debugging information entry for a struct.
481    pub fn LLVMDIBuilderCreateStructType(
482        Builder: LLVMDIBuilderRef,
483        Scope: LLVMMetadataRef,
484        Name: *const ::libc::c_char,
485        NameLen: ::libc::size_t,
486        File: LLVMMetadataRef,
487        LineNumber: ::libc::c_uint,
488        SizeInBits: u64,
489        AlignInBits: u32,
490        Flags: LLVMDIFlags,
491        DerivedFrom: LLVMMetadataRef,
492        Elements: *mut LLVMMetadataRef,
493        NumElements: ::libc::c_uint,
494        RunTimeLang: ::libc::c_uint,
495        VTableHolder: LLVMMetadataRef,
496        UniqueId: *const ::libc::c_char,
497        UniqueIdLen: ::libc::size_t,
498    ) -> LLVMMetadataRef;
499
500    /// Create debugging information entry for a member.
501    pub fn LLVMDIBuilderCreateMemberType(
502        Builder: LLVMDIBuilderRef,
503        Scope: LLVMMetadataRef,
504        Name: *const ::libc::c_char,
505        NameLen: ::libc::size_t,
506        File: LLVMMetadataRef,
507        LineNo: ::libc::c_uint,
508        SizeInBits: u64,
509        AlignInBits: u32,
510        OffsetInBits: u64,
511        Flags: LLVMDIFlags,
512        Ty: LLVMMetadataRef,
513    ) -> LLVMMetadataRef;
514
515    /// Create debugging information entry for a C++ static data member.
516    pub fn LLVMDIBuilderCreateStaticMemberType(
517        Builder: LLVMDIBuilderRef,
518        Scope: LLVMMetadataRef,
519        Name: *const ::libc::c_char,
520        NameLen: ::libc::size_t,
521        File: LLVMMetadataRef,
522        LineNumber: ::libc::c_uint,
523        Type: LLVMMetadataRef,
524        Flags: LLVMDIFlags,
525        ConstantVal: LLVMValueRef,
526        AlignInBits: u32,
527    ) -> LLVMMetadataRef;
528
529    /// Create debugging information entry for a pointer to member.
530    pub fn LLVMDIBuilderCreateMemberPointerType(
531        Builder: LLVMDIBuilderRef,
532        PointeeType: LLVMMetadataRef,
533        ClassType: LLVMMetadataRef,
534        SizeInBits: u64,
535        AlignInBits: u32,
536        Flags: LLVMDIFlags,
537    ) -> LLVMMetadataRef;
538
539    /// Create debugging information entry for Objective-C instance variable.
540    pub fn LLVMDIBuilderCreateObjCIVar(
541        Builder: LLVMDIBuilderRef,
542        Name: *const ::libc::c_char,
543        NameLen: ::libc::size_t,
544        File: LLVMMetadataRef,
545        LineNo: ::libc::c_uint,
546        SizeInBits: u64,
547        AlignInBits: u32,
548        OffsetInBits: u64,
549        Flags: LLVMDIFlags,
550        Ty: LLVMMetadataRef,
551        PropertyNode: LLVMMetadataRef,
552    ) -> LLVMMetadataRef;
553
554    /// Create debugging information entry for Objective-C property.
555    pub fn LLVMDIBuilderCreateObjCProperty(
556        Builder: LLVMDIBuilderRef,
557        Name: *const ::libc::c_char,
558        NameLen: ::libc::size_t,
559        File: LLVMMetadataRef,
560        LineNo: ::libc::c_uint,
561        GetterName: *const ::libc::c_char,
562        GetterNameLen: ::libc::size_t,
563        SetterName: *const ::libc::c_char,
564        SetterNameLen: ::libc::size_t,
565        PropertyAttributes: ::libc::c_uint,
566        Ty: LLVMMetadataRef,
567    ) -> LLVMMetadataRef;
568
569    /// Create a uniqued DIType* clone with FlagObjectPointer and FlagArtificial set.
570    pub fn LLVMDIBuilderCreateObjectPointerType(
571        Builder: LLVMDIBuilderRef,
572        Type: LLVMMetadataRef,
573    ) -> LLVMMetadataRef;
574
575    /// Create debugging information entry for a qualified type, e.g. 'const int'.
576    pub fn LLVMDIBuilderCreateQualifiedType(
577        Builder: LLVMDIBuilderRef,
578        Tag: ::libc::c_uint,
579        Type: LLVMMetadataRef,
580    ) -> LLVMMetadataRef;
581
582    /// Create debugging information entry for a c++ style reference or rvalue reference type.
583    pub fn LLVMDIBuilderCreateReferenceType(
584        Builder: LLVMDIBuilderRef,
585        Tag: ::libc::c_uint,
586        Type: LLVMMetadataRef,
587    ) -> LLVMMetadataRef;
588
589    /// Create C++11 nullptr type.
590    pub fn LLVMDIBuilderCreateNullPtrType(Builder: LLVMDIBuilderRef) -> LLVMMetadataRef;
591
592    /// Create debugging information entry for a typedef.
593    pub fn LLVMDIBuilderCreateTypedef(
594        Builder: LLVMDIBuilderRef,
595        Type: LLVMMetadataRef,
596        Name: *const ::libc::c_char,
597        NameLen: ::libc::size_t,
598        File: LLVMMetadataRef,
599        LineNo: ::libc::c_uint,
600        Scope: LLVMMetadataRef,
601        #[cfg(LLVM_VERSION_10_OR_GREATER)]
602        AlignInBits: u32,
603    ) -> LLVMMetadataRef;
604
605    /// Create debugging information entry to establish inheritance relationship between two types.
606    pub fn LLVMDIBuilderCreateInheritance(
607        Builder: LLVMDIBuilderRef,
608        Ty: LLVMMetadataRef,
609        BaseTy: LLVMMetadataRef,
610        BaseOffset: u64,
611        VBPtrOffset: u32,
612        Flags: LLVMDIFlags,
613    ) -> LLVMMetadataRef;
614
615    /// Create a permanent forward-declared type.
616    pub fn LLVMDIBuilderCreateForwardDecl(
617        Builder: LLVMDIBuilderRef,
618        Tag: ::libc::c_uint,
619        Name: *const ::libc::c_char,
620        NameLen: ::libc::size_t,
621        Scope: LLVMMetadataRef,
622        File: LLVMMetadataRef,
623        Line: ::libc::c_uint,
624        RuntimeLang: ::libc::c_uint,
625        SizeInBits: u64,
626        AlignInBits: u32,
627        UniqueIdentifier: *const ::libc::c_char,
628        UniqueIdentifierLen: ::libc::size_t,
629    ) -> LLVMMetadataRef;
630
631    /// Create a temporary forward-declared type.
632    pub fn LLVMDIBuilderCreateReplaceableCompositeType(
633        Builder: LLVMDIBuilderRef,
634        Tag: ::libc::c_uint,
635        Name: *const ::libc::c_char,
636        NameLen: ::libc::size_t,
637        Scope: LLVMMetadataRef,
638        File: LLVMMetadataRef,
639        Line: ::libc::c_uint,
640        RuntimeLang: ::libc::c_uint,
641        SizeInBits: u64,
642        AlignInBits: u32,
643        Flags: LLVMDIFlags,
644        UniqueIdentifier: *const ::libc::c_char,
645        UniqueIdentifierLen: ::libc::size_t,
646    ) -> LLVMMetadataRef;
647
648    /// Create debugging information entry for a bit field member.
649    pub fn LLVMDIBuilderCreateBitFieldMemberType(
650        Builder: LLVMDIBuilderRef,
651        Scope: LLVMMetadataRef,
652        Name: *const ::libc::c_char,
653        NameLen: ::libc::size_t,
654        File: LLVMMetadataRef,
655        LineNumber: ::libc::c_uint,
656        SizeInBits: u64,
657        OffsetInBits: u64,
658        StorageOffsetInBits: u64,
659        Flags: LLVMDIFlags,
660        Type: LLVMMetadataRef,
661    ) -> LLVMMetadataRef;
662
663    /// Create debugging information entry for a class.
664    pub fn LLVMDIBuilderCreateClassType(
665        Builder: LLVMDIBuilderRef,
666        Scope: LLVMMetadataRef,
667        Name: *const ::libc::c_char,
668        NameLen: ::libc::size_t,
669        File: LLVMMetadataRef,
670        LineNumber: ::libc::c_uint,
671        SizeInBits: u64,
672        AlignInBits: u32,
673        OffsetInBits: u64,
674        Flags: LLVMDIFlags,
675        DerivedFrom: LLVMMetadataRef,
676        Elements: *mut LLVMMetadataRef,
677        NumElements: ::libc::c_uint,
678        VTableHolder: LLVMMetadataRef,
679        TemplateParamsNode: LLVMMetadataRef,
680        UniqueIdentifier: *const ::libc::c_char,
681        UniqueIdentifierLen: ::libc::size_t,
682    ) -> LLVMMetadataRef;
683
684    /// Create a uniqued DIType* clone with FlagArtificial set.
685    pub fn LLVMDIBuilderCreateArtificialType(
686        Builder: LLVMDIBuilderRef,
687        Type: LLVMMetadataRef,
688    ) -> LLVMMetadataRef;
689
690    /// Get the name of this DIType.
691    pub fn LLVMDITypeGetName(
692        DType: LLVMMetadataRef,
693        Length: *mut ::libc::size_t,
694    ) -> *const ::libc::c_char;
695
696    /// Get the size of this DIType in bits.
697    pub fn LLVMDITypeGetSizeInBits(DType: LLVMMetadataRef) -> u64;
698
699    /// Get the offset of this DIType in bits.
700    pub fn LLVMDITypeGetOffsetInBits(DType: LLVMMetadataRef) -> u64;
701
702    /// Get the alignment of this DIType in bits.
703    pub fn LLVMDITypeGetAlignInBits(DType: LLVMMetadataRef) -> u32;
704
705    /// Get the source line where this DIType is declared.
706    pub fn LLVMDITypeGetLine(DType: LLVMMetadataRef) -> ::libc::c_uint;
707
708    /// Get the flags associated with this DIType.
709    pub fn LLVMDITypeGetFlags(DType: LLVMMetadataRef) -> LLVMDIFlags;
710
711    /// Create a descriptor for a value range.
712    pub fn LLVMDIBuilderGetOrCreateSubrange(
713        Builder: LLVMDIBuilderRef,
714        LowerBound: i64,
715        Count: i64,
716    ) -> LLVMMetadataRef;
717
718    /// Create an array of DI Nodes.
719    pub fn LLVMDIBuilderGetOrCreateArray(
720        Builder: LLVMDIBuilderRef,
721        Data: *mut LLVMMetadataRef,
722        NumElements: ::libc::size_t,
723    ) -> LLVMMetadataRef;
724
725    /// Create a new descriptor for the specified variable which has a complex
726    pub fn LLVMDIBuilderCreateExpression(
727        Builder: LLVMDIBuilderRef,
728        Addr: *mut i64,
729        Length: ::libc::size_t,
730    ) -> LLVMMetadataRef;
731
732    /// Create a new descriptor for the specified variable that does not have an
733    pub fn LLVMDIBuilderCreateConstantValueExpression(
734        Builder: LLVMDIBuilderRef,
735        Value: i64,
736    ) -> LLVMMetadataRef;
737
738    /// Create a new descriptor for the specified variable.
739    pub fn LLVMDIBuilderCreateGlobalVariableExpression(
740        Builder: LLVMDIBuilderRef,
741        Scope: LLVMMetadataRef,
742        Name: *const ::libc::c_char,
743        NameLen: ::libc::size_t,
744        Linkage: *const ::libc::c_char,
745        LinkLen: ::libc::size_t,
746        File: LLVMMetadataRef,
747        LineNo: ::libc::c_uint,
748        Ty: LLVMMetadataRef,
749        LocalToUnit: LLVMBool,
750        Expr: LLVMMetadataRef,
751        Decl: LLVMMetadataRef,
752        AlignInBits: u32,
753    ) -> LLVMMetadataRef;
754
755    /// Retrieves the DIVariable associated with this global variable expression.
756    #[cfg(LLVM_VERSION_9_OR_GREATER)]
757    pub fn LLVMDIGlobalVariableExpressionGetVariable(GVE: LLVMMetadataRef) -> LLVMMetadataRef;
758
759    /// Retrieves the DIExpression associated with this global variable expression.
760    #[cfg(LLVM_VERSION_9_OR_GREATER)]
761    pub fn LLVMDIGlobalVariableExpressionGetExpression(GVE: LLVMMetadataRef) -> LLVMMetadataRef;
762
763    ///Get the metadata of the file associated with a given variable.
764    #[cfg(LLVM_VERSION_9_OR_GREATER)]
765    pub fn LLVMDIVariableGetFile(Var: LLVMMetadataRef) -> LLVMMetadataRef;
766
767    /// Get the metadata of the scope associated with a given variable.
768    #[cfg(LLVM_VERSION_9_OR_GREATER)]
769    pub fn LLVMDIVariableGetScope(Var: LLVMMetadataRef) -> LLVMMetadataRef;
770
771    /// Get the source line where this \c DIVariable is declared.
772    #[cfg(LLVM_VERSION_9_OR_GREATER)]
773    pub fn LLVMDIVariableGetLine(Var: LLVMMetadataRef) -> ::libc::c_uint;
774
775    /// Create a new temporary \c MDNode.  Suitable for use in constructing cyclic
776    pub fn LLVMTemporaryMDNode(
777        Ctx: LLVMContextRef,
778        Data: *mut LLVMMetadataRef,
779        NumElements: ::libc::size_t,
780    ) -> LLVMMetadataRef;
781
782    /// Deallocate a temporary node.
783    pub fn LLVMDisposeTemporaryMDNode(TempNode: LLVMMetadataRef);
784
785    /// Replace all uses of temporary metadata.
786    pub fn LLVMMetadataReplaceAllUsesWith(
787        TempTargetMetadata: LLVMMetadataRef,
788        Replacement: LLVMMetadataRef,
789    );
790
791    /// Create a new descriptor for the specified global variable that is temporary
792    pub fn LLVMDIBuilderCreateTempGlobalVariableFwdDecl(
793        Builder: LLVMDIBuilderRef,
794        Scope: LLVMMetadataRef,
795        Name: *const ::libc::c_char,
796        NameLen: ::libc::size_t,
797        Linkage: *const ::libc::c_char,
798        LnkLen: ::libc::size_t,
799        File: LLVMMetadataRef,
800        LineNo: ::libc::c_uint,
801        Ty: LLVMMetadataRef,
802        LocalToUnit: LLVMBool,
803        Decl: LLVMMetadataRef,
804        AlignInBits: u32,
805    ) -> LLVMMetadataRef;
806
807    /// Insert a new llvm.dbg.declare intrinsic call before the given instruction.
808    pub fn LLVMDIBuilderInsertDeclareBefore(
809        Builder: LLVMDIBuilderRef,
810        Storage: LLVMValueRef,
811        VarInfo: LLVMMetadataRef,
812        Expr: LLVMMetadataRef,
813        DebugLoc: LLVMMetadataRef,
814        Instr: LLVMValueRef,
815    ) -> LLVMValueRef;
816
817    /// Insert a new llvm.dbg.declare intrinsic call at the end of the given basic block. If the basic block has a terminator instruction, the intrinsic is inserted before that terminator instruction.
818    pub fn LLVMDIBuilderInsertDeclareAtEnd(
819        Builder: LLVMDIBuilderRef,
820        Storage: LLVMValueRef,
821        VarInfo: LLVMMetadataRef,
822        Expr: LLVMMetadataRef,
823        DebugLoc: LLVMMetadataRef,
824        Block: LLVMBasicBlockRef,
825    ) -> LLVMValueRef;
826
827    /// Insert a new llvm.dbg.value intrinsic call before the given instruction.
828    pub fn LLVMDIBuilderInsertDbgValueBefore(
829        Builder: LLVMDIBuilderRef,
830        Val: LLVMValueRef,
831        VarInfo: LLVMMetadataRef,
832        Expr: LLVMMetadataRef,
833        DebugLoc: LLVMMetadataRef,
834        Instr: LLVMValueRef,
835    ) -> LLVMValueRef;
836
837    /// Insert a new llvm.dbg.value intrinsic call at the end of the given basic block. If the basic block has a terminator instruction, the intrinsic is inserted before that terminator instruction.
838    pub fn LLVMDIBuilderInsertDbgValueAtEnd(
839        Builder: LLVMDIBuilderRef,
840        Val: LLVMValueRef,
841        VarInfo: LLVMMetadataRef,
842        Expr: LLVMMetadataRef,
843        DebugLoc: LLVMMetadataRef,
844        Block: LLVMBasicBlockRef,
845    ) -> LLVMValueRef;
846
847    /// Create a new descriptor for a local auto variable.
848    pub fn LLVMDIBuilderCreateAutoVariable(
849        Builder: LLVMDIBuilderRef,
850        Scope: LLVMMetadataRef,
851        Name: *const ::libc::c_char,
852        NameLen: ::libc::size_t,
853        File: LLVMMetadataRef,
854        LineNo: ::libc::c_uint,
855        Ty: LLVMMetadataRef,
856        AlwaysPreserve: LLVMBool,
857        Flags: LLVMDIFlags,
858        AlignInBits: u32,
859    ) -> LLVMMetadataRef;
860
861    /// Create a new descriptor for a function parameter variable.
862    pub fn LLVMDIBuilderCreateParameterVariable(
863        Builder: LLVMDIBuilderRef,
864        Scope: LLVMMetadataRef,
865        Name: *const ::libc::c_char,
866        NameLen: ::libc::size_t,
867        ArgNo: ::libc::c_uint,
868        File: LLVMMetadataRef,
869        LineNo: ::libc::c_uint,
870        Ty: LLVMMetadataRef,
871        AlwaysPreserve: LLVMBool,
872        Flags: LLVMDIFlags,
873    ) -> LLVMMetadataRef;
874
875    /// Get the metadata of the subprogram attached to a function.
876    pub fn LLVMGetSubprogram(Func: LLVMValueRef) -> LLVMMetadataRef;
877
878    /// Set the subprogram attached to a function.
879    pub fn LLVMSetSubprogram(Func: LLVMValueRef, SP: LLVMMetadataRef);
880
881    /// Get the line associated with a given subprogram.
882    #[cfg(LLVM_VERSION_9_OR_GREATER)]
883    pub fn LLVMDISubprogramGetLine(Subprogram: LLVMMetadataRef) -> ::libc::c_uint;
884
885    /// Get the debug location for the given instruction.
886    #[cfg(LLVM_VERSION_9_OR_GREATER)]
887    pub fn LLVMInstructionGetDebugLoc(Inst: LLVMValueRef) -> LLVMMetadataRef;
888
889    /// Set the debug location for the given instruction.
890    #[cfg(LLVM_VERSION_9_OR_GREATER)]
891    pub fn LLVMInstructionSetDebugLoc(Inst: LLVMValueRef, Loc: LLVMMetadataRef);
892
893    /// Obtain the enumerated type of a metadata instance.
894    pub fn LLVMGetMetadataKind(Metadata: LLVMMetadataRef) -> LLVMMetadataKind;
895}