DIBuilder.h revision 734a67cda5a02be1654a2f89b811d7b6cbe3f5e5
135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel//===--- llvm/Analysis/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 1535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#ifndef LLVM_ANALYSIS_DIBUILDER_H 1635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#define LLVM_ANALYSIS_DIBUILDER_H 1735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 181f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h" 19685501836bc60f53892854253b5bbea6c48b6d7fJay Foad#include "llvm/ADT/ArrayRef.h" 2035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#include "llvm/ADT/StringRef.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; 3135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIDescriptor; 3235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIFile; 3335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIEnumerator; 3435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIType; 35fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DIArray; 36fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DIGlobalVariable; 37fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DINameSpace; 38fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel class DIVariable; 3943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel class DISubrange; 4043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel class DILexicalBlock; 4144498a640daa827220bc4758770190318f0ec69fDevang Patel class DISubprogram; 427e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel class DITemplateTypeParameter; 43e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel class DITemplateValueParameter; 4435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 4535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIBuilder { 4635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel private: 4735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel Module &M; 4835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel LLVMContext & VMContext; 4935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel MDNode *TheCU; 5035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 5194c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempEnumTypes; 5294c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempRetainTypes; 5394c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempSubprograms; 5494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempGVs; 5594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel 56fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *DeclareFn; // llvm.dbg.declare 57fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *ValueFn; // llvm.dbg.value 58fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 5994c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllEnumTypes; 6094c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllRetainTypes; 6194c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllSubprograms; 6294c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllGVs; 6394c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel 6435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel DIBuilder(const DIBuilder &); // DO NOT IMPLEMENT 6535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel void operator=(const DIBuilder &); // DO NOT IMPLEMENT 6635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 6735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel public: 6835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel explicit DIBuilder(Module &M); 6935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel const MDNode *getCU() { return TheCU; } 70dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel enum ComplexAddrKind { OpPlus=1, OpDeref }; 7135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 726326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel /// finalize - Construct any deferred debug info descriptors. 736326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel void finalize(); 746326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel 7550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createCompileUnit - A CompileUnit provides an anchor for all debugging 7635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// information generated during this instance of compilation. 772c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Lang Source programming language, eg. dwarf::DW_LANG_C99 782c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param File File name 792c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Dir Directory 802c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Producer String identify producer of debugging information. 812c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Usuall this is a compiler version string. 822c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param isOptimized A boolean flag which indicates whether optimization 832c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// is ON or not. 842c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Flags This string lists command line options. This string is 852c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// directly embedded in debug info output which may be used 862c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// by a tool analyzing generated debugging information. 872c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param RV This indicates runtime version for languages like 882c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Objective-C. 8950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir, 902c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel StringRef Producer, 9135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel bool isOptimized, StringRef Flags, unsigned RV); 9235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFile - Create a file descriptor to hold debugging information 9435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// for a file. 9550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIFile createFile(StringRef Filename, StringRef Directory); 9635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerator - Create a single enumerator value. 9850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIEnumerator createEnumerator(StringRef Name, uint64_t Val); 9935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 100734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel /// createNullPtrType - Create C++0x nullptr type. 101734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel DIType createNullPtrType(StringRef Name); 102734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel 10350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createBasicType - Create debugging information entry for a basic 1042c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// type. 1052c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Name Type name. 1062c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param SizeInBits Size of the type. 1072c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param AlignInBits Type alignment. 1082c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float. 10950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createBasicType(StringRef Name, uint64_t SizeInBits, 11035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel uint64_t AlignInBits, unsigned Encoding); 11135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 11250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createQualifiedType - Create debugging information entry for a qualified 11335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// type, e.g. 'const int'. 1142c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Tag Tag identifing type, e.g. dwarf::TAG_volatile_type 1152c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param FromTy Base Type. 11650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createQualifiedType(unsigned Tag, DIType FromTy); 11735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 11850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createPointerType - Create debugging information entry for a pointer. 119fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param PointeeTy Type pointed by this pointer. 120fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Size. 121fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Alignment. (optional) 122fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Pointer type name. (optional) 12350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createPointerType(DIType PointeeTy, uint64_t SizeInBits, 124fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits = 0, 125fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name = StringRef()); 12635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createReferenceType - Create debugging information entry for a c++ 128fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// style reference. 12950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createReferenceType(DIType RTy); 13035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 13150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTypedef - Create debugging information entry for a typedef. 132fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 133fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Typedef name. 134fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this type is defined. 135fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 136da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel /// @param Context The surrounding context for the typedef. 13750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTypedef(DIType Ty, StringRef Name, DIFile File, 138da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel unsigned LineNo, DIDescriptor Context); 13935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFriend - Create debugging information entry for a 'friend'. 14150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createFriend(DIType Ty, DIType FriendTy); 14235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createInheritance - Create debugging information entry to establish 1442c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// inheritance relationship between two types. 145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 146fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseTy Base type. Ty is inherits from base. 147fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseOffset Base offset. 148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to describe inheritance attribute, 149fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// e.g. private 15050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createInheritance(DIType Ty, DIType BaseTy, uint64_t BaseOffset, 15135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel unsigned Flags); 15235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMemberType - Create debugging information entry for a member. 154fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel /// @param Scope Member scope. 155fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Member name. 156fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this member is defined. 157fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Member size. 159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Member alignment. 160fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param OffsetInBits Member offset. 161fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 162fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Parent type. 163fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel DIType createMemberType(DIDescriptor Scope, StringRef Name, DIFile File, 164fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNo, uint64_t SizeInBits, 16535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 16635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel unsigned Flags, DIType Ty); 16735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 168e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 169e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// instance variable. 170e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Name Member name. 171e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param File File where this member is defined. 172e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param LineNo Line number. 173e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SizeInBits Member size. 174e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param AlignInBits Member alignment. 175e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param OffsetInBits Member offset. 176e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 177e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Ty Parent type. 178e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyName Name of the Objective C property assoicated with 179e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// this ivar. 180e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param GetterName Name of the Objective C property getter selector. 181e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SetterName Name of the Objective C property setter selector. 182e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyAttributes Objective C property attributes. 183e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 184e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned LineNo, uint64_t SizeInBits, 185e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 186e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned Flags, DIType Ty, 187e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyName = StringRef(), 188e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyGetterName = StringRef(), 189e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertySetterName = StringRef(), 190e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned PropertyAttributes = 0); 191e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel 19250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createClassType - Create debugging information entry for a class. 1930a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Scope Scope in which this class is defined. 1940a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Name class name. 1950a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param File File where this member is defined. 1960a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param LineNo Line number. 1970a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param SizeInBits Member size. 1980a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param AlignInBits Member alignment. 1990a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param OffsetInBits Member offset. 2000a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Flags Flags to encode member attribute, e.g. private 2010a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Elements class members. 2020a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param VTableHolder Debug info of the base class that contains vtable 2030a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for this type. This is used in 2040a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// DW_AT_containing_type. See DWARF documentation 2050a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for more info. 2067e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param TemplateParms Template type parameters. 20750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File, 2080a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned LineNumber, uint64_t SizeInBits, 2090a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2100a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned Flags, DIType DerivedFrom, 2117e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DIArray Elements, MDNode *VTableHolder = 0, 2127e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *TemplateParms = 0); 2130a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel 21450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStructType - Create debugging information entry for a struct. 21543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this struct is defined. 21643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Struct name. 21743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 21843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 21943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 22043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 22143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 22243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Struct elements. 22343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 22450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File, 225fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNumber, uint64_t SizeInBits, 226fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits, unsigned Flags, 227fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 228fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 22950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnionType - Create debugging information entry for an union. 23043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this union is defined. 23143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 23243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 23343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 23443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 23543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 23643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 23743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Union elements. 23843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 23950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createUnionType(DIDescriptor Scope, StringRef Name, DIFile File, 24043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned LineNumber, uint64_t SizeInBits, 24143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t AlignInBits, unsigned Flags, 24243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 24343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 24450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateTypeParameter - Create debugging information for template 2457e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// type parameter. 246e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 2477e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Name Type parameter name. 2487e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Ty Parameter type. 2497e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param File File where this type parameter is defined. 2507e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param LineNo Line number. 2517e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param ColumnNo Column Number. 2527e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DITemplateTypeParameter 25350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 2547e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *File = 0, unsigned LineNo = 0, 2557e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel unsigned ColumnNo = 0); 2567e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel 25750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateValueParameter - Create debugging information for template 258e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// value parameter. 259e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 260e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Name Value parameter name. 261e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Ty Parameter type. 262e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Value Constant parameter value. 263e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param File File where this type parameter is defined. 264e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param LineNo Line number. 265e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param ColumnNo Column Number. 266e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel DITemplateValueParameter 26750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 268e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel uint64_t Value, 269e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel MDNode *File = 0, unsigned LineNo = 0, 270e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel unsigned ColumnNo = 0); 271e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel 27250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArrayType - Create debugging information entry for an array. 27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 27443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 27543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 27643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 27750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArrayType(uint64_t Size, uint64_t AlignInBits, 27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 27943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 28050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createVectorType - Create debugging information entry for a vector type. 28143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 28243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 28343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 28443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 28550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createVectorType(uint64_t Size, uint64_t AlignInBits, 28643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 28743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 28850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerationType - Create debugging information entry for an 28943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// enumeration. 29043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this enumeration is defined. 29143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 29243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 29343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 29443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 29543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 29643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Enumeration elements. 29750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createEnumerationType(DIDescriptor Scope, StringRef Name, 29843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIFile File, unsigned LineNumber, 29943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t SizeInBits, 30043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t AlignInBits, DIArray Elements); 30143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 30250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createSubroutineType - Create subroutine type. 30343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File in which this subroutine is defined. 30443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param ParamterTypes An array of subroutine parameter types. This 30543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// includes return type at 0th index. 30650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createSubroutineType(DIFile File, DIArray ParameterTypes); 30743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 30850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArtificialType - Create a new DIType with "artificial" flag set. 30950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArtificialType(DIType Ty); 310fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 31150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemporaryType - Create a temporary forward-declared type. 31250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(); 31350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(DIFile F); 314fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 31550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// retainType - Retain DIType in a module even if it is not referenced 31643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// through debug info anchors. 31750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void retainType(DIType T); 31843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 31950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnspecifiedParameter - Create unspeicified type descriptor 32043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// for a subroutine type. 32150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIDescriptor createUnspecifiedParameter(); 32243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 32350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateArray - Get a DIArray, create one if required. 324685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIArray getOrCreateArray(ArrayRef<Value *> Elements); 325fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 32650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateSubrange - Create a descriptor for a value range. This 32743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// implicitly uniques the values returned. 32850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubrange getOrCreateSubrange(int64_t Lo, int64_t Hi); 32943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 33050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createGlobalVariable - Create a new descriptor for the specified global. 331fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 332fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 333fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 334fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 335fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 336fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 337fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 338fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 33950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo, 340fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 341fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 342fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStaticVariable - Create a new descriptor for the specified 344fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable. 345fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Conext Variable scope. 346fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 347fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LinakgeName Mangled name of the variable. 348fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 349fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 350fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 351fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 352fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 353fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 354fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 35550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createStaticVariable(DIDescriptor Context, StringRef Name, 356fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef LinkageName, DIFile File, unsigned LineNo, 357fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 358fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 359fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 36050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLocalVariable - Create a new descriptor for the specified 36148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// local variable. 36248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 36348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// DW_TAG_arg_variable. 36448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Scope Variable scope. 36548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Name Variable name. 36648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param File File where this variable is defined. 36748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param LineNo Line number. 36848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Ty Variable Type 36948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param AlwaysPreserve Boolean. Set to true if debug info for this 37048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// variable should be preserved in optimized build. 37148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Flags Flags, e.g. artificial variable. 372e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 373e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 37450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope, 37548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel StringRef Name, 37648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIFile File, unsigned LineNo, 37748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIType Ty, bool AlwaysPreserve = false, 378e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned Flags = 0, 379e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned ArgNo = 0); 38048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 38148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 38250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createComplexVariable - Create a new descriptor for the specified 383fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable which has a complex address expression for its address. 384fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 385fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// DW_TAG_arg_variable. 386fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Variable scope. 387fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Variable name. 388fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 389fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 390fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type 391685501836bc60f53892854253b5bbea6c48b6d7fJay Foad /// @param Addr An array of complex address operations. 392e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 393e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 39450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope, 395fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name, DIFile F, unsigned LineNo, 396685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIType Ty, ArrayRef<Value *> Addr, 397685501836bc60f53892854253b5bbea6c48b6d7fJay Foad unsigned ArgNo = 0); 398fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 39950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFunction - Create a new descriptor for the specified subprogram. 40044498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 40144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 40244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 40344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 40444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 40544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 40644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 40744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 40844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 40944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 41044498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 41144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 41244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 413da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 41450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createFunction(DIDescriptor Scope, StringRef Name, 41544498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 41644498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 41744498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 41844498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 41944498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 42044498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 421da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 4225e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *TParam = 0, 4235e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *Decl = 0); 42444498a640daa827220bc4758770190318f0ec69fDevang Patel 42550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMethod - Create a new descriptor for the specified C++ method. 42644498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 42744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 42844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 42944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 43044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 43144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 43244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 43344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 43444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 4350d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad /// @param Virtuality Attributes describing virtualness. e.g. pure 43644498a640daa827220bc4758770190318f0ec69fDevang Patel /// virtual function. 43744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableIndex Index no of this method in virtual table. 43844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableHolder Type that holds vtable. 43944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 44044498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 44144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 44244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 443da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 44450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createMethod(DIDescriptor Scope, StringRef Name, 44544498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 44644498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 44744498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 44844498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 44944498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Virtuality = 0, unsigned VTableIndex = 0, 45044498a640daa827220bc4758770190318f0ec69fDevang Patel MDNode *VTableHolder = 0, 45144498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 45244498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 453da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 454da19475328ece3da19437a2e9eef035dcafa2814Devang Patel MDNode *TParam = 0); 455fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 45650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createNameSpace - This creates new descriptor for a namespace 457fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// with the specified parent scope. 458fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Namespace scope 459fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of this namespace 460fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File Source file 461fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number 46250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name, 463fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIFile File, unsigned LineNo); 464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 465fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 46650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLexicalBlock - This creates a descriptor for a lexical block 46743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// with the specified parent context. 46843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Parent lexical scope. 46943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File Source file 47043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Line Line number 47143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Col Column number 47250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File, 47343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned Line, unsigned Col); 47443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 47550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 476fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 477fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 478fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 47950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 480fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 481fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 48250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 483fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 484fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 485fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 48650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 487fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 488fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 489fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 49050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 491fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 492fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 493fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 494fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 49550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 496fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 497fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 498fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 49950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 500fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 501fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 502fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 503fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 50450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 505fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 506fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 507fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 50835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel }; 50935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm 51035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 51135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif 512