//===------------ DebugInfo.h - LLVM C API Debug Info API -----------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// This file declares the C API endpoints for generating DWARF Debug Info /// /// Note: This interface is experimental. It is *NOT* stable, and may be /// changed without warning. /// //===----------------------------------------------------------------------===// #include "llvm-c/Core.h" #ifdef __cplusplus extern "C" { #endif /// Debug info flags. typedef enum { LLVMDIFlagZero = 0, LLVMDIFlagPrivate = 1, LLVMDIFlagProtected = 2, LLVMDIFlagPublic = 3, LLVMDIFlagFwdDecl = 1 << 2, LLVMDIFlagAppleBlock = 1 << 3, LLVMDIFlagBlockByrefStruct = 1 << 4, LLVMDIFlagVirtual = 1 << 5, LLVMDIFlagArtificial = 1 << 6, LLVMDIFlagExplicit = 1 << 7, LLVMDIFlagPrototyped = 1 << 8, LLVMDIFlagObjcClassComplete = 1 << 9, LLVMDIFlagObjectPointer = 1 << 10, LLVMDIFlagVector = 1 << 11, LLVMDIFlagStaticMember = 1 << 12, LLVMDIFlagLValueReference = 1 << 13, LLVMDIFlagRValueReference = 1 << 14, LLVMDIFlagReserved = 1 << 15, LLVMDIFlagSingleInheritance = 1 << 16, LLVMDIFlagMultipleInheritance = 2 << 16, LLVMDIFlagVirtualInheritance = 3 << 16, LLVMDIFlagIntroducedVirtual = 1 << 18, LLVMDIFlagBitField = 1 << 19, LLVMDIFlagNoReturn = 1 << 20, LLVMDIFlagMainSubprogram = 1 << 21, LLVMDIFlagIndirectVirtualBase = (1 << 2) | (1 << 5), LLVMDIFlagAccessibility = LLVMDIFlagPrivate | LLVMDIFlagProtected | LLVMDIFlagPublic, LLVMDIFlagPtrToMemberRep = LLVMDIFlagSingleInheritance | LLVMDIFlagMultipleInheritance | LLVMDIFlagVirtualInheritance } LLVMDIFlags; /// Source languages known by DWARF. typedef enum { 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 } LLVMDWARFSourceLanguage; /// The amount of debug information to emit. typedef enum { LLVMDWARFEmissionNone = 0, LLVMDWARFEmissionFull, LLVMDWARFEmissionLineTablesOnly } LLVMDWARFEmissionKind; /// The current debug metadata version number. unsigned LLVMDebugMetadataVersion(void); /// The version of debug metadata that's present in the provided \c Module. unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module); /// Strip debug info in the module if it exists. /// /// To do this, we remove all calls to the debugger intrinsics and any named /// metadata for debugging. We also remove debug locations for instructions. /// Return true if module is modified. LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef Module); /// Construct a builder for a module, and do not allow for unresolved nodes /// attached to the module. LLVMDIBuilderRef LLVMCreateDIBuilderDisallowUnresolved(LLVMModuleRef M); /// Construct a builder for a module and collect unresolved nodes attached /// to the module in order to resolve cycles during a call to /// \c LLVMDIBuilderFinalize. LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M); /// Deallocates the DIBuilder and everything it owns. /// @note You must call \c LLVMDIBuilderFinalize before this void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder); /// Construct any deferred debug info descriptors. void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder); /// A CompileUnit provides an anchor for all debugging /// information generated during this instance of compilation. /// \param Lang Source programming language, eg. /// \c LLVMDWARFSourceLanguageC99 /// \param File File info. /// \param Producer Identify the producer of debugging information /// and code. Usually this is a compiler /// version string. /// \param ProducerLen The length of the C string passed to \c Producer. /// \param isOptimized A boolean flag which indicates whether optimization /// is enabled or not. /// \param Flags This string lists command line options. This /// string is directly embedded in debug info /// output which may be used by a tool /// analyzing generated debugging information. /// \param FlagsLen The length of the C string passed to \c Flags. /// \param RuntimeVer This indicates runtime version for languages like /// Objective-C. /// \param SplitName The name of the file that we'll split debug info /// out into. /// \param SplitNameLen The length of the C string passed to \c SplitName. /// \param Kind The kind of debug information to generate. /// \param DWOId The DWOId if this is a split skeleton compile unit. /// \param SplitDebugInlining Whether to emit inline debug info. /// \param DebugInfoForProfiling Whether to emit extra debug info for /// profile collection. LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang, LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen, LLVMBool isOptimized, const char *Flags, size_t FlagsLen, unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen, LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining, LLVMBool DebugInfoForProfiling); /// Create a file descriptor to hold debugging information for a file. /// \param Builder The DIBuilder. /// \param Filename File name. /// \param FilenameLen The length of the C string passed to \c Filename. /// \param Directory Directory. /// \param DirectoryLen The length of the C string passed to \c Directory. LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename, size_t FilenameLen, const char *Directory, size_t DirectoryLen); /// Creates a new DebugLocation that describes a source location. /// \param Line The line in the source file. /// \param Column The column in the source file. /// \param Scope The scope in which the location resides. /// \param InlinedAt The scope where this location was inlined, if at all. /// (optional). /// \note If the item to which this location is attached cannot be /// attributed to a source line, pass 0 for the line and column. LLVMMetadataRef LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line, unsigned Column, LLVMMetadataRef Scope, LLVMMetadataRef InlinedAt); #ifdef __cplusplus } // end extern "C" #endif