aboutsummaryrefslogtreecommitdiffhomepage
path: root/ext/llvm-sys.rs/src/debuginfo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/llvm-sys.rs/src/debuginfo.rs')
-rw-r--r--ext/llvm-sys.rs/src/debuginfo.rs880
1 files changed, 880 insertions, 0 deletions
diff --git a/ext/llvm-sys.rs/src/debuginfo.rs b/ext/llvm-sys.rs/src/debuginfo.rs
new file mode 100644
index 0000000..ba906d9
--- /dev/null
+++ b/ext/llvm-sys.rs/src/debuginfo.rs
@@ -0,0 +1,880 @@
+//! Generation of DWARF debug info.
+use super::*;
+
+// Debug info flags.
+pub type LLVMDIFlags = ::libc::c_int;
+pub const LLVMDIFlagZero: LLVMDIFlags = 0;
+pub const LLVMDIFlagPrivate: LLVMDIFlags = 1;
+pub const LLVMDIFlagProtected: LLVMDIFlags = 2;
+pub const LLVMDIFlagPublic: LLVMDIFlags = 3;
+pub const LLVMDIFlagFwdDecl: LLVMDIFlags = 1 << 2;
+pub const LLVMDIFlagAppleBlock: LLVMDIFlags = 1 << 3;
+pub const LLVMDIFlagReservedBit4: LLVMDIFlags = 1 << 4;
+pub const LLVMDIFlagVirtual: LLVMDIFlags = 1 << 5;
+pub const LLVMDIFlagArtificial: LLVMDIFlags = 1 << 6;
+pub const LLVMDIFlagExplicit: LLVMDIFlags = 1 << 7;
+pub const LLVMDIFlagPrototyped: LLVMDIFlags = 1 << 8;
+pub const LLVMDIFlagObjcClassComplete: LLVMDIFlags = 1 << 9;
+pub const LLVMDIFlagObjectPointer: LLVMDIFlags = 1 << 10;
+pub const LLVMDIFlagVector: LLVMDIFlags = 1 << 11;
+pub const LLVMDIFlagStaticMember: LLVMDIFlags = 1 << 12;
+pub const LLVMDIFlagLValueReference: LLVMDIFlags = 1 << 13;
+pub const LLVMDIFlagRValueReference: LLVMDIFlags = 1 << 14;
+pub const LLVMDIFlagReserved: LLVMDIFlags = 1 << 15;
+pub const LLVMDIFlagSingleInheritance: LLVMDIFlags = 1 << 16;
+pub const LLVMDIFlagMultipleInheritance: LLVMDIFlags = 2 << 16;
+pub const LLVMDIFlagVirtualInheritance: LLVMDIFlags = 3 << 16;
+pub const LLVMDIFlagIntroducedVirtual: LLVMDIFlags = 1 << 18;
+pub const LLVMDIFlagBitField: LLVMDIFlags = 1 << 19;
+pub const LLVMDIFlagNoReturn: LLVMDIFlags = 1 << 20;
+pub const LLVMDIFlagTypePassByValue: LLVMDIFlags = 1 << 22;
+pub const LLVMDIFlagTypePassByReference: LLVMDIFlags = 1 << 23;
+pub const LLVMDIFlagEnumClass: LLVMDIFlags = 1 << 24;
+pub const LLVMDIFlagThunk: LLVMDIFlags = 1 << 25;
+pub const LLVMDIFlagNonTrivial: LLVMDIFlags = 1 << 26;
+pub const LLVMDIFlagBigendian: LLVMDIFlags = 1 << 27;
+pub const LLVMDIFlagLittleEndian: LLVMDIFlags = 1 << 28;
+pub const LLVMDIFlagIndirectVirtualBase: LLVMDIFlags = (1 << 2) | (1 << 5);
+pub const LLVMDIFlagAccessibility: LLVMDIFlags =
+ LLVMDIFlagProtected | LLVMDIFlagPrivate | LLVMDIFlagPublic;
+pub const LLVMDIFlagPtrToMemberRep: LLVMDIFlags =
+ LLVMDIFlagSingleInheritance | LLVMDIFlagMultipleInheritance | LLVMDIFlagVirtualInheritance;
+
+/// Source languages known by DWARF.
+#[repr(C)]
+#[derive(Debug)]
+pub enum LLVMDWARFSourceLanguage {
+ LLVMDWARFSourceLanguageC89,
+ LLVMDWARFSourceLanguageC,
+ LLVMDWARFSourceLanguageAda83,
+ LLVMDWARFSourceLanguageC_plus_plus,
+ LLVMDWARFSourceLanguageCobol74,
+ LLVMDWARFSourceLanguageCobol85,
+ LLVMDWARFSourceLanguageFortran77,
+ LLVMDWARFSourceLanguageFortran90,
+ LLVMDWARFSourceLanguagePascal83,
+ LLVMDWARFSourceLanguageModula2,
+ // New in DWARF v3:
+ LLVMDWARFSourceLanguageJava,
+ LLVMDWARFSourceLanguageC99,
+ LLVMDWARFSourceLanguageAda95,
+ LLVMDWARFSourceLanguageFortran95,
+ LLVMDWARFSourceLanguagePLI,
+ LLVMDWARFSourceLanguageObjC,
+ LLVMDWARFSourceLanguageObjC_plus_plus,
+ LLVMDWARFSourceLanguageUPC,
+ LLVMDWARFSourceLanguageD,
+ // New in DWARF v4:
+ LLVMDWARFSourceLanguagePython,
+ // New in DWARF v5:
+ LLVMDWARFSourceLanguageOpenCL,
+ LLVMDWARFSourceLanguageGo,
+ LLVMDWARFSourceLanguageModula3,
+ LLVMDWARFSourceLanguageHaskell,
+ LLVMDWARFSourceLanguageC_plus_plus_03,
+ LLVMDWARFSourceLanguageC_plus_plus_11,
+ LLVMDWARFSourceLanguageOCaml,
+ LLVMDWARFSourceLanguageRust,
+ LLVMDWARFSourceLanguageC11,
+ LLVMDWARFSourceLanguageSwift,
+ LLVMDWARFSourceLanguageJulia,
+ LLVMDWARFSourceLanguageDylan,
+ LLVMDWARFSourceLanguageC_plus_plus_14,
+ LLVMDWARFSourceLanguageFortran03,
+ LLVMDWARFSourceLanguageFortran08,
+ LLVMDWARFSourceLanguageRenderScript,
+ LLVMDWARFSourceLanguageBLISS,
+ // Vendor extensions:
+ LLVMDWARFSourceLanguageMips_Assembler,
+ LLVMDWARFSourceLanguageGOOGLE_RenderScript,
+ LLVMDWARFSourceLanguageBORLAND_Delphi,
+}
+
+/// The amount of debug information to emit.
+#[repr(C)]
+#[derive(Debug)]
+pub enum LLVMDWARFEmissionKind {
+ LLVMDWARFEmissionKindNone = 0,
+ LLVMDWARFEmissionKindFull,
+ LLVMDWARFEmissionKindLineTablesOnly,
+}
+
+#[repr(C)]
+#[derive(Debug)]
+pub enum LLVMMetadataKind {
+ LLVMMDStringMetadataKind,
+ LLVMConstantAsMetadataMetadataKind,
+ LLVMLocalAsMetadataMetadataKind,
+ LLVMDistinctMDOperandPlaceholderMetadataKind,
+ LLVMMDTupleMetadataKind,
+ LLVMDILocationMetadataKind,
+ LLVMDIExpressionMetadataKind,
+ LLVMDIGlobalVariableExpressionMetadataKind,
+ LLVMGenericDINodeMetadataKind,
+ LLVMDISubrangeMetadataKind,
+ LLVMDIEnumeratorMetadataKind,
+ LLVMDIBasicTypeMetadataKind,
+ LLVMDIDerivedTypeMetadataKind,
+ LLVMDICompositeTypeMetadataKind,
+ LLVMDISubroutineTypeMetadataKind,
+ LLVMDIFileMetadataKind,
+ LLVMDICompileUnitMetadataKind,
+ LLVMDISubprogramMetadataKind,
+ LLVMDILexicalBlockMetadataKind,
+ LLVMDILexicalBlockFileMetadataKind,
+ LLVMDINamespaceMetadataKind,
+ LLVMDIModuleMetadataKind,
+ LLVMDITemplateTypeParameterMetadataKind,
+ LLVMDITemplateValueParameterMetadataKind,
+ LLVMDIGlobalVariableMetadataKind,
+ LLVMDILocalVariableMetadataKind,
+ LLVMDILabelMetadataKind,
+ LLVMDIObjCPropertyMetadataKind,
+ LLVMDIImportedEntityMetadataKind,
+ LLVMDIMacroMetadataKind,
+ LLVMDIMacroFileMetadataKind,
+ LLVMDICommonBlockMetadataKind,
+ LLVMDIStringTypeMetadataKind,
+ LLVMDIGenericSubrangeMetadataKind,
+ LLVMDIArgListMetadataKind,
+}
+
+pub type LLVMDWARFTypeEncoding = ::libc::c_uint;
+
+#[repr(C)]
+#[derive(Debug)]
+pub enum LLVMDWARFMacinfoRecordType {
+ LLVMDWARFMacinfoRecordTypeDefine = 0x01,
+ LLVMDWARFMacinfoRecordTypeMacro = 0x02,
+ LLVMDWARFMacinfoRecordTypeStartFile = 0x03,
+ LLVMDWARFMacinfoRecordTypeEndFile = 0x04,
+ LLVMDWARFMacinfoRecordTypeVendorExt = 0xff,
+}
+
+extern "C" {
+ /// The current debug metadata version number.
+ pub fn LLVMDebugMetadataVersion() -> ::libc::c_uint;
+ /// The version of debug metadata that's present in the provided Module.
+ pub fn LLVMGetModuleDebugMetadataVersion(Module: LLVMModuleRef) -> ::libc::c_uint;
+ /// Strip debug info in the module if it exists.
+ pub fn LLVMStripModuleDebugInfo(Module: LLVMModuleRef) -> LLVMBool;
+ /// Construct a builder for a module, do not allow unresolved nodes.
+ pub fn LLVMCreateDIBuilderDisallowUnresolved(M: LLVMModuleRef) -> LLVMDIBuilderRef;
+ /// Construct a builder for a module and collect unresolved nodes.
+ pub fn LLVMCreateDIBuilder(M: LLVMModuleRef) -> LLVMDIBuilderRef;
+ /// Deallocate a builder and everything it owns.
+ ///
+ /// The builder must be finalized before this.
+ pub fn LLVMDisposeDIBuilder(Builder: LLVMDIBuilderRef);
+ /// Construct any deferred debug info descriptors.
+ pub fn LLVMDIBuilderFinalize(Builder: LLVMDIBuilderRef);
+ /// Finalize a specific subprogram.
+ /// No new variables may be added to this subprogram afterwards.
+ pub fn LLVMDIBuilderFinalizeSubprogram(Builder: LLVMDIBuilderRef, Subprogram: LLVMMetadataRef);
+ pub fn LLVMDIBuilderCreateCompileUnit(
+ Builder: LLVMDIBuilderRef,
+ Lang: LLVMDWARFSourceLanguage,
+ FileRef: LLVMMetadataRef,
+ Producer: *const ::libc::c_char,
+ ProducerLen: ::libc::size_t,
+ isOptimized: LLVMBool,
+ Flags: *const ::libc::c_char,
+ FlagsLen: ::libc::size_t,
+ RuntimeVer: ::libc::c_uint,
+ SplitName: *const ::libc::c_char,
+ SplitNameLen: ::libc::size_t,
+ Kind: LLVMDWARFEmissionKind,
+ DWOId: ::libc::c_uint,
+ SplitDebugInlining: LLVMBool,
+ DebugInfoForProfiling: LLVMBool,
+ SysRoot: *const ::libc::c_char,
+ SysRootLen: ::libc::size_t,
+ SDK: *const ::libc::c_char,
+ SDKLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+ /// Create a file descriptor to hold debugging information for a file.
+ pub fn LLVMDIBuilderCreateFile(
+ Builder: LLVMDIBuilderRef,
+ Filename: *const ::libc::c_char,
+ FilenameLen: ::libc::size_t,
+ Directory: *const ::libc::c_char,
+ DirectoryLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Creates a new descriptor for a module with the specified parent scope.
+ pub fn LLVMDIBuilderCreateModule(
+ Builder: LLVMDIBuilderRef,
+ ParentScope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ ConfigMacros: *const ::libc::c_char,
+ ConfigMacrosLen: ::libc::size_t,
+ IncludePath: *const ::libc::c_char,
+ IncludePathLen: ::libc::size_t,
+ APINotesFile: *const ::libc::c_char,
+ APINotesFileLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Creates a new descriptor for a namespace with the specified parent scope.
+ pub fn LLVMDIBuilderCreateNameSpace(
+ Builder: LLVMDIBuilderRef,
+ ParentScope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ ExportSymbols: LLVMBool,
+ ) -> LLVMMetadataRef;
+
+ /// Create a new descriptor for the specified subprogram.
+ pub fn LLVMDIBuilderCreateFunction(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ LinkageName: *const ::libc::c_char,
+ LinkageNameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ Ty: LLVMMetadataRef,
+ IsLocalToUnit: LLVMBool,
+ IsDefinition: LLVMBool,
+ ScopeLine: ::libc::c_uint,
+ Flags: LLVMDIFlags,
+ IsOptimized: LLVMBool,
+ ) -> LLVMMetadataRef;
+
+ /// Create a descriptor for a lexical block with the specified parent context.
+ pub fn LLVMDIBuilderCreateLexicalBlock(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ Column: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create a descriptor for a lexical block with a new file attached.
+ pub fn LLVMDIBuilderCreateLexicalBlockFile(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Discriminator: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create a descriptor for an imported namespace. Suitable for e.g. C++ using declarations.
+ pub fn LLVMDIBuilderCreateImportedModuleFromNamespace(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ NS: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create a descriptor for an imported module that aliases another imported entity descriptor.
+ pub fn LLVMDIBuilderCreateImportedModuleFromAlias(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ ImportedEntity: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create a descriptor for an imported module.
+ pub fn LLVMDIBuilderCreateImportedModuleFromModule(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ M: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create a descriptor for an imported function, type, or variable.
+ ///
+ /// Suitable for e.g. FORTRAN-style USE declarations.
+ pub fn LLVMDIBuilderCreateImportedDeclaration(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Decl: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Creates a new DebugLocation that describes a source location.
+ pub fn LLVMDIBuilderCreateDebugLocation(
+ Ctx: LLVMContextRef,
+ Line: ::libc::c_uint,
+ Column: ::libc::c_uint,
+ Scope: LLVMMetadataRef,
+ InlinedAt: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Get the line number of this debug location.
+ pub fn LLVMDILocationGetLine(Location: LLVMMetadataRef) -> ::libc::c_uint;
+
+ /// Get the column number of this debug location.
+ pub fn LLVMDILocationGetColumn(Location: LLVMMetadataRef) -> ::libc::c_uint;
+
+ /// Get the local scope associated with this debug location.
+ pub fn LLVMDILocationGetScope(Location: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ /// Get the "inline at" location associated with this debug location.
+ pub fn LLVMDILocationGetInlinedAt(Location: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ /// Get the metadata of the file associated with a given scope.
+ pub fn LLVMDIScopeGetFile(Scope: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ /// Get the directory of a given file.
+ pub fn LLVMDIFileGetDirectory(
+ File: LLVMMetadataRef,
+ Len: *mut ::libc::c_uint,
+ ) -> *const ::libc::c_char;
+
+ /// Get the name of a given file.
+ pub fn LLVMDIFileGetFilename(
+ File: LLVMMetadataRef,
+ Len: *mut ::libc::c_uint,
+ ) -> *const ::libc::c_char;
+
+ /// Get the source of a given file.
+ pub fn LLVMDIFileGetSource(
+ File: LLVMMetadataRef,
+ Len: *mut ::libc::c_uint,
+ ) -> *const ::libc::c_char;
+
+ /// Create a type array.
+ pub fn LLVMDIBuilderGetOrCreateTypeArray(
+ Builder: LLVMDIBuilderRef,
+ Data: *mut LLVMMetadataRef,
+ NumElements: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create subroutine type.
+ pub fn LLVMDIBuilderCreateSubroutineType(
+ Builder: LLVMDIBuilderRef,
+ File: LLVMMetadataRef,
+ ParameterTypes: *mut LLVMMetadataRef,
+ NumParameterTypes: ::libc::c_uint,
+ Flags: LLVMDIFlags,
+ ) -> LLVMMetadataRef;
+
+ pub fn LLVMDIBuilderCreateMacro(
+ Builder: LLVMDIBuilderRef,
+ ParentMacroFile: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ RecordType: LLVMDWARFMacinfoRecordType,
+ Name: *const ::libc::c_char,
+ NameLen: usize,
+ Value: *const ::libc::c_char,
+ ValueLen: usize,
+ ) -> LLVMMetadataRef;
+
+ pub fn LLVMDIBuilderCreateTempMacroFile(
+ Builder: LLVMDIBuilderRef,
+ ParentMacroFile: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ File: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for an enumerator.
+ pub fn LLVMDIBuilderCreateEnumerator(
+ Builder: LLVMDIBuilderRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ Value: i64,
+ IsUnsigned: LLVMBool,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for an enumeration.
+ pub fn LLVMDIBuilderCreateEnumerationType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNumber: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ ClassTy: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a union.
+ pub fn LLVMDIBuilderCreateUnionType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNumber: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ Flags: LLVMDIFlags,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ RunTimeLang: ::libc::c_uint,
+ UniqueId: *const ::libc::c_char,
+ UniqueIdLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for an array.
+ pub fn LLVMDIBuilderCreateArrayType(
+ Builder: LLVMDIBuilderRef,
+ Size: u64,
+ AlignInBits: u32,
+ Ty: LLVMMetadataRef,
+ Subscripts: *mut LLVMMetadataRef,
+ NumSubscripts: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a vector type.
+ pub fn LLVMDIBuilderCreateVectorType(
+ Builder: LLVMDIBuilderRef,
+ Size: u64,
+ AlignInBits: u32,
+ Ty: LLVMMetadataRef,
+ Subscripts: *mut LLVMMetadataRef,
+ NumSubscripts: ::libc::c_uint,
+ ) -> LLVMMetadataRef;
+
+ /// Create a DWARF unspecified type.
+ pub fn LLVMDIBuilderCreateUnspecifiedType(
+ Builder: LLVMDIBuilderRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a basic type.
+ pub fn LLVMDIBuilderCreateBasicType(
+ Builder: LLVMDIBuilderRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ SizeInBits: u64,
+ Encoding: LLVMDWARFTypeEncoding,
+ Flags: LLVMDIFlags,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a pointer.
+ pub fn LLVMDIBuilderCreatePointerType(
+ Builder: LLVMDIBuilderRef,
+ PointeeTy: LLVMMetadataRef,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ AddressSpace: ::libc::c_uint,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a struct.
+ pub fn LLVMDIBuilderCreateStructType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNumber: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ Flags: LLVMDIFlags,
+ DerivedFrom: LLVMMetadataRef,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ RunTimeLang: ::libc::c_uint,
+ VTableHolder: LLVMMetadataRef,
+ UniqueId: *const ::libc::c_char,
+ UniqueIdLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a member.
+ pub fn LLVMDIBuilderCreateMemberType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ OffsetInBits: u64,
+ Flags: LLVMDIFlags,
+ Ty: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a C++ static data member.
+ pub fn LLVMDIBuilderCreateStaticMemberType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNumber: ::libc::c_uint,
+ Type: LLVMMetadataRef,
+ Flags: LLVMDIFlags,
+ ConstantVal: LLVMValueRef,
+ AlignInBits: u32,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a pointer to member.
+ pub fn LLVMDIBuilderCreateMemberPointerType(
+ Builder: LLVMDIBuilderRef,
+ PointeeType: LLVMMetadataRef,
+ ClassType: LLVMMetadataRef,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ Flags: LLVMDIFlags,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for Objective-C instance variable.
+ pub fn LLVMDIBuilderCreateObjCIVar(
+ Builder: LLVMDIBuilderRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ OffsetInBits: u64,
+ Flags: LLVMDIFlags,
+ Ty: LLVMMetadataRef,
+ PropertyNode: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for Objective-C property.
+ pub fn LLVMDIBuilderCreateObjCProperty(
+ Builder: LLVMDIBuilderRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ GetterName: *const ::libc::c_char,
+ GetterNameLen: ::libc::size_t,
+ SetterName: *const ::libc::c_char,
+ SetterNameLen: ::libc::size_t,
+ PropertyAttributes: ::libc::c_uint,
+ Ty: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create a uniqued DIType* clone with FlagObjectPointer and FlagArtificial set.
+ pub fn LLVMDIBuilderCreateObjectPointerType(
+ Builder: LLVMDIBuilderRef,
+ Type: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a qualified type, e.g. 'const int'.
+ pub fn LLVMDIBuilderCreateQualifiedType(
+ Builder: LLVMDIBuilderRef,
+ Tag: ::libc::c_uint,
+ Type: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a c++ style reference or rvalue reference type.
+ pub fn LLVMDIBuilderCreateReferenceType(
+ Builder: LLVMDIBuilderRef,
+ Tag: ::libc::c_uint,
+ Type: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create C++11 nullptr type.
+ pub fn LLVMDIBuilderCreateNullPtrType(Builder: LLVMDIBuilderRef) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a typedef.
+ pub fn LLVMDIBuilderCreateTypedef(
+ Builder: LLVMDIBuilderRef,
+ Type: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ Scope: LLVMMetadataRef,
+ AlignInBits: u32,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry to establish inheritance relationship between two types.
+ pub fn LLVMDIBuilderCreateInheritance(
+ Builder: LLVMDIBuilderRef,
+ Ty: LLVMMetadataRef,
+ BaseTy: LLVMMetadataRef,
+ BaseOffset: u64,
+ VBPtrOffset: u32,
+ Flags: LLVMDIFlags,
+ ) -> LLVMMetadataRef;
+
+ /// Create a permanent forward-declared type.
+ pub fn LLVMDIBuilderCreateForwardDecl(
+ Builder: LLVMDIBuilderRef,
+ Tag: ::libc::c_uint,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ Scope: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ RuntimeLang: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ UniqueIdentifier: *const ::libc::c_char,
+ UniqueIdentifierLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create a temporary forward-declared type.
+ pub fn LLVMDIBuilderCreateReplaceableCompositeType(
+ Builder: LLVMDIBuilderRef,
+ Tag: ::libc::c_uint,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ Scope: LLVMMetadataRef,
+ File: LLVMMetadataRef,
+ Line: ::libc::c_uint,
+ RuntimeLang: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ Flags: LLVMDIFlags,
+ UniqueIdentifier: *const ::libc::c_char,
+ UniqueIdentifierLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a bit field member.
+ pub fn LLVMDIBuilderCreateBitFieldMemberType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNumber: ::libc::c_uint,
+ SizeInBits: u64,
+ OffsetInBits: u64,
+ StorageOffsetInBits: u64,
+ Flags: LLVMDIFlags,
+ Type: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Create debugging information entry for a class.
+ pub fn LLVMDIBuilderCreateClassType(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNumber: ::libc::c_uint,
+ SizeInBits: u64,
+ AlignInBits: u32,
+ OffsetInBits: u64,
+ Flags: LLVMDIFlags,
+ DerivedFrom: LLVMMetadataRef,
+ Elements: *mut LLVMMetadataRef,
+ NumElements: ::libc::c_uint,
+ VTableHolder: LLVMMetadataRef,
+ TemplateParamsNode: LLVMMetadataRef,
+ UniqueIdentifier: *const ::libc::c_char,
+ UniqueIdentifierLen: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create a uniqued DIType* clone with FlagArtificial set.
+ pub fn LLVMDIBuilderCreateArtificialType(
+ Builder: LLVMDIBuilderRef,
+ Type: LLVMMetadataRef,
+ ) -> LLVMMetadataRef;
+
+ /// Get the name of this DIType.
+ pub fn LLVMDITypeGetName(
+ DType: LLVMMetadataRef,
+ Length: *mut ::libc::size_t,
+ ) -> *const ::libc::c_char;
+
+ /// Get the size of this DIType in bits.
+ pub fn LLVMDITypeGetSizeInBits(DType: LLVMMetadataRef) -> u64;
+
+ /// Get the offset of this DIType in bits.
+ pub fn LLVMDITypeGetOffsetInBits(DType: LLVMMetadataRef) -> u64;
+
+ /// Get the alignment of this DIType in bits.
+ pub fn LLVMDITypeGetAlignInBits(DType: LLVMMetadataRef) -> u32;
+
+ /// Get the source line where this DIType is declared.
+ pub fn LLVMDITypeGetLine(DType: LLVMMetadataRef) -> ::libc::c_uint;
+
+ /// Get the flags associated with this DIType.
+ pub fn LLVMDITypeGetFlags(DType: LLVMMetadataRef) -> LLVMDIFlags;
+
+ /// Create a descriptor for a value range.
+ pub fn LLVMDIBuilderGetOrCreateSubrange(
+ Builder: LLVMDIBuilderRef,
+ LowerBound: i64,
+ Count: i64,
+ ) -> LLVMMetadataRef;
+
+ /// Create an array of DI Nodes.
+ pub fn LLVMDIBuilderGetOrCreateArray(
+ Builder: LLVMDIBuilderRef,
+ Data: *mut LLVMMetadataRef,
+ NumElements: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create a new descriptor for the specified variable which has a complex
+ pub fn LLVMDIBuilderCreateExpression(
+ Builder: LLVMDIBuilderRef,
+ Addr: *mut u64,
+ Length: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Create a new descriptor for the specified variable that does not have an
+ pub fn LLVMDIBuilderCreateConstantValueExpression(
+ Builder: LLVMDIBuilderRef,
+ Value: u64,
+ ) -> LLVMMetadataRef;
+
+ /// Create a new descriptor for the specified variable.
+ pub fn LLVMDIBuilderCreateGlobalVariableExpression(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ Linkage: *const ::libc::c_char,
+ LinkLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ Ty: LLVMMetadataRef,
+ LocalToUnit: LLVMBool,
+ Expr: LLVMMetadataRef,
+ Decl: LLVMMetadataRef,
+ AlignInBits: u32,
+ ) -> LLVMMetadataRef;
+
+ /// Retrieves the DIVariable associated with this global variable expression.
+ pub fn LLVMDIGlobalVariableExpressionGetVariable(GVE: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ /// Retrieves the DIExpression associated with this global variable expression.
+ pub fn LLVMDIGlobalVariableExpressionGetExpression(GVE: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ ///Get the metadata of the file associated with a given variable.
+ pub fn LLVMDIVariableGetFile(Var: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ /// Get the metadata of the scope associated with a given variable.
+ pub fn LLVMDIVariableGetScope(Var: LLVMMetadataRef) -> LLVMMetadataRef;
+
+ /// Get the source line where this \c DIVariable is declared.
+ pub fn LLVMDIVariableGetLine(Var: LLVMMetadataRef) -> ::libc::c_uint;
+
+ /// Create a new temporary \c MDNode. Suitable for use in constructing cyclic
+ pub fn LLVMTemporaryMDNode(
+ Ctx: LLVMContextRef,
+ Data: *mut LLVMMetadataRef,
+ NumElements: ::libc::size_t,
+ ) -> LLVMMetadataRef;
+
+ /// Deallocate a temporary node.
+ pub fn LLVMDisposeTemporaryMDNode(TempNode: LLVMMetadataRef);
+
+ /// Replace all uses of temporary metadata.
+ pub fn LLVMMetadataReplaceAllUsesWith(
+ TempTargetMetadata: LLVMMetadataRef,
+ Replacement: LLVMMetadataRef,
+ );
+
+ /// Create a new descriptor for the specified global variable that is temporary
+ pub fn LLVMDIBuilderCreateTempGlobalVariableFwdDecl(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ Linkage: *const ::libc::c_char,
+ LnkLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ Ty: LLVMMetadataRef,
+ LocalToUnit: LLVMBool,
+ Decl: LLVMMetadataRef,
+ AlignInBits: u32,
+ ) -> LLVMMetadataRef;
+
+ /// Insert a new llvm.dbg.declare intrinsic call before the given instruction.
+ pub fn LLVMDIBuilderInsertDeclareBefore(
+ Builder: LLVMDIBuilderRef,
+ Storage: LLVMValueRef,
+ VarInfo: LLVMMetadataRef,
+ Expr: LLVMMetadataRef,
+ DebugLoc: LLVMMetadataRef,
+ Instr: LLVMValueRef,
+ ) -> LLVMValueRef;
+
+ /// 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.
+ pub fn LLVMDIBuilderInsertDeclareAtEnd(
+ Builder: LLVMDIBuilderRef,
+ Storage: LLVMValueRef,
+ VarInfo: LLVMMetadataRef,
+ Expr: LLVMMetadataRef,
+ DebugLoc: LLVMMetadataRef,
+ Block: LLVMBasicBlockRef,
+ ) -> LLVMValueRef;
+
+ /// Insert a new llvm.dbg.value intrinsic call before the given instruction.
+ pub fn LLVMDIBuilderInsertDbgValueBefore(
+ Builder: LLVMDIBuilderRef,
+ Val: LLVMValueRef,
+ VarInfo: LLVMMetadataRef,
+ Expr: LLVMMetadataRef,
+ DebugLoc: LLVMMetadataRef,
+ Instr: LLVMValueRef,
+ ) -> LLVMValueRef;
+
+ /// 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.
+ pub fn LLVMDIBuilderInsertDbgValueAtEnd(
+ Builder: LLVMDIBuilderRef,
+ Val: LLVMValueRef,
+ VarInfo: LLVMMetadataRef,
+ Expr: LLVMMetadataRef,
+ DebugLoc: LLVMMetadataRef,
+ Block: LLVMBasicBlockRef,
+ ) -> LLVMValueRef;
+
+ /// Create a new descriptor for a local auto variable.
+ pub fn LLVMDIBuilderCreateAutoVariable(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ Ty: LLVMMetadataRef,
+ AlwaysPreserve: LLVMBool,
+ Flags: LLVMDIFlags,
+ AlignInBits: u32,
+ ) -> LLVMMetadataRef;
+
+ /// Create a new descriptor for a function parameter variable.
+ pub fn LLVMDIBuilderCreateParameterVariable(
+ Builder: LLVMDIBuilderRef,
+ Scope: LLVMMetadataRef,
+ Name: *const ::libc::c_char,
+ NameLen: ::libc::size_t,
+ ArgNo: ::libc::c_uint,
+ File: LLVMMetadataRef,
+ LineNo: ::libc::c_uint,
+ Ty: LLVMMetadataRef,
+ AlwaysPreserve: LLVMBool,
+ Flags: LLVMDIFlags,
+ ) -> LLVMMetadataRef;
+
+ /// Get the metadata of the subprogram attached to a function.
+ pub fn LLVMGetSubprogram(Func: LLVMValueRef) -> LLVMMetadataRef;
+
+ /// Set the subprogram attached to a function.
+ pub fn LLVMSetSubprogram(Func: LLVMValueRef, SP: LLVMMetadataRef);
+
+ /// Get the line associated with a given subprogram.
+ pub fn LLVMDISubprogramGetLine(Subprogram: LLVMMetadataRef) -> ::libc::c_uint;
+
+ /// Get the debug location for the given instruction.
+ pub fn LLVMInstructionGetDebugLoc(Inst: LLVMValueRef) -> LLVMMetadataRef;
+
+ /// Set the debug location for the given instruction.
+ pub fn LLVMInstructionSetDebugLoc(Inst: LLVMValueRef, Loc: LLVMMetadataRef);
+
+ /// Obtain the enumerated type of a metadata instance.
+ pub fn LLVMGetMetadataKind(Metadata: LLVMMetadataRef) -> LLVMMetadataKind;
+}