DIBuilder.h revision d67c5cab3b770b0709dcb05256aef51b35f3f113
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. 9450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir, 952c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel StringRef Producer, 9635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel bool isOptimized, StringRef Flags, unsigned RV); 9735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFile - Create a file descriptor to hold debugging information 9935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// for a file. 10050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIFile createFile(StringRef Filename, StringRef Directory); 10135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 10250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerator - Create a single enumerator value. 10350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIEnumerator createEnumerator(StringRef Name, uint64_t Val); 10435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 105734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel /// createNullPtrType - Create C++0x nullptr type. 106734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel DIType createNullPtrType(StringRef Name); 107734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel 10850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createBasicType - Create debugging information entry for a basic 1092c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// type. 1102c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Name Type name. 1112c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param SizeInBits Size of the type. 1122c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param AlignInBits Type alignment. 1132c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float. 1142ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie DIBasicType createBasicType(StringRef Name, uint64_t SizeInBits, 1152ce067a9fb5b2d046c92519428cafa71fae81ed4David Blaikie uint64_t AlignInBits, unsigned Encoding); 11635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 11750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createQualifiedType - Create debugging information entry for a qualified 11835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// type, e.g. 'const int'. 1192c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Tag Tag identifing type, e.g. dwarf::TAG_volatile_type 1202c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param FromTy Base Type. 121d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createQualifiedType(unsigned Tag, DIType FromTy); 12235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createPointerType - Create debugging information entry for a pointer. 124fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param PointeeTy Type pointed by this pointer. 125fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Size. 126fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Alignment. (optional) 127fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Pointer type name. (optional) 128d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType 129d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie createPointerType(DIType PointeeTy, uint64_t SizeInBits, 130d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t AlignInBits = 0, StringRef Name = StringRef()); 13135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 13262fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie /// \brief Create debugging information entry for a pointer to member. 13362fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie /// @param PointeeTy Type pointed to by this pointer. 13462fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie /// @param Class Type for which this pointer points to members of. 135d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createMemberPointerType(DIType PointeeTy, DIType Class); 13662fdfb5fa7efdfd61339e4abe6fd87e60e939e58David Blaikie 13750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createReferenceType - Create debugging information entry for a c++ 138791e629deef7e4a410e67527da26405916415d3aEric Christopher /// style reference or rvalue reference type. 139d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createReferenceType(unsigned Tag, DIType RTy); 14035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTypedef - Create debugging information entry for a typedef. 142fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 143fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Typedef name. 144fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this type is defined. 145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 146da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel /// @param Context The surrounding context for the typedef. 147d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createTypedef(DIType Ty, StringRef Name, DIFile File, 148d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie unsigned LineNo, DIDescriptor Context); 14935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFriend - Create debugging information entry for a 'friend'. 15150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createFriend(DIType Ty, DIType FriendTy); 15235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createInheritance - Create debugging information entry to establish 1542c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// inheritance relationship between two types. 155fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 156fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseTy Base type. Ty is inherits from base. 157fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseOffset Base offset. 158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to describe inheritance attribute, 159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// e.g. private 160d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType createInheritance(DIType Ty, DIType BaseTy, 161d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t BaseOffset, unsigned Flags); 16235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 16350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMemberType - Create debugging information entry for a member. 164fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel /// @param Scope Member scope. 165fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Member name. 166fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this member is defined. 167fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 168fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Member size. 169fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Member alignment. 170fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param OffsetInBits Member offset. 171fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 172fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Parent type. 173d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDerivedType 174d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie createMemberType(DIDescriptor Scope, StringRef Name, DIFile File, 175d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie unsigned LineNo, uint64_t SizeInBits, uint64_t AlignInBits, 176d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t OffsetInBits, unsigned Flags, DIType Ty); 17735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 1786b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// createStaticMemberType - Create debugging information entry for a 1796b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// C++ static data member. 1806b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Scope Member scope. 1816b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Name Member name. 1826b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param File File where this member is declared. 1836b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param LineNo Line number. 1846b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Ty Type of the static member. 1856b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Flags Flags to encode member attribute, e.g. private. 1866b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Val Const initializer of the member. 1876b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher DIType createStaticMemberType(DIDescriptor Scope, StringRef Name, 1886b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher DIFile File, unsigned LineNo, DIType Ty, 1896b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher unsigned Flags, llvm::Value *Val); 1906b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher 191e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 192e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// instance variable. 193e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Name Member name. 194e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param File File where this member is defined. 195e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param LineNo Line number. 196e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SizeInBits Member size. 197e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param AlignInBits Member alignment. 198e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param OffsetInBits Member offset. 199e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 200e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Ty Parent type. 201d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer /// @param PropertyName Name of the Objective C property associated with 202e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// this ivar. 203a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param PropertyGetterName Name of the Objective C property getter 204a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// selector. 205a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param PropertySetterName Name of the Objective C property setter 206a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// selector. 207e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyAttributes Objective C property attributes. 208e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 209e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned LineNo, uint64_t SizeInBits, 210e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 211e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned Flags, DIType Ty, 212e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyName = StringRef(), 213e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyGetterName = StringRef(), 214e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertySetterName = StringRef(), 215e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned PropertyAttributes = 0); 216e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel 2176588abf377b7381274236e651462ec83052f6013Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 2186588abf377b7381274236e651462ec83052f6013Devang Patel /// instance variable. 2196588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Name Member name. 2206588abf377b7381274236e651462ec83052f6013Devang Patel /// @param File File where this member is defined. 2216588abf377b7381274236e651462ec83052f6013Devang Patel /// @param LineNo Line number. 2226588abf377b7381274236e651462ec83052f6013Devang Patel /// @param SizeInBits Member size. 2236588abf377b7381274236e651462ec83052f6013Devang Patel /// @param AlignInBits Member alignment. 2246588abf377b7381274236e651462ec83052f6013Devang Patel /// @param OffsetInBits Member offset. 2256588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 2266588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Ty Parent type. 227a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param PropertyNode Property associated with this ivar. 2286588abf377b7381274236e651462ec83052f6013Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 2296588abf377b7381274236e651462ec83052f6013Devang Patel unsigned LineNo, uint64_t SizeInBits, 2306588abf377b7381274236e651462ec83052f6013Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2316588abf377b7381274236e651462ec83052f6013Devang Patel unsigned Flags, DIType Ty, 2326588abf377b7381274236e651462ec83052f6013Devang Patel MDNode *PropertyNode); 2336588abf377b7381274236e651462ec83052f6013Devang Patel 2341ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// createObjCProperty - Create debugging information entry for Objective-C 2351ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// property. 2361ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param Name Property name. 237b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param File File where this property is defined. 238b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param LineNumber Line number. 2391ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param GetterName Name of the Objective C property getter selector. 2401ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param SetterName Name of the Objective C property setter selector. 2411ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param PropertyAttributes Objective C property attributes. 242b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param Ty Type. 243b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher DIObjCProperty createObjCProperty(StringRef Name, 24417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling DIFile File, unsigned LineNumber, 24517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StringRef GetterName, 24617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StringRef SetterName, 24717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling unsigned PropertyAttributes, 24817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling DIType Ty); 249b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher 25050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createClassType - Create debugging information entry for a class. 2510a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Scope Scope in which this class is defined. 2520a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Name class name. 2530a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param File File where this member is defined. 254a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 2550a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param SizeInBits Member size. 2560a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param AlignInBits Member alignment. 2570a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param OffsetInBits Member offset. 2580a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Flags Flags to encode member attribute, e.g. private 2590a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Elements class members. 2600a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param VTableHolder Debug info of the base class that contains vtable 2610a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for this type. This is used in 2620a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// DW_AT_containing_type. See DWARF documentation 2630a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for more info. 2647e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param TemplateParms Template type parameters. 26550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File, 2660a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned LineNumber, uint64_t SizeInBits, 2670a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2680a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned Flags, DIType DerivedFrom, 2697e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DIArray Elements, MDNode *VTableHolder = 0, 2707e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *TemplateParms = 0); 2710a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel 27250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStructType - Create debugging information entry for a struct. 27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this struct is defined. 27443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Struct name. 27543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 276a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 27943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Struct elements. 28143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 28250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File, 283fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNumber, uint64_t SizeInBits, 284fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits, unsigned Flags, 285fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 286fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 28750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnionType - Create debugging information entry for an union. 28843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this union is defined. 28943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 29043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 291a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 29243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 29343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 29443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 29543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Union elements. 29643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 297d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createUnionType( 298d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber, 299d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t SizeInBits, uint64_t AlignInBits, unsigned Flags, 300d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIArray Elements, unsigned RunTimeLang = 0); 30143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 30250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateTypeParameter - Create debugging information for template 3037e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// type parameter. 304e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 3057e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Name Type parameter name. 3067e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Ty Parameter type. 3077e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param File File where this type parameter is defined. 3087e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param LineNo Line number. 3097e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param ColumnNo Column Number. 3107e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DITemplateTypeParameter 31150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 3127e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *File = 0, unsigned LineNo = 0, 3137e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel unsigned ColumnNo = 0); 3147e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel 31550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateValueParameter - Create debugging information for template 316e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// value parameter. 317e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 318e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Name Value parameter name. 319e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Ty Parameter type. 320e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Value Constant parameter value. 321e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param File File where this type parameter is defined. 322e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param LineNo Line number. 323e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param ColumnNo Column Number. 324e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel DITemplateValueParameter 32550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 326e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel uint64_t Value, 327e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel MDNode *File = 0, unsigned LineNo = 0, 328e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel unsigned ColumnNo = 0); 329e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel 33050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArrayType - Create debugging information entry for an array. 33143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 33243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 33343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 33443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 335d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createArrayType(uint64_t Size, uint64_t AlignInBits, 336d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIType Ty, DIArray Subscripts); 33743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 33850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createVectorType - Create debugging information entry for a vector type. 33943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 34043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 34143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 34243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createVectorType(uint64_t Size, uint64_t AlignInBits, 34443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 34543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 34650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerationType - Create debugging information entry for an 34743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// enumeration. 34843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this enumeration is defined. 34943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 35043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 351a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LineNumber Line number. 35243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 35343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 35443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Enumeration elements. 355d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createEnumerationType( 356d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIDescriptor Scope, StringRef Name, DIFile File, unsigned LineNumber, 357d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie uint64_t SizeInBits, uint64_t AlignInBits, DIArray Elements, 358d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DIType ClassType); 35943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 36050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createSubroutineType - Create subroutine type. 361a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param File File in which this subroutine is defined. 362a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param ParameterTypes An array of subroutine parameter types. This 363a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// includes return type at 0th index. 364d67c5cab3b770b0709dcb05256aef51b35f3f113David Blaikie DICompositeType createSubroutineType(DIFile File, DIArray ParameterTypes); 36543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 36650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArtificialType - Create a new DIType with "artificial" flag set. 36750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArtificialType(DIType Ty); 368fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 369e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher /// createObjectPointerType - Create a new DIType with the "object pointer" 370e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher /// flag set. 371e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher DIType createObjectPointerType(DIType Ty); 372e521278f00cf5f4ea0cc4aac126df30924d3e705Eric Christopher 37350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemporaryType - Create a temporary forward-declared type. 37450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(); 37550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(DIFile F); 376fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 3774fe345729285ae634c657ab854057464d03220f7Eric Christopher /// createForwardDecl - Create a temporary forward-declared type. 378216432df5ac897327a0cb6323f08811910481038Eric Christopher DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope, 379ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman DIFile F, unsigned Line, unsigned RuntimeLang = 0, 380ce3da6f1d532c909238c14fa67cf955a404a6bc2Eli Friedman uint64_t SizeInBits = 0, uint64_t AlignInBits = 0); 3814fe345729285ae634c657ab854057464d03220f7Eric Christopher 38250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// retainType - Retain DIType in a module even if it is not referenced 38343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// through debug info anchors. 38450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void retainType(DIType T); 38543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 38650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnspecifiedParameter - Create unspeicified type descriptor 38743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// for a subroutine type. 38850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIDescriptor createUnspecifiedParameter(); 38943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 39050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateArray - Get a DIArray, create one if required. 391685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIArray getOrCreateArray(ArrayRef<Value *> Elements); 392fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 39350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateSubrange - Create a descriptor for a value range. This 39443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// implicitly uniques the values returned. 3959493dae613847b01b79914502f337814fe3e00acBill Wendling DISubrange getOrCreateSubrange(int64_t Lo, int64_t Count); 39643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 39750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createGlobalVariable - Create a new descriptor for the specified global. 398fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 399fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 400fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 401fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 402fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 403fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 404fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 405fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 40650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo, 407fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 408fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 409fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 41050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStaticVariable - Create a new descriptor for the specified 411fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable. 412a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param Context Variable scope. 413fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 414a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param LinkageName Mangled name of the variable. 415fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 416fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 417fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 418fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 419fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 420fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 4216b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher /// @param Decl Reference to the corresponding declaration. 422fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 42350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createStaticVariable(DIDescriptor Context, StringRef Name, 424fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef LinkageName, DIFile File, unsigned LineNo, 4256b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher DIType Ty, bool isLocalToUnit, llvm::Value *Val, 4266b6061f01171bd3d4e32022efa45428d4f9941eeEric Christopher MDNode *Decl = NULL); 427fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 428fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 42950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLocalVariable - Create a new descriptor for the specified 43048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// local variable. 43148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 43248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// DW_TAG_arg_variable. 43348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Scope Variable scope. 43448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Name Variable name. 43548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param File File where this variable is defined. 43648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param LineNo Line number. 43748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Ty Variable Type 43848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param AlwaysPreserve Boolean. Set to true if debug info for this 43948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// variable should be preserved in optimized build. 44048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Flags Flags, e.g. artificial variable. 441e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 442e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 44350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope, 44448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel StringRef Name, 44548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIFile File, unsigned LineNo, 44648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIType Ty, bool AlwaysPreserve = false, 447e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned Flags = 0, 448e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned ArgNo = 0); 44948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 45048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 45150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createComplexVariable - Create a new descriptor for the specified 452fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable which has a complex address expression for its address. 453fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 454fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// DW_TAG_arg_variable. 455fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Variable scope. 456fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Variable name. 457a00b80b04c5edb08639c1c6b32e9231fd8b066f7Dmitri Gribenko /// @param F File where this variable is defined. 458fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 459fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type 460685501836bc60f53892854253b5bbea6c48b6d7fJay Foad /// @param Addr An array of complex address operations. 461e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 462e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 46350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope, 464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name, DIFile F, unsigned LineNo, 465685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIType Ty, ArrayRef<Value *> Addr, 466685501836bc60f53892854253b5bbea6c48b6d7fJay Foad unsigned ArgNo = 0); 467fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 46850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFunction - Create a new descriptor for the specified subprogram. 46944498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 47044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 47144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 47244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 47344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 47444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 47544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 47644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 47744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 4786126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher /// @param ScopeLine Set to the beginning of the scope this starts 47944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 48044498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 48144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 48244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 483da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 48450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createFunction(DIDescriptor Scope, StringRef Name, 48544498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 48644498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 48744498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 48844498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 4896126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher unsigned ScopeLine, 49044498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 49144498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 492da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 4935e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *TParam = 0, 4945e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *Decl = 0); 49544498a640daa827220bc4758770190318f0ec69fDevang Patel 49650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMethod - Create a new descriptor for the specified C++ method. 49744498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 49844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 49944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 50044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 50144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 50244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 50344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 50444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 50544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 5060d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad /// @param Virtuality Attributes describing virtualness. e.g. pure 50744498a640daa827220bc4758770190318f0ec69fDevang Patel /// virtual function. 50844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableIndex Index no of this method in virtual table. 50944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableHolder Type that holds vtable. 51044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 51144498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 51244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 51344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 514da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 51550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createMethod(DIDescriptor Scope, StringRef Name, 51644498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 51744498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 51844498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 51944498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 52044498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Virtuality = 0, unsigned VTableIndex = 0, 52144498a640daa827220bc4758770190318f0ec69fDevang Patel MDNode *VTableHolder = 0, 52244498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 52344498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 524da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 525da19475328ece3da19437a2e9eef035dcafa2814Devang Patel MDNode *TParam = 0); 526fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 52750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createNameSpace - This creates new descriptor for a namespace 528fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// with the specified parent scope. 529fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Namespace scope 530fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of this namespace 531fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File Source file 532fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number 53350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name, 534fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIFile File, unsigned LineNo); 535fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 536fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 5376618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// createLexicalBlockFile - This creates a descriptor for a lexical 5386618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// block with a new file attached. This merely extends the existing 5396618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// lexical block as it crosses a file. 5406618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// @param Scope Lexical block. 5416618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// @param File Source file. 5426618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher DILexicalBlockFile createLexicalBlockFile(DIDescriptor Scope, 5439f99721a1882cdef9f7cca25de7ea43627d23958Devang Patel DIFile File); 5446618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher 54550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLexicalBlock - This creates a descriptor for a lexical block 54643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// with the specified parent context. 54743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Parent lexical scope. 54843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File Source file 54943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Line Line number 55043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Col Column number 55150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File, 55243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned Line, unsigned Col); 55343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 55450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 555fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 556fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 557fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 55850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 559fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 560fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 56150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 562fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 563fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 564fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 56550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 566fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 567fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 568fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 56950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 570fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 571fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 572fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 573fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 57450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 575fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 576fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 577fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 57850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 579fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 580fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 581fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 582fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 58350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 584fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 585fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 586fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 58735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel }; 58835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm 58935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 59035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif 591