mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
ae8d4fe15f
This implements the DWARF 5 feature described at http://www.dwarfstd.org/ShowIssue.php?issue=141215.1 This allows a consumer to understand whether a composite data type is trivially copyable and thus should be passed by value instead of by reference. The canonical example is being able to distinguish the following two types: // S is not trivially copyable because of the explicit destructor. struct S { ~S() {} }; // T is a POD type. struct T { ~T() = default; }; This patch adds two new (DI)flags to LLVM metadata: TypePassByValue and TypePassByReference. <rdar://problem/36034922> Differential Revision: https://reviews.llvm.org/D41743 llvm-svn: 321844
235 lines
8.2 KiB
C
235 lines
8.2 KiB
C
//===------------ 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.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_C_DEBUGINFO_H
|
|
#define LLVM_C_DEBUGINFO_H
|
|
|
|
#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,
|
|
LLVMDIFlagTypePassByValue = 1 << 22,
|
|
LLVMDIFlagTypePassByReference = 1 << 23,
|
|
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 \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.
|
|
*/
|
|
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 \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 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
|
|
|
|
#endif
|