mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
0d9afcbbba
This is needed to support fortran assumed rank arrays which have runtime rank. Summary: Fortran assumed rank arrays have dynamic rank. DWARF TAG DW_TAG_generic_subrange is needed to support that. Testing: unit test cases added (hand-written) check llvm check debug-info Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D89218
1365 lines
54 KiB
C
1365 lines
54 KiB
C
//===------------ DebugInfo.h - LLVM C API Debug Info API -----------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// 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.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_C_DEBUGINFO_H
|
|
#define LLVM_C_DEBUGINFO_H
|
|
|
|
#include "llvm-c/Core.h"
|
|
#include "llvm-c/ExternC.h"
|
|
|
|
LLVM_C_EXTERN_C_BEGIN
|
|
|
|
/**
|
|
* Debug info flags.
|
|
*/
|
|
typedef enum {
|
|
LLVMDIFlagZero = 0,
|
|
LLVMDIFlagPrivate = 1,
|
|
LLVMDIFlagProtected = 2,
|
|
LLVMDIFlagPublic = 3,
|
|
LLVMDIFlagFwdDecl = 1 << 2,
|
|
LLVMDIFlagAppleBlock = 1 << 3,
|
|
LLVMDIFlagReservedBit4 = 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,
|
|
LLVMDIFlagTypePassByValue = 1 << 22,
|
|
LLVMDIFlagTypePassByReference = 1 << 23,
|
|
LLVMDIFlagEnumClass = 1 << 24,
|
|
LLVMDIFlagFixedEnum = LLVMDIFlagEnumClass, // Deprecated.
|
|
LLVMDIFlagThunk = 1 << 25,
|
|
LLVMDIFlagNonTrivial = 1 << 26,
|
|
LLVMDIFlagBigEndian = 1 << 27,
|
|
LLVMDIFlagLittleEndian = 1 << 28,
|
|
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 kind of metadata nodes.
|
|
*/
|
|
enum {
|
|
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
|
|
};
|
|
typedef unsigned LLVMMetadataKind;
|
|
|
|
/**
|
|
* An LLVM DWARF type encoding.
|
|
*/
|
|
typedef unsigned LLVMDWARFTypeEncoding;
|
|
|
|
/**
|
|
* Describes the kind of macro declaration used for LLVMDIBuilderCreateMacro.
|
|
* @see llvm::dwarf::MacinfoRecordType
|
|
* @note Values are from DW_MACINFO_* constants in the DWARF specification.
|
|
*/
|
|
typedef enum {
|
|
LLVMDWARFMacinfoRecordTypeDefine = 0x01,
|
|
LLVMDWARFMacinfoRecordTypeMacro = 0x02,
|
|
LLVMDWARFMacinfoRecordTypeStartFile = 0x03,
|
|
LLVMDWARFMacinfoRecordTypeEndFile = 0x04,
|
|
LLVMDWARFMacinfoRecordTypeVendorExt = 0xff
|
|
} LLVMDWARFMacinfoRecordType;
|
|
|
|
/**
|
|
* 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 \c 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 FileRef 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.
|
|
* \param SysRoot The Clang system root (value of -isysroot).
|
|
* \param SysRootLen The length of the C string passed to \c SysRoot.
|
|
* \param SDK The SDK. On Darwin, the last component of the sysroot.
|
|
* \param SDKLen The length of the C string passed to \c SDK.
|
|
*/
|
|
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, const char *SysRoot, size_t SysRootLen,
|
|
const char *SDK, size_t SDKLen);
|
|
|
|
/**
|
|
* Create a file descriptor to hold debugging information for a file.
|
|
* \param Builder The \c 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 descriptor for a module with the specified parent scope.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param ParentScope The parent scope containing this module declaration.
|
|
* \param Name Module name.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param ConfigMacros A space-separated shell-quoted list of -D macro
|
|
definitions as they would appear on a command line.
|
|
* \param ConfigMacrosLen The length of the C string passed to \c ConfigMacros.
|
|
* \param IncludePath The path to the module map file.
|
|
* \param IncludePathLen The length of the C string passed to \c IncludePath.
|
|
* \param APINotesFile The path to an API notes file for the module.
|
|
* \param APINotesFileLen The length of the C string passed to \c APINotestFile.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope,
|
|
const char *Name, size_t NameLen,
|
|
const char *ConfigMacros, size_t ConfigMacrosLen,
|
|
const char *IncludePath, size_t IncludePathLen,
|
|
const char *APINotesFile, size_t APINotesFileLen);
|
|
|
|
/**
|
|
* Creates a new descriptor for a namespace with the specified parent scope.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param ParentScope The parent scope containing this module declaration.
|
|
* \param Name NameSpace name.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param ExportSymbols Whether or not the namespace exports symbols, e.g.
|
|
* this is true of C++ inline namespaces.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef ParentScope,
|
|
const char *Name, size_t NameLen,
|
|
LLVMBool ExportSymbols);
|
|
|
|
/**
|
|
* Create a new descriptor for the specified subprogram.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param Scope Function scope.
|
|
* \param Name Function name.
|
|
* \param NameLen Length of enumeration name.
|
|
* \param LinkageName Mangled function name.
|
|
* \param LinkageNameLen Length of linkage name.
|
|
* \param File File where this variable is defined.
|
|
* \param LineNo Line number.
|
|
* \param Ty Function type.
|
|
* \param IsLocalToUnit True if this function is not externally visible.
|
|
* \param IsDefinition True if this is a function definition.
|
|
* \param ScopeLine Set to the beginning of the scope this starts
|
|
* \param Flags E.g.: \c LLVMDIFlagLValueReference. These flags are
|
|
* used to emit dwarf attributes.
|
|
* \param IsOptimized True if optimization is ON.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateFunction(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, const char *LinkageName, size_t LinkageNameLen,
|
|
LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
|
|
LLVMBool IsLocalToUnit, LLVMBool IsDefinition,
|
|
unsigned ScopeLine, LLVMDIFlags Flags, LLVMBool IsOptimized);
|
|
|
|
/**
|
|
* Create a descriptor for a lexical block with the specified parent context.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param Scope Parent lexical block.
|
|
* \param File Source file.
|
|
* \param Line The line in the source file.
|
|
* \param Column The column in the source file.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope,
|
|
LLVMMetadataRef File, unsigned Line, unsigned Column);
|
|
|
|
/**
|
|
* Create a descriptor for a lexical block with a new file attached.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param Scope Lexical block.
|
|
* \param File Source file.
|
|
* \param Discriminator DWARF path discriminator value.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef File,
|
|
unsigned Discriminator);
|
|
|
|
/**
|
|
* Create a descriptor for an imported namespace. Suitable for e.g. C++
|
|
* using declarations.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param Scope The scope this module is imported into
|
|
* \param File File where the declaration is located.
|
|
* \param Line Line number of the declaration.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateImportedModuleFromNamespace(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef NS,
|
|
LLVMMetadataRef File,
|
|
unsigned Line);
|
|
|
|
/**
|
|
* Create a descriptor for an imported module that aliases another
|
|
* imported entity descriptor.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param Scope The scope this module is imported into
|
|
* \param ImportedEntity Previous imported entity to alias.
|
|
* \param File File where the declaration is located.
|
|
* \param Line Line number of the declaration.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateImportedModuleFromAlias(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef ImportedEntity,
|
|
LLVMMetadataRef File,
|
|
unsigned Line);
|
|
|
|
/**
|
|
* Create a descriptor for an imported module.
|
|
* \param Builder The \c DIBuilder.
|
|
* \param Scope The scope this module is imported into
|
|
* \param M The module being imported here
|
|
* \param File File where the declaration is located.
|
|
* \param Line Line number of the declaration.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateImportedModuleFromModule(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef M,
|
|
LLVMMetadataRef File,
|
|
unsigned Line);
|
|
|
|
/**
|
|
* Create a descriptor for an imported function, type, or variable. Suitable
|
|
* for e.g. FORTRAN-style USE declarations.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope The scope this module is imported into.
|
|
* \param Decl The declaration (or definition) of a function, type,
|
|
or variable.
|
|
* \param File File where the declaration is located.
|
|
* \param Line Line number of the declaration.
|
|
* \param Name A name that uniquely identifies this imported declaration.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateImportedDeclaration(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope,
|
|
LLVMMetadataRef Decl,
|
|
LLVMMetadataRef File,
|
|
unsigned Line,
|
|
const char *Name, size_t NameLen);
|
|
|
|
/**
|
|
* 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);
|
|
|
|
/**
|
|
* Get the line number of this debug location.
|
|
* \param Location The debug location.
|
|
*
|
|
* @see DILocation::getLine()
|
|
*/
|
|
unsigned LLVMDILocationGetLine(LLVMMetadataRef Location);
|
|
|
|
/**
|
|
* Get the column number of this debug location.
|
|
* \param Location The debug location.
|
|
*
|
|
* @see DILocation::getColumn()
|
|
*/
|
|
unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location);
|
|
|
|
/**
|
|
* Get the local scope associated with this debug location.
|
|
* \param Location The debug location.
|
|
*
|
|
* @see DILocation::getScope()
|
|
*/
|
|
LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);
|
|
|
|
/**
|
|
* Get the "inline at" location associated with this debug location.
|
|
* \param Location The debug location.
|
|
*
|
|
* @see DILocation::getInlinedAt()
|
|
*/
|
|
LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location);
|
|
|
|
/**
|
|
* Get the metadata of the file associated with a given scope.
|
|
* \param Scope The scope object.
|
|
*
|
|
* @see DIScope::getFile()
|
|
*/
|
|
LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope);
|
|
|
|
/**
|
|
* Get the directory of a given file.
|
|
* \param File The file object.
|
|
* \param Len The length of the returned string.
|
|
*
|
|
* @see DIFile::getDirectory()
|
|
*/
|
|
const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, unsigned *Len);
|
|
|
|
/**
|
|
* Get the name of a given file.
|
|
* \param File The file object.
|
|
* \param Len The length of the returned string.
|
|
*
|
|
* @see DIFile::getFilename()
|
|
*/
|
|
const char *LLVMDIFileGetFilename(LLVMMetadataRef File, unsigned *Len);
|
|
|
|
/**
|
|
* Get the source of a given file.
|
|
* \param File The file object.
|
|
* \param Len The length of the returned string.
|
|
*
|
|
* @see DIFile::getSource()
|
|
*/
|
|
const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len);
|
|
|
|
/**
|
|
* Create a type array.
|
|
* \param Builder The DIBuilder.
|
|
* \param Data The type elements.
|
|
* \param NumElements Number of type elements.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef *Data,
|
|
size_t NumElements);
|
|
|
|
/**
|
|
* Create subroutine type.
|
|
* \param Builder The DIBuilder.
|
|
* \param File The file in which the subroutine resides.
|
|
* \param ParameterTypes An array of subroutine parameter types. This
|
|
* includes return type at 0th index.
|
|
* \param NumParameterTypes The number of parameter types in \c ParameterTypes
|
|
* \param Flags E.g.: \c LLVMDIFlagLValueReference.
|
|
* These flags are used to emit dwarf attributes.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef File,
|
|
LLVMMetadataRef *ParameterTypes,
|
|
unsigned NumParameterTypes,
|
|
LLVMDIFlags Flags);
|
|
|
|
/**
|
|
* Create debugging information entry for a macro.
|
|
* @param Builder The DIBuilder.
|
|
* @param ParentMacroFile Macro parent (could be NULL).
|
|
* @param Line Source line number where the macro is defined.
|
|
* @param RecordType DW_MACINFO_define or DW_MACINFO_undef.
|
|
* @param Name Macro name.
|
|
* @param NameLen Macro name length.
|
|
* @param Value Macro value.
|
|
* @param ValueLen Macro value length.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateMacro(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef ParentMacroFile,
|
|
unsigned Line,
|
|
LLVMDWARFMacinfoRecordType RecordType,
|
|
const char *Name, size_t NameLen,
|
|
const char *Value, size_t ValueLen);
|
|
|
|
/**
|
|
* Create debugging information temporary entry for a macro file.
|
|
* List of macro node direct children will be calculated by DIBuilder,
|
|
* using the \p ParentMacroFile relationship.
|
|
* @param Builder The DIBuilder.
|
|
* @param ParentMacroFile Macro parent (could be NULL).
|
|
* @param Line Source line number where the macro file is included.
|
|
* @param File File descriptor containing the name of the macro file.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateTempMacroFile(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef ParentMacroFile, unsigned Line,
|
|
LLVMMetadataRef File);
|
|
|
|
/**
|
|
* Create debugging information entry for an enumerator.
|
|
* @param Builder The DIBuilder.
|
|
* @param Name Enumerator name.
|
|
* @param NameLen Length of enumerator name.
|
|
* @param Value Enumerator value.
|
|
* @param IsUnsigned True if the value is unsigned.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateEnumerator(LLVMDIBuilderRef Builder,
|
|
const char *Name, size_t NameLen,
|
|
int64_t Value,
|
|
LLVMBool IsUnsigned);
|
|
|
|
/**
|
|
* Create debugging information entry for an enumeration.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope Scope in which this enumeration is defined.
|
|
* \param Name Enumeration name.
|
|
* \param NameLen Length of enumeration name.
|
|
* \param File File where this member is defined.
|
|
* \param LineNumber Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param Elements Enumeration elements.
|
|
* \param NumElements Number of enumeration elements.
|
|
* \param ClassTy Underlying type of a C++11/ObjC fixed enum.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
|
uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements,
|
|
unsigned NumElements, LLVMMetadataRef ClassTy);
|
|
|
|
/**
|
|
* Create debugging information entry for a union.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope Scope in which this union is defined.
|
|
* \param Name Union name.
|
|
* \param NameLen Length of union name.
|
|
* \param File File where this member is defined.
|
|
* \param LineNumber Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param Flags Flags to encode member attribute, e.g. private
|
|
* \param Elements Union elements.
|
|
* \param NumElements Number of union elements.
|
|
* \param RunTimeLang Optional parameter, Objective-C runtime version.
|
|
* \param UniqueId A unique identifier for the union.
|
|
* \param UniqueIdLen Length of unique identifier.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
|
uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
|
|
LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang,
|
|
const char *UniqueId, size_t UniqueIdLen);
|
|
|
|
|
|
/**
|
|
* Create debugging information entry for an array.
|
|
* \param Builder The DIBuilder.
|
|
* \param Size Array size.
|
|
* \param AlignInBits Alignment.
|
|
* \param Ty Element type.
|
|
* \param Subscripts Subscripts.
|
|
* \param NumSubscripts Number of subscripts.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size,
|
|
uint32_t AlignInBits, LLVMMetadataRef Ty,
|
|
LLVMMetadataRef *Subscripts,
|
|
unsigned NumSubscripts);
|
|
|
|
/**
|
|
* Create debugging information entry for a vector type.
|
|
* \param Builder The DIBuilder.
|
|
* \param Size Vector size.
|
|
* \param AlignInBits Alignment.
|
|
* \param Ty Element type.
|
|
* \param Subscripts Subscripts.
|
|
* \param NumSubscripts Number of subscripts.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size,
|
|
uint32_t AlignInBits, LLVMMetadataRef Ty,
|
|
LLVMMetadataRef *Subscripts,
|
|
unsigned NumSubscripts);
|
|
|
|
/**
|
|
* Create a DWARF unspecified type.
|
|
* \param Builder The DIBuilder.
|
|
* \param Name The unspecified type's name.
|
|
* \param NameLen Length of type name.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name,
|
|
size_t NameLen);
|
|
|
|
/**
|
|
* Create debugging information entry for a basic
|
|
* type.
|
|
* \param Builder The DIBuilder.
|
|
* \param Name Type name.
|
|
* \param NameLen Length of type name.
|
|
* \param SizeInBits Size of the type.
|
|
* \param Encoding DWARF encoding code, e.g. \c LLVMDWARFTypeEncoding_float.
|
|
* \param Flags Flags to encode optional attribute like endianity
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
|
|
size_t NameLen, uint64_t SizeInBits,
|
|
LLVMDWARFTypeEncoding Encoding,
|
|
LLVMDIFlags Flags);
|
|
|
|
/**
|
|
* Create debugging information entry for a pointer.
|
|
* \param Builder The DIBuilder.
|
|
* \param PointeeTy Type pointed by this pointer.
|
|
* \param SizeInBits Size.
|
|
* \param AlignInBits Alignment. (optional, pass 0 to ignore)
|
|
* \param AddressSpace DWARF address space. (optional, pass 0 to ignore)
|
|
* \param Name Pointer type name. (optional)
|
|
* \param NameLen Length of pointer type name. (optional)
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreatePointerType(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy,
|
|
uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace,
|
|
const char *Name, size_t NameLen);
|
|
|
|
/**
|
|
* Create debugging information entry for a struct.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope Scope in which this struct is defined.
|
|
* \param Name Struct name.
|
|
* \param NameLen Struct name length.
|
|
* \param File File where this member is defined.
|
|
* \param LineNumber Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param Flags Flags to encode member attribute, e.g. private
|
|
* \param Elements Struct elements.
|
|
* \param NumElements Number of struct elements.
|
|
* \param RunTimeLang Optional parameter, Objective-C runtime version.
|
|
* \param VTableHolder The object containing the vtable for the struct.
|
|
* \param UniqueId A unique identifier for the struct.
|
|
* \param UniqueIdLen Length of the unique identifier for the struct.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
|
uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
|
|
LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements,
|
|
unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder,
|
|
const char *UniqueId, size_t UniqueIdLen);
|
|
|
|
/**
|
|
* Create debugging information entry for a member.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope Member scope.
|
|
* \param Name Member name.
|
|
* \param NameLen Length of member name.
|
|
* \param File File where this member is defined.
|
|
* \param LineNo Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param OffsetInBits Member offset.
|
|
* \param Flags Flags to encode member attribute, e.g. private
|
|
* \param Ty Parent type.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateMemberType(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef File, unsigned LineNo,
|
|
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
|
|
LLVMDIFlags Flags, LLVMMetadataRef Ty);
|
|
|
|
/**
|
|
* Create debugging information entry for a
|
|
* C++ static data member.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope Member scope.
|
|
* \param Name Member name.
|
|
* \param NameLen Length of member name.
|
|
* \param File File where this member is declared.
|
|
* \param LineNumber Line number.
|
|
* \param Type Type of the static member.
|
|
* \param Flags Flags to encode member attribute, e.g. private.
|
|
* \param ConstantVal Const initializer of the member.
|
|
* \param AlignInBits Member alignment.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateStaticMemberType(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
|
|
LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal,
|
|
uint32_t AlignInBits);
|
|
|
|
/**
|
|
* Create debugging information entry for a pointer to member.
|
|
* \param Builder The DIBuilder.
|
|
* \param PointeeType Type pointed to by this pointer.
|
|
* \param ClassType Type for which this pointer points to members of.
|
|
* \param SizeInBits Size.
|
|
* \param AlignInBits Alignment.
|
|
* \param Flags Flags.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef PointeeType,
|
|
LLVMMetadataRef ClassType,
|
|
uint64_t SizeInBits,
|
|
uint32_t AlignInBits,
|
|
LLVMDIFlags Flags);
|
|
/**
|
|
* Create debugging information entry for Objective-C instance variable.
|
|
* \param Builder The DIBuilder.
|
|
* \param Name Member name.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param File File where this member is defined.
|
|
* \param LineNo Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param OffsetInBits Member offset.
|
|
* \param Flags Flags to encode member attribute, e.g. private
|
|
* \param Ty Parent type.
|
|
* \param PropertyNode Property associated with this ivar.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateObjCIVar(LLVMDIBuilderRef Builder,
|
|
const char *Name, size_t NameLen,
|
|
LLVMMetadataRef File, unsigned LineNo,
|
|
uint64_t SizeInBits, uint32_t AlignInBits,
|
|
uint64_t OffsetInBits, LLVMDIFlags Flags,
|
|
LLVMMetadataRef Ty, LLVMMetadataRef PropertyNode);
|
|
|
|
/**
|
|
* Create debugging information entry for Objective-C property.
|
|
* \param Builder The DIBuilder.
|
|
* \param Name Property name.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param File File where this property is defined.
|
|
* \param LineNo Line number.
|
|
* \param GetterName Name of the Objective C property getter selector.
|
|
* \param GetterNameLen The length of the C string passed to \c GetterName.
|
|
* \param SetterName Name of the Objective C property setter selector.
|
|
* \param SetterNameLen The length of the C string passed to \c SetterName.
|
|
* \param PropertyAttributes Objective C property attributes.
|
|
* \param Ty Type.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateObjCProperty(LLVMDIBuilderRef Builder,
|
|
const char *Name, size_t NameLen,
|
|
LLVMMetadataRef File, unsigned LineNo,
|
|
const char *GetterName, size_t GetterNameLen,
|
|
const char *SetterName, size_t SetterNameLen,
|
|
unsigned PropertyAttributes,
|
|
LLVMMetadataRef Ty);
|
|
|
|
/**
|
|
* Create a uniqued DIType* clone with FlagObjectPointer and FlagArtificial set.
|
|
* \param Builder The DIBuilder.
|
|
* \param Type The underlying type to which this pointer points.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Type);
|
|
|
|
/**
|
|
* Create debugging information entry for a qualified
|
|
* type, e.g. 'const int'.
|
|
* \param Builder The DIBuilder.
|
|
* \param Tag Tag identifying type,
|
|
* e.g. LLVMDWARFTypeQualifier_volatile_type
|
|
* \param Type Base Type.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, unsigned Tag,
|
|
LLVMMetadataRef Type);
|
|
|
|
/**
|
|
* Create debugging information entry for a c++
|
|
* style reference or rvalue reference type.
|
|
* \param Builder The DIBuilder.
|
|
* \param Tag Tag identifying type,
|
|
* \param Type Base Type.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateReferenceType(LLVMDIBuilderRef Builder, unsigned Tag,
|
|
LLVMMetadataRef Type);
|
|
|
|
/**
|
|
* Create C++11 nullptr type.
|
|
* \param Builder The DIBuilder.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder);
|
|
|
|
/**
|
|
* Create debugging information entry for a typedef.
|
|
* \param Builder The DIBuilder.
|
|
* \param Type Original type.
|
|
* \param Name Typedef name.
|
|
* \param File File where this type is defined.
|
|
* \param LineNo Line number.
|
|
* \param Scope The surrounding context for the typedef.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
|
|
const char *Name, size_t NameLen,
|
|
LLVMMetadataRef File, unsigned LineNo,
|
|
LLVMMetadataRef Scope, uint32_t AlignInBits);
|
|
|
|
/**
|
|
* Create debugging information entry to establish inheritance relationship
|
|
* between two types.
|
|
* \param Builder The DIBuilder.
|
|
* \param Ty Original type.
|
|
* \param BaseTy Base type. Ty is inherits from base.
|
|
* \param BaseOffset Base offset.
|
|
* \param VBPtrOffset Virtual base pointer offset.
|
|
* \param Flags Flags to describe inheritance attribute, e.g. private
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateInheritance(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Ty, LLVMMetadataRef BaseTy,
|
|
uint64_t BaseOffset, uint32_t VBPtrOffset,
|
|
LLVMDIFlags Flags);
|
|
|
|
/**
|
|
* Create a permanent forward-declared type.
|
|
* \param Builder The DIBuilder.
|
|
* \param Tag A unique tag for this type.
|
|
* \param Name Type name.
|
|
* \param NameLen Length of type name.
|
|
* \param Scope Type scope.
|
|
* \param File File where this type is defined.
|
|
* \param Line Line number where this type is defined.
|
|
* \param RuntimeLang Indicates runtime version for languages like
|
|
* Objective-C.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param UniqueIdentifier A unique identifier for the type.
|
|
* \param UniqueIdentifierLen Length of the unique identifier.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateForwardDecl(
|
|
LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
|
|
unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
|
|
const char *UniqueIdentifier, size_t UniqueIdentifierLen);
|
|
|
|
/**
|
|
* Create a temporary forward-declared type.
|
|
* \param Builder The DIBuilder.
|
|
* \param Tag A unique tag for this type.
|
|
* \param Name Type name.
|
|
* \param NameLen Length of type name.
|
|
* \param Scope Type scope.
|
|
* \param File File where this type is defined.
|
|
* \param Line Line number where this type is defined.
|
|
* \param RuntimeLang Indicates runtime version for languages like
|
|
* Objective-C.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param Flags Flags.
|
|
* \param UniqueIdentifier A unique identifier for the type.
|
|
* \param UniqueIdentifierLen Length of the unique identifier.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateReplaceableCompositeType(
|
|
LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
|
|
unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
|
|
LLVMDIFlags Flags, const char *UniqueIdentifier,
|
|
size_t UniqueIdentifierLen);
|
|
|
|
/**
|
|
* Create debugging information entry for a bit field member.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope Member scope.
|
|
* \param Name Member name.
|
|
* \param NameLen Length of member name.
|
|
* \param File File where this member is defined.
|
|
* \param LineNumber Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param OffsetInBits Member offset.
|
|
* \param StorageOffsetInBits Member storage offset.
|
|
* \param Flags Flags to encode member attribute.
|
|
* \param Type Parent type.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope,
|
|
const char *Name, size_t NameLen,
|
|
LLVMMetadataRef File, unsigned LineNumber,
|
|
uint64_t SizeInBits,
|
|
uint64_t OffsetInBits,
|
|
uint64_t StorageOffsetInBits,
|
|
LLVMDIFlags Flags, LLVMMetadataRef Type);
|
|
|
|
/**
|
|
* Create debugging information entry for a class.
|
|
* \param Scope Scope in which this class is defined.
|
|
* \param Name Class name.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param File File where this member is defined.
|
|
* \param LineNumber Line number.
|
|
* \param SizeInBits Member size.
|
|
* \param AlignInBits Member alignment.
|
|
* \param OffsetInBits Member offset.
|
|
* \param Flags Flags to encode member attribute, e.g. private.
|
|
* \param DerivedFrom Debug info of the base class of this type.
|
|
* \param Elements Class members.
|
|
* \param NumElements Number of class elements.
|
|
* \param VTableHolder Debug info of the base class that contains vtable
|
|
* for this type. This is used in
|
|
* DW_AT_containing_type. See DWARF documentation
|
|
* for more info.
|
|
* \param TemplateParamsNode Template type parameters.
|
|
* \param UniqueIdentifier A unique identifier for the type.
|
|
* \param UniqueIdentifierLen Length of the unique identifier.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Scope, const char *Name, size_t NameLen,
|
|
LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
|
|
uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
|
|
LLVMMetadataRef DerivedFrom,
|
|
LLVMMetadataRef *Elements, unsigned NumElements,
|
|
LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode,
|
|
const char *UniqueIdentifier, size_t UniqueIdentifierLen);
|
|
|
|
/**
|
|
* Create a uniqued DIType* clone with FlagArtificial set.
|
|
* \param Builder The DIBuilder.
|
|
* \param Type The underlying type.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef Type);
|
|
|
|
/**
|
|
* Get the name of this DIType.
|
|
* \param DType The DIType.
|
|
* \param Length The length of the returned string.
|
|
*
|
|
* @see DIType::getName()
|
|
*/
|
|
const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length);
|
|
|
|
/**
|
|
* Get the size of this DIType in bits.
|
|
* \param DType The DIType.
|
|
*
|
|
* @see DIType::getSizeInBits()
|
|
*/
|
|
uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType);
|
|
|
|
/**
|
|
* Get the offset of this DIType in bits.
|
|
* \param DType The DIType.
|
|
*
|
|
* @see DIType::getOffsetInBits()
|
|
*/
|
|
uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType);
|
|
|
|
/**
|
|
* Get the alignment of this DIType in bits.
|
|
* \param DType The DIType.
|
|
*
|
|
* @see DIType::getAlignInBits()
|
|
*/
|
|
uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType);
|
|
|
|
/**
|
|
* Get the source line where this DIType is declared.
|
|
* \param DType The DIType.
|
|
*
|
|
* @see DIType::getLine()
|
|
*/
|
|
unsigned LLVMDITypeGetLine(LLVMMetadataRef DType);
|
|
|
|
/**
|
|
* Get the flags associated with this DIType.
|
|
* \param DType The DIType.
|
|
*
|
|
* @see DIType::getFlags()
|
|
*/
|
|
LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType);
|
|
|
|
/**
|
|
* Create a descriptor for a value range.
|
|
* \param Builder The DIBuilder.
|
|
* \param LowerBound Lower bound of the subrange, e.g. 0 for C, 1 for Fortran.
|
|
* \param Count Count of elements in the subrange.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Builder,
|
|
int64_t LowerBound,
|
|
int64_t Count);
|
|
|
|
/**
|
|
* Create an array of DI Nodes.
|
|
* \param Builder The DIBuilder.
|
|
* \param Data The DI Node elements.
|
|
* \param NumElements Number of DI Node elements.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder,
|
|
LLVMMetadataRef *Data,
|
|
size_t NumElements);
|
|
|
|
/**
|
|
* Create a new descriptor for the specified variable which has a complex
|
|
* address expression for its address.
|
|
* \param Builder The DIBuilder.
|
|
* \param Addr An array of complex address operations.
|
|
* \param Length Length of the address operation array.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder,
|
|
int64_t *Addr, size_t Length);
|
|
|
|
/**
|
|
* Create a new descriptor for the specified variable that does not have an
|
|
* address, but does have a constant value.
|
|
* \param Builder The DIBuilder.
|
|
* \param Value The constant value.
|
|
*/
|
|
LLVMMetadataRef
|
|
LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder,
|
|
int64_t Value);
|
|
|
|
/**
|
|
* Create a new descriptor for the specified variable.
|
|
* \param Scope Variable scope.
|
|
* \param Name Name of the variable.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param Linkage Mangled name of the variable.
|
|
* \param LinkLen The length of the C string passed to \c Linkage.
|
|
* \param File File where this variable is defined.
|
|
* \param LineNo Line number.
|
|
* \param Ty Variable Type.
|
|
* \param LocalToUnit Boolean flag indicate whether this variable is
|
|
* externally visible or not.
|
|
* \param Expr The location of the global relative to the attached
|
|
* GlobalVariable.
|
|
* \param Decl Reference to the corresponding declaration.
|
|
* variables.
|
|
* \param AlignInBits Variable alignment(or 0 if no alignment attr was
|
|
* specified)
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, const char *Linkage, size_t LinkLen, LLVMMetadataRef File,
|
|
unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
|
|
LLVMMetadataRef Expr, LLVMMetadataRef Decl, uint32_t AlignInBits);
|
|
|
|
/**
|
|
* Retrieves the \c DIVariable associated with this global variable expression.
|
|
* \param GVE The global variable expression.
|
|
*
|
|
* @see llvm::DIGlobalVariableExpression::getVariable()
|
|
*/
|
|
LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE);
|
|
|
|
/**
|
|
* Retrieves the \c DIExpression associated with this global variable expression.
|
|
* \param GVE The global variable expression.
|
|
*
|
|
* @see llvm::DIGlobalVariableExpression::getExpression()
|
|
*/
|
|
LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression(
|
|
LLVMMetadataRef GVE);
|
|
|
|
/**
|
|
* Get the metadata of the file associated with a given variable.
|
|
* \param Var The variable object.
|
|
*
|
|
* @see DIVariable::getFile()
|
|
*/
|
|
LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var);
|
|
|
|
/**
|
|
* Get the metadata of the scope associated with a given variable.
|
|
* \param Var The variable object.
|
|
*
|
|
* @see DIVariable::getScope()
|
|
*/
|
|
LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var);
|
|
|
|
/**
|
|
* Get the source line where this \c DIVariable is declared.
|
|
* \param Var The DIVariable.
|
|
*
|
|
* @see DIVariable::getLine()
|
|
*/
|
|
unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var);
|
|
|
|
/**
|
|
* Create a new temporary \c MDNode. Suitable for use in constructing cyclic
|
|
* \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
|
|
* and must be manually deleted with \c LLVMDisposeTemporaryMDNode.
|
|
* \param Ctx The context in which to construct the temporary node.
|
|
* \param Data The metadata elements.
|
|
* \param NumElements Number of metadata elements.
|
|
*/
|
|
LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
|
|
size_t NumElements);
|
|
|
|
/**
|
|
* Deallocate a temporary node.
|
|
*
|
|
* Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining
|
|
* references will be reset.
|
|
* \param TempNode The temporary metadata node.
|
|
*/
|
|
void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode);
|
|
|
|
/**
|
|
* Replace all uses of temporary metadata.
|
|
* \param TempTargetMetadata The temporary metadata node.
|
|
* \param Replacement The replacement metadata node.
|
|
*/
|
|
void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata,
|
|
LLVMMetadataRef Replacement);
|
|
|
|
/**
|
|
* Create a new descriptor for the specified global variable that is temporary
|
|
* and meant to be RAUWed.
|
|
* \param Scope Variable scope.
|
|
* \param Name Name of the variable.
|
|
* \param NameLen The length of the C string passed to \c Name.
|
|
* \param Linkage Mangled name of the variable.
|
|
* \param LnkLen The length of the C string passed to \c Linkage.
|
|
* \param File File where this variable is defined.
|
|
* \param LineNo Line number.
|
|
* \param Ty Variable Type.
|
|
* \param LocalToUnit Boolean flag indicate whether this variable is
|
|
* externally visible or not.
|
|
* \param Decl Reference to the corresponding declaration.
|
|
* \param AlignInBits Variable alignment(or 0 if no alignment attr was
|
|
* specified)
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateTempGlobalVariableFwdDecl(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, const char *Linkage, size_t LnkLen, LLVMMetadataRef File,
|
|
unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
|
|
LLVMMetadataRef Decl, uint32_t AlignInBits);
|
|
|
|
/**
|
|
* Insert a new llvm.dbg.declare intrinsic call before the given instruction.
|
|
* \param Builder The DIBuilder.
|
|
* \param Storage The storage of the variable to declare.
|
|
* \param VarInfo The variable's debug info descriptor.
|
|
* \param Expr A complex location expression for the variable.
|
|
* \param DebugLoc Debug info location.
|
|
* \param Instr Instruction acting as a location for the new intrinsic.
|
|
*/
|
|
LLVMValueRef LLVMDIBuilderInsertDeclareBefore(
|
|
LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
|
|
LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr);
|
|
|
|
/**
|
|
* 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.
|
|
* \param Builder The DIBuilder.
|
|
* \param Storage The storage of the variable to declare.
|
|
* \param VarInfo The variable's debug info descriptor.
|
|
* \param Expr A complex location expression for the variable.
|
|
* \param DebugLoc Debug info location.
|
|
* \param Block Basic block acting as a location for the new intrinsic.
|
|
*/
|
|
LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
|
|
LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
|
|
LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block);
|
|
|
|
/**
|
|
* Insert a new llvm.dbg.value intrinsic call before the given instruction.
|
|
* \param Builder The DIBuilder.
|
|
* \param Val The value of the variable.
|
|
* \param VarInfo The variable's debug info descriptor.
|
|
* \param Expr A complex location expression for the variable.
|
|
* \param DebugLoc Debug info location.
|
|
* \param Instr Instruction acting as a location for the new intrinsic.
|
|
*/
|
|
LLVMValueRef LLVMDIBuilderInsertDbgValueBefore(LLVMDIBuilderRef Builder,
|
|
LLVMValueRef Val,
|
|
LLVMMetadataRef VarInfo,
|
|
LLVMMetadataRef Expr,
|
|
LLVMMetadataRef DebugLoc,
|
|
LLVMValueRef Instr);
|
|
|
|
/**
|
|
* 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.
|
|
* \param Builder The DIBuilder.
|
|
* \param Val The value of the variable.
|
|
* \param VarInfo The variable's debug info descriptor.
|
|
* \param Expr A complex location expression for the variable.
|
|
* \param DebugLoc Debug info location.
|
|
* \param Block Basic block acting as a location for the new intrinsic.
|
|
*/
|
|
LLVMValueRef LLVMDIBuilderInsertDbgValueAtEnd(LLVMDIBuilderRef Builder,
|
|
LLVMValueRef Val,
|
|
LLVMMetadataRef VarInfo,
|
|
LLVMMetadataRef Expr,
|
|
LLVMMetadataRef DebugLoc,
|
|
LLVMBasicBlockRef Block);
|
|
|
|
/**
|
|
* Create a new descriptor for a local auto variable.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope The local scope the variable is declared in.
|
|
* \param Name Variable name.
|
|
* \param NameLen Length of variable name.
|
|
* \param File File where this variable is defined.
|
|
* \param LineNo Line number.
|
|
* \param Ty Metadata describing the type of the variable.
|
|
* \param AlwaysPreserve If true, this descriptor will survive optimizations.
|
|
* \param Flags Flags.
|
|
* \param AlignInBits Variable alignment.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateAutoVariable(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
|
|
LLVMBool AlwaysPreserve, LLVMDIFlags Flags, uint32_t AlignInBits);
|
|
|
|
/**
|
|
* Create a new descriptor for a function parameter variable.
|
|
* \param Builder The DIBuilder.
|
|
* \param Scope The local scope the variable is declared in.
|
|
* \param Name Variable name.
|
|
* \param NameLen Length of variable name.
|
|
* \param ArgNo Unique argument number for this variable; starts at 1.
|
|
* \param File File where this variable is defined.
|
|
* \param LineNo Line number.
|
|
* \param Ty Metadata describing the type of the variable.
|
|
* \param AlwaysPreserve If true, this descriptor will survive optimizations.
|
|
* \param Flags Flags.
|
|
*/
|
|
LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
|
|
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
|
size_t NameLen, unsigned ArgNo, LLVMMetadataRef File, unsigned LineNo,
|
|
LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags);
|
|
|
|
/**
|
|
* Get the metadata of the subprogram attached to a function.
|
|
*
|
|
* @see llvm::Function::getSubprogram()
|
|
*/
|
|
LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
|
|
|
|
/**
|
|
* Set the subprogram attached to a function.
|
|
*
|
|
* @see llvm::Function::setSubprogram()
|
|
*/
|
|
void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
|
|
|
|
/**
|
|
* Get the line associated with a given subprogram.
|
|
* \param Subprogram The subprogram object.
|
|
*
|
|
* @see DISubprogram::getLine()
|
|
*/
|
|
unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram);
|
|
|
|
/**
|
|
* Get the debug location for the given instruction.
|
|
*
|
|
* @see llvm::Instruction::getDebugLoc()
|
|
*/
|
|
LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst);
|
|
|
|
/**
|
|
* Set the debug location for the given instruction.
|
|
*
|
|
* To clear the location metadata of the given instruction, pass NULL to \p Loc.
|
|
*
|
|
* @see llvm::Instruction::setDebugLoc()
|
|
*/
|
|
void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, LLVMMetadataRef Loc);
|
|
|
|
/**
|
|
* Obtain the enumerated type of a Metadata instance.
|
|
*
|
|
* @see llvm::Metadata::getMetadataID()
|
|
*/
|
|
LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata);
|
|
|
|
LLVM_C_EXTERN_C_END
|
|
|
|
#endif
|