DIBuilder.h revision 6172f0298391e00cb669cc246e70ae2531f2cdec
116eeb6f5ebc978b03745177b9ac82684ab1c6932Bill Wendling//===--- llvm/DIBuilder.h - Debug Information Builder -----------*- C++ -*-===// 235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// 335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// The LLVM Compiler Infrastructure 435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// 535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// This file is distributed under the University of Illinois Open Source 635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// License. See LICENSE.TXT for details. 735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// 835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//===----------------------------------------------------------------------===// 935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// 1035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// This file defines a DIBuilder that is useful for creating debugging 1135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// information entries in LLVM IR form. 1235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel// 1335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//===----------------------------------------------------------------------===// 1435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_DIBUILDER_H 16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_DIBUILDER_H 1735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 18685501836bc60f53892854253b5bbea6c48b6d7fJay Foad#include "llvm/ADT/ArrayRef.h" 1935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#include "llvm/ADT/StringRef.h" 20255f89faee13dc491cb64fbeae3c763e7e2ea4e6Chandler Carruth#include "llvm/Support/DataTypes.h" 2135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 2235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patelnamespace llvm { 23fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class BasicBlock; 24fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class Instruction; 25fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class Function; 2635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class Module; 27fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class Value; 2835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class LLVMContext; 2935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class MDNode; 3035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class StringRef; 312ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie class DIBasicType; 32d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie class DICompositeType; 33d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie class DIDerivedType; 3435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIDescriptor; 3535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIFile; 3635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIEnumerator; 3735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIType; 38fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DIArray; 39fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DIGlobalVariable; 40fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DINameSpace; 41fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DIVariable; 4243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel class DISubrange; 436618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher class DILexicalBlockFile; 4443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel class DILexicalBlock; 4544498a640daa827220bc4758770190318f0ec69fDevang Patel class DISubprogram; 467e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel class DITemplateTypeParameter; 47e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel class DITemplateValueParameter; 481ea02d467a311b4846b942377d0b00fde987be65Devang Patel class DIObjCProperty; 4935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 5035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIBuilder { 5135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel private: 5235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel Module &M; 5335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel LLVMContext & VMContext; 5435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel MDNode *TheCU; 5535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 5694c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempEnumTypes; 5794c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempRetainTypes; 5894c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempSubprograms; 5994c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempGVs; 6094c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel 61fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *DeclareFn; // llvm.dbg.declare 62fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *ValueFn; // llvm.dbg.value 63fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 6494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllEnumTypes; 6594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllRetainTypes; 6694c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllSubprograms; 6794c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllGVs; 6894c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel 699f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper DIBuilder(const DIBuilder &) LLVM_DELETED_FUNCTION; 709f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper void operator=(const DIBuilder &) LLVM_DELETED_FUNCTION; 7135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 7235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel public: 7335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel explicit DIBuilder(Module &M); 7435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel const MDNode *getCU() { return TheCU; } 75dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel enum ComplexAddrKind { OpPlus=1, OpDeref }; 7635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 776326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel /// finalize - Construct any deferred debug info descriptors. 786326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel void finalize(); 796326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel 8050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createCompileUnit - A CompileUnit provides an anchor for all debugging 8135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// information generated during this instance of compilation. 822c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Lang Source programming language, eg. dwarf::DW_LANG_C99 832c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param File File name 842c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Dir Directory 852c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Producer String identify producer of debugging information. 862c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Usuall this is a compiler version string. 872c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param isOptimized A boolean flag which indicates whether optimization 882c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// is ON or not. 892c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Flags This string lists command line options. This string is 902c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// directly embedded in debug info output which may be used 912c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// by a tool analyzing generated debugging information. 922c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param RV This indicates runtime version for languages like 932c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Objective-C. 94e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher /// @param SplitName The name of the file that we'll split debug info out 95e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher /// into. 9650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir, 97e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher StringRef Producer, bool isOptimized, 98e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher StringRef Flags, unsigned RV, 99e4b67906d3cc5ea365359f9b034189aaa51ca1e9Eric Christopher StringRef SplitName = StringRef()); 10035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 10150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFile - Create a file descriptor to hold debugging information 10235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// for a file. 10350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIFile createFile(StringRef Filename, StringRef Directory); 10435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 10550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerator - Create a single enumerator value. 10650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIEnumerator createEnumerator(StringRef Name, uint64_t Val); 10735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 108734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel /// createNullPtrType - Create C++0x nullptr type. 109734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel DIType createNullPtrType(StringRef Name); 110734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel 11150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createBasicType - Create debugging information entry for a basic 1122c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// type. 1132c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Name Type name. 1142c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param SizeInBits Size of the type. 1152c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param AlignInBits Type alignment. 1162c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float. 1172ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie DIBasicType createBasicType(StringRef Name, uint64_t SizeInBits, 1182ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie uint64_t AlignInBits, unsigned Encoding); 11935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createQualifiedType - Create debugging information entry for a qualified 12135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// type, e.g. 'const int'. 1222c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Tag Tag identifing type, e.g. dwarf::TAG_volatile_type 1232c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param FromTy Base Type. 124d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createQualifiedType(unsigned Tag, DIType FromTy); 12535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createPointerType - Create debugging information entry for a pointer. 127fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param PointeeTy Type pointed by this pointer. 128fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Size. 129fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Alignment. (optional) 130fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Pointer type name. (optional) 131d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType 132d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie createPointerType(DIType PointeeTy, uint64_t SizeInBits, 133d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t AlignInBits = 0, StringRef Name = StringRef()); 13435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 13562fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie /// \brief Create debugging information entry for a pointer to member. 13662fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie /// @param PointeeTy Type pointed to by this pointer. 13762fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie /// @param Class Type for which this pointer points to members of. 138d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createMemberPointerType(DIType PointeeTy, DIType Class); 13962fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie 14050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createReferenceType - Create debugging information entry for a c++ 141791e629deef7e4a410e67527da26405916415d3aEric Christopher /// style reference or rvalue reference type. 142d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createReferenceType(unsigned Tag, DIType RTy); 14335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTypedef - Create debugging information entry for a typedef. 145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 146fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Typedef name. 147fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this type is defined. 148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 149da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel /// @param Context The surrounding context for the typedef. 150d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createTypedef(DIType Ty, StringRef Name, DIFile File, 151d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie unsigned LineNo, DIDescriptor Context); 15235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFriend - Create debugging information entry for a 'friend'. 15450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createFriend(DIType Ty, DIType FriendTy); 15535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createInheritance - Create debugging information entry to establish 1572c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// inheritance relationship between two types. 158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseTy Base type. Ty is inherits from base. 160fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseOffset Base offset. 161fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to describe inheritance attribute, 162fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// e.g. private 163d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createInheritance(DIType Ty, DIType BaseTy, 164d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t BaseOffset, unsigned Flags); 16535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 16650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMemberType - Create debugging information entry for a member. 167fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel /// @param Scope Member scope. 168fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Member name. 169fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this member is defined. 170fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 171fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Member size. 172fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Member alignment. 173fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param OffsetInBits Member offset. 174fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 175fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Parent type. 176d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType 177d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie createMemberType(DIDescriptor Scope, StringRef Name, DIFile File, 178d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie unsigned LineNo, uint64_t SizeInBits, uint64_t AlignInBits, 179d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t OffsetInBits, unsigned Flags, DIType Ty); 18035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 1816b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// createStaticMemberType - Create debugging information entry for a 1826b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// C++ static data member. 1836b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Scope Member scope. 1846b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Name Member name. 1856b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param File File where this member is declared. 1866b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param LineNo Line number. 1876b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Ty Type of the static member. 1886b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Flags Flags to encode member attribute, e.g. private. 1896b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Val Const initializer of the member. 1906b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher DIType createStaticMemberType(DIDescriptor Scope, StringRef Name, 1916b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher DIFile File, unsigned LineNo, DIType Ty, 1926b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher unsigned Flags, llvm::Value *Val); 1936b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher 194e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 195e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// instance variable. 196e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Name Member name. 197e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param File File where this member is defined. 198e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param LineNo Line number. 199e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SizeInBits Member size. 200e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param AlignInBits Member alignment. 201e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param OffsetInBits Member offset. 202e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 203e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Ty Parent type. 204d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer /// @param PropertyName Name of the Objective C property associated with 205e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// this ivar. 206a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param PropertyGetterName Name of the Objective C property getter 207a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// selector. 208a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param PropertySetterName Name of the Objective C property setter 209a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// selector. 210e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyAttributes Objective C property attributes. 211e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 212e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned LineNo, uint64_t SizeInBits, 213e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 214e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned Flags, DIType Ty, 215e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyName = StringRef(), 216e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyGetterName = StringRef(), 217e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertySetterName = StringRef(), 218e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned PropertyAttributes = 0); 219e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel 2206588abf377b7381274236e651462ec83052f6013Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 2216588abf377b7381274236e651462ec83052f6013Devang Patel /// instance variable. 2226588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Name Member name. 2236588abf377b7381274236e651462ec83052f6013Devang Patel /// @param File File where this member is defined. 2246588abf377b7381274236e651462ec83052f6013Devang Patel /// @param LineNo Line number. 2256588abf377b7381274236e651462ec83052f6013Devang Patel /// @param SizeInBits Member size. 2266588abf377b7381274236e651462ec83052f6013Devang Patel /// @param AlignInBits Member alignment. 2276588abf377b7381274236e651462ec83052f6013Devang Patel /// @param OffsetInBits Member offset. 2286588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 2296588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Ty Parent type. 230a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param PropertyNode Property associated with this ivar. 2316588abf377b7381274236e651462ec83052f6013Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 2326588abf377b7381274236e651462ec83052f6013Devang Patel unsigned LineNo, uint64_t SizeInBits, 2336588abf377b7381274236e651462ec83052f6013Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2346588abf377b7381274236e651462ec83052f6013Devang Patel unsigned Flags, DIType Ty, 2356588abf377b7381274236e651462ec83052f6013Devang Patel MDNode *PropertyNode); 2366588abf377b7381274236e651462ec83052f6013Devang Patel 2371ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// createObjCProperty - Create debugging information entry for Objective-C 2381ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// property. 2391ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param Name Property name. 240b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param File File where this property is defined. 241b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param LineNumber Line number. 2421ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param GetterName Name of the Objective C property getter selector. 2431ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param SetterName Name of the Objective C property setter selector. 2441ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param PropertyAttributes Objective C property attributes. 245b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param Ty Type. 246b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher DIObjCProperty createObjCProperty(StringRef Name, 24717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling DIFile File, unsigned LineNumber, 24817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StringRef GetterName, 24917689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StringRef SetterName, 25017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling unsigned PropertyAttributes, 25117689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling DIType Ty); 252b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher 25350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createClassType - Create debugging information entry for a class. 2540a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Scope Scope in which this class is defined. 2550a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Name class name. 2560a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param File File where this member is defined. 257a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 2580a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param SizeInBits Member size. 2590a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param AlignInBits Member alignment. 2600a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param OffsetInBits Member offset. 2610a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Flags Flags to encode member attribute, e.g. private 2620a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Elements class members. 2630a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param VTableHolder Debug info of the base class that contains vtable 2640a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for this type. This is used in 2650a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// DW_AT_containing_type. See DWARF documentation 2660a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for more info. 2677e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param TemplateParms Template type parameters. 26850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File, 2690a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned LineNumber, uint64_t SizeInBits, 2700a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2710a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned Flags, DIType DerivedFrom, 2727e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DIArray Elements, MDNode *VTableHolder = 0, 2737e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *TemplateParms = 0); 2740a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel 27550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStructType - Create debugging information entry for a struct. 27643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this struct is defined. 27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Struct name. 27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 279a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 28143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 28243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 28343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Struct elements. 28443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 2856172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie DICompositeType createStructType(DIDescriptor Scope, StringRef Name, 2866172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie DIFile File, unsigned LineNumber, 2876172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie uint64_t SizeInBits, uint64_t AlignInBits, 2886172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie unsigned Flags, DIType DerivedFrom, 2896172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie DIArray Elements, unsigned RunTimeLang = 0, 2906172f0298391e00cb669cc246e70ae2531f2cdecDavid Blaikie MDNode *VTableHolder = 0); 291fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 29250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnionType - Create debugging information entry for an union. 29343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this union is defined. 29443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 29543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 296a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 29743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 29843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 29943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 30043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Union elements. 30143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 302d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createUnionType( 303d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber, 304d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t SizeInBits, uint64_t AlignInBits, unsigned Flags, 305d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIArray Elements, unsigned RunTimeLang = 0); 30643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 30750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateTypeParameter - Create debugging information for template 3087e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// type parameter. 309e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 3107e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Name Type parameter name. 3117e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Ty Parameter type. 3127e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param File File where this type parameter is defined. 3137e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param LineNo Line number. 3147e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param ColumnNo Column Number. 3157e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DITemplateTypeParameter 31650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 3177e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *File = 0, unsigned LineNo = 0, 3187e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel unsigned ColumnNo = 0); 3197e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel 32050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateValueParameter - Create debugging information for template 321e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// value parameter. 322e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 323e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Name Value parameter name. 324e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Ty Parameter type. 325e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Value Constant parameter value. 326e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param File File where this type parameter is defined. 327e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param LineNo Line number. 328e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param ColumnNo Column Number. 329e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel DITemplateValueParameter 33050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 331e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel uint64_t Value, 332e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel MDNode *File = 0, unsigned LineNo = 0, 333e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel unsigned ColumnNo = 0); 334e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel 33550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArrayType - Create debugging information entry for an array. 33643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 33743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 33843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 33943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 340d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createArrayType(uint64_t Size, uint64_t AlignInBits, 341d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIType Ty, DIArray Subscripts); 34243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createVectorType - Create debugging information entry for a vector type. 34443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 34543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 34643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 34743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 34850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createVectorType(uint64_t Size, uint64_t AlignInBits, 34943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 35043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 35150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerationType - Create debugging information entry for an 35243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// enumeration. 35343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this enumeration is defined. 35443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 35543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 356a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 35743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 35843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 35943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Enumeration elements. 360d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createEnumerationType( 361d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber, 362d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t SizeInBits, uint64_t AlignInBits, DIArray Elements, 363d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIType ClassType); 36443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 36550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createSubroutineType - Create subroutine type. 366a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param File File in which this subroutine is defined. 367a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param ParameterTypes An array of subroutine parameter types. This 368a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// includes return type at 0th index. 369d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createSubroutineType(DIFile File, DIArray ParameterTypes); 37043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 37150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArtificialType - Create a new DIType with "artificial" flag set. 37250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArtificialType(DIType Ty); 373fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 374e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher /// createObjectPointerType - Create a new DIType with the "object pointer" 375e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher /// flag set. 376e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher DIType createObjectPointerType(DIType Ty); 377e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher 37850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemporaryType - Create a temporary forward-declared type. 37950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(); 38050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(DIFile F); 381fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 3824fe345729285ae634c657ab854057464d03220f7Eric Christopher /// createForwardDecl - Create a temporary forward-declared type. 383216432df5ac897327a0cb6323f08811910481038Eric Christopher DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope, 384ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman DIFile F, unsigned Line, unsigned RuntimeLang = 0, 385ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman uint64_t SizeInBits = 0, uint64_t AlignInBits = 0); 3864fe345729285ae634c657ab854057464d03220f7Eric Christopher 38750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// retainType - Retain DIType in a module even if it is not referenced 38843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// through debug info anchors. 38950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void retainType(DIType T); 39043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 39150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnspecifiedParameter - Create unspeicified type descriptor 39243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// for a subroutine type. 39350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIDescriptor createUnspecifiedParameter(); 39443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 39550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateArray - Get a DIArray, create one if required. 396685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIArray getOrCreateArray(ArrayRef<Value *> Elements); 397fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 39850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateSubrange - Create a descriptor for a value range. This 39943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// implicitly uniques the values returned. 4009493dae613847b01b79914502f337814fe3e00acBill Wendling DISubrange getOrCreateSubrange(int64_t Lo, int64_t Count); 40143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 40250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createGlobalVariable - Create a new descriptor for the specified global. 403fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 404fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 405fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 406fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 407fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 408fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 409fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 410fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 41150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo, 412fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 413fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 414fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 41550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStaticVariable - Create a new descriptor for the specified 416fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable. 417a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param Context Variable scope. 418fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 419a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LinkageName Mangled name of the variable. 420fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 421fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 422fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 423fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 424fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 425fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 4266b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Decl Reference to the corresponding declaration. 427fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 42850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createStaticVariable(DIDescriptor Context, StringRef Name, 429fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef LinkageName, DIFile File, unsigned LineNo, 4306b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher DIType Ty, bool isLocalToUnit, llvm::Value *Val, 4316b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher MDNode *Decl = NULL); 432fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 433fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 43450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLocalVariable - Create a new descriptor for the specified 43548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// local variable. 43648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 43748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// DW_TAG_arg_variable. 43848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Scope Variable scope. 43948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Name Variable name. 44048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param File File where this variable is defined. 44148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param LineNo Line number. 44248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Ty Variable Type 44348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param AlwaysPreserve Boolean. Set to true if debug info for this 44448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// variable should be preserved in optimized build. 44548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Flags Flags, e.g. artificial variable. 446e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 447e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 44850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope, 44948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel StringRef Name, 45048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIFile File, unsigned LineNo, 45148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIType Ty, bool AlwaysPreserve = false, 452e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned Flags = 0, 453e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned ArgNo = 0); 45448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 45548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 45650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createComplexVariable - Create a new descriptor for the specified 457fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable which has a complex address expression for its address. 458fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 459fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// DW_TAG_arg_variable. 460fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Variable scope. 461fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Variable name. 462a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param F File where this variable is defined. 463fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type 465685501836bc60f53892854253b5bbea6c48b6d7fJay Foad /// @param Addr An array of complex address operations. 466e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 467e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 46850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope, 469fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name, DIFile F, unsigned LineNo, 470685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIType Ty, ArrayRef<Value *> Addr, 471685501836bc60f53892854253b5bbea6c48b6d7fJay Foad unsigned ArgNo = 0); 472fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 47350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFunction - Create a new descriptor for the specified subprogram. 47444498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 47544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 47644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 47744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 47844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 47944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 48044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 48144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 48244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 4836126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher /// @param ScopeLine Set to the beginning of the scope this starts 48444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 48544498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 48644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 48744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 488da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 48950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createFunction(DIDescriptor Scope, StringRef Name, 49044498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 49144498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 49244498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 49344498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 4946126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher unsigned ScopeLine, 49544498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 49644498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 497da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 4985e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *TParam = 0, 4995e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *Decl = 0); 50044498a640daa827220bc4758770190318f0ec69fDevang Patel 50150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMethod - Create a new descriptor for the specified C++ method. 50244498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 50344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 50444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 50544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 50644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 50744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 50844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 50944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 51044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 5110d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad /// @param Virtuality Attributes describing virtualness. e.g. pure 51244498a640daa827220bc4758770190318f0ec69fDevang Patel /// virtual function. 51344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableIndex Index no of this method in virtual table. 51444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableHolder Type that holds vtable. 51544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 51644498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 51744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 51844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 519da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 52050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createMethod(DIDescriptor Scope, StringRef Name, 52144498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 52244498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 52344498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 52444498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 52544498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Virtuality = 0, unsigned VTableIndex = 0, 52644498a640daa827220bc4758770190318f0ec69fDevang Patel MDNode *VTableHolder = 0, 52744498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 52844498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 529da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 530da19475328ece3da19437a2e9eef035dcafa2814Devang Patel MDNode *TParam = 0); 531fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 53250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createNameSpace - This creates new descriptor for a namespace 533fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// with the specified parent scope. 534fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Namespace scope 535fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of this namespace 536fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File Source file 537fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number 53850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name, 539fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIFile File, unsigned LineNo); 540fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 541fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 5426618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// createLexicalBlockFile - This creates a descriptor for a lexical 5436618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// block with a new file attached. This merely extends the existing 5446618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// lexical block as it crosses a file. 5456618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// @param Scope Lexical block. 5466618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// @param File Source file. 5476618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher DILexicalBlockFile createLexicalBlockFile(DIDescriptor Scope, 5489f99721a1882cdef9f7cca25de7ea43627d23958Devang Patel DIFile File); 5496618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher 55050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLexicalBlock - This creates a descriptor for a lexical block 55143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// with the specified parent context. 55243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Parent lexical scope. 55343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File Source file 55443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Line Line number 55543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Col Column number 55650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File, 55743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned Line, unsigned Col); 55843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 55950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 560fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 561fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 562fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 56350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 564fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 565fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 56650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 567fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 568fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 569fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 57050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 571fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 572fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 573fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 57450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 575fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 576fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 577fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 578fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 57950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 580fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 581fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 582fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 58350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 584fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 585fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 586fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 587fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 58850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 589fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 590fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 591fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 59235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel }; 59335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm 59435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 59535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif 596