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