Skip to main content

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