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; 406618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher class DILexicalBlockFile; 4143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel class DILexicalBlock; 4244498a640daa827220bc4758770190318f0ec69fDevang Patel class DISubprogram; 437e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel class DITemplateTypeParameter; 44e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel class DITemplateValueParameter; 451ea02d467a311b4846b942377d0b00fde987be65Devang Patel class DIObjCProperty; 4635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 4735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel class DIBuilder { 4835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel private: 4935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel Module &M; 5035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel LLVMContext & VMContext; 5135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel MDNode *TheCU; 5235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 5394c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempEnumTypes; 5494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempRetainTypes; 5594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempSubprograms; 5694c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel MDNode *TempGVs; 5794c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel 58fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *DeclareFn; // llvm.dbg.declare 59fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *ValueFn; // llvm.dbg.value 60fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 6194c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllEnumTypes; 6294c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllRetainTypes; 6394c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllSubprograms; 6494c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel SmallVector<Value *, 4> AllGVs; 6594c7ddb6f52a5200983fed0ce74dc602a7737879Devang Patel 6635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel DIBuilder(const DIBuilder &); // DO NOT IMPLEMENT 6735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel void operator=(const DIBuilder &); // DO NOT IMPLEMENT 6835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 6935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel public: 7035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel explicit DIBuilder(Module &M); 7135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel const MDNode *getCU() { return TheCU; } 72dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel enum ComplexAddrKind { OpPlus=1, OpDeref }; 7335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 746326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel /// finalize - Construct any deferred debug info descriptors. 756326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel void finalize(); 766326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel 7750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createCompileUnit - A CompileUnit provides an anchor for all debugging 7835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// information generated during this instance of compilation. 792c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Lang Source programming language, eg. dwarf::DW_LANG_C99 802c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param File File name 812c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Dir Directory 822c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Producer String identify producer of debugging information. 832c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Usuall this is a compiler version string. 842c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param isOptimized A boolean flag which indicates whether optimization 852c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// is ON or not. 862c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Flags This string lists command line options. This string is 872c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// directly embedded in debug info output which may be used 882c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// by a tool analyzing generated debugging information. 892c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param RV This indicates runtime version for languages like 902c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Objective-C. 9150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir, 922c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel StringRef Producer, 9335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel bool isOptimized, StringRef Flags, unsigned RV); 9435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFile - Create a file descriptor to hold debugging information 9635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// for a file. 9750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIFile createFile(StringRef Filename, StringRef Directory); 9835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerator - Create a single enumerator value. 10050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIEnumerator createEnumerator(StringRef Name, uint64_t Val); 10135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 102734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel /// createNullPtrType - Create C++0x nullptr type. 103734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel DIType createNullPtrType(StringRef Name); 104734a67cda5a02be1654a2f89b811d7b6cbe3f5e5Devang Patel 10550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createBasicType - Create debugging information entry for a basic 1062c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// type. 1072c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Name Type name. 1082c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param SizeInBits Size of the type. 1092c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param AlignInBits Type alignment. 1102c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float. 11150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createBasicType(StringRef Name, uint64_t SizeInBits, 11235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel uint64_t AlignInBits, unsigned Encoding); 11335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 11450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createQualifiedType - Create debugging information entry for a qualified 11535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// type, e.g. 'const int'. 1162c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Tag Tag identifing type, e.g. dwarf::TAG_volatile_type 1172c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param FromTy Base Type. 11850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createQualifiedType(unsigned Tag, DIType FromTy); 11935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createPointerType - Create debugging information entry for a pointer. 121fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param PointeeTy Type pointed by this pointer. 122fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Size. 123fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Alignment. (optional) 124fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Pointer type name. (optional) 12550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createPointerType(DIType PointeeTy, uint64_t SizeInBits, 126fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits = 0, 127fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name = StringRef()); 12835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createReferenceType - Create debugging information entry for a c++ 130fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// style reference. 13150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createReferenceType(DIType RTy); 13235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 13350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTypedef - Create debugging information entry for a typedef. 134fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 135fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Typedef name. 136fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this type is defined. 137fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 138da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel /// @param Context The surrounding context for the typedef. 13950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTypedef(DIType Ty, StringRef Name, DIFile File, 140da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel unsigned LineNo, DIDescriptor Context); 14135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFriend - Create debugging information entry for a 'friend'. 14350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createFriend(DIType Ty, DIType FriendTy); 14435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createInheritance - Create debugging information entry to establish 1462c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// inheritance relationship between two types. 147fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseTy Base type. Ty is inherits from base. 149fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseOffset Base offset. 150fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to describe inheritance attribute, 151fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// e.g. private 15250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createInheritance(DIType Ty, DIType BaseTy, uint64_t BaseOffset, 15335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel unsigned Flags); 15435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 15550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMemberType - Create debugging information entry for a member. 156fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel /// @param Scope Member scope. 157fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Member name. 158fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this member is defined. 159fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 160fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Member size. 161fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Member alignment. 162fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param OffsetInBits Member offset. 163fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 164fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Parent type. 165fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel DIType createMemberType(DIDescriptor Scope, StringRef Name, DIFile File, 166fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNo, uint64_t SizeInBits, 16735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 16835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel unsigned Flags, DIType Ty); 16935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 170e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 171e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// instance variable. 172e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Name Member name. 173e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param File File where this member is defined. 174e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param LineNo Line number. 175e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SizeInBits Member size. 176e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param AlignInBits Member alignment. 177e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param OffsetInBits Member offset. 178e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 179e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Ty Parent type. 180e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyName Name of the Objective C property assoicated with 181e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// this ivar. 182e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param GetterName Name of the Objective C property getter selector. 183e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SetterName Name of the Objective C property setter selector. 184e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyAttributes Objective C property attributes. 185e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 186e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned LineNo, uint64_t SizeInBits, 187e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 188e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned Flags, DIType Ty, 189e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyName = StringRef(), 190e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyGetterName = StringRef(), 191e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertySetterName = StringRef(), 192e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned PropertyAttributes = 0); 193e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel 1946588abf377b7381274236e651462ec83052f6013Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 1956588abf377b7381274236e651462ec83052f6013Devang Patel /// instance variable. 1966588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Name Member name. 1976588abf377b7381274236e651462ec83052f6013Devang Patel /// @param File File where this member is defined. 1986588abf377b7381274236e651462ec83052f6013Devang Patel /// @param LineNo Line number. 1996588abf377b7381274236e651462ec83052f6013Devang Patel /// @param SizeInBits Member size. 2006588abf377b7381274236e651462ec83052f6013Devang Patel /// @param AlignInBits Member alignment. 2016588abf377b7381274236e651462ec83052f6013Devang Patel /// @param OffsetInBits Member offset. 2026588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 2036588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Ty Parent type. 2046588abf377b7381274236e651462ec83052f6013Devang Patel /// @param Property Property associated with this ivar. 2056588abf377b7381274236e651462ec83052f6013Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 2066588abf377b7381274236e651462ec83052f6013Devang Patel unsigned LineNo, uint64_t SizeInBits, 2076588abf377b7381274236e651462ec83052f6013Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2086588abf377b7381274236e651462ec83052f6013Devang Patel unsigned Flags, DIType Ty, 2096588abf377b7381274236e651462ec83052f6013Devang Patel MDNode *PropertyNode); 2106588abf377b7381274236e651462ec83052f6013Devang Patel 2111ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// createObjCProperty - Create debugging information entry for Objective-C 2121ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// property. 2131ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param Name Property name. 214b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param File File where this property is defined. 215b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param LineNumber Line number. 2161ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param GetterName Name of the Objective C property getter selector. 2171ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param SetterName Name of the Objective C property setter selector. 2181ea02d467a311b4846b942377d0b00fde987be65Devang Patel /// @param PropertyAttributes Objective C property attributes. 219b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher /// @param Ty Type. 220b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher DIObjCProperty createObjCProperty(StringRef Name, 221b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher DIFile File, unsigned LineNumber, 222b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher StringRef GetterName, 223b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher StringRef SetterName, 224b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher unsigned PropertyAttributes, 225b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher DIType Ty); 226b8ca98874316bfe8e46b27e7a034a8a764c92e08Eric Christopher 22750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createClassType - Create debugging information entry for a class. 2280a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Scope Scope in which this class is defined. 2290a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Name class name. 2300a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param File File where this member is defined. 2310a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param LineNo Line number. 2320a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param SizeInBits Member size. 2330a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param AlignInBits Member alignment. 2340a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param OffsetInBits Member offset. 2350a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Flags Flags to encode member attribute, e.g. private 2360a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Elements class members. 2370a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param VTableHolder Debug info of the base class that contains vtable 2380a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for this type. This is used in 2390a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// DW_AT_containing_type. See DWARF documentation 2400a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for more info. 2417e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param TemplateParms Template type parameters. 24250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File, 2430a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned LineNumber, uint64_t SizeInBits, 2440a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 2450a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned Flags, DIType DerivedFrom, 2467e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DIArray Elements, MDNode *VTableHolder = 0, 2477e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *TemplateParms = 0); 2480a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel 24950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStructType - Create debugging information entry for a struct. 25043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this struct is defined. 25143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Struct name. 25243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 25343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 25443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 25543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 25643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 25743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Struct elements. 25843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 25950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File, 260fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNumber, uint64_t SizeInBits, 261fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits, unsigned Flags, 262fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 263fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 26450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnionType - Create debugging information entry for an union. 26543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this union is defined. 26643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 26743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 26843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 26943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 27043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 27143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 27243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Union elements. 27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 27450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createUnionType(DIDescriptor Scope, StringRef Name, DIFile File, 27543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned LineNumber, uint64_t SizeInBits, 27643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t AlignInBits, unsigned Flags, 27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 27950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateTypeParameter - Create debugging information for template 2807e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// type parameter. 281e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 2827e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Name Type parameter name. 2837e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Ty Parameter type. 2847e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param File File where this type parameter is defined. 2857e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param LineNo Line number. 2867e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param ColumnNo Column Number. 2877e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DITemplateTypeParameter 28850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 2897e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *File = 0, unsigned LineNo = 0, 2907e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel unsigned ColumnNo = 0); 2917e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel 29250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateValueParameter - Create debugging information for template 293e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// value parameter. 294e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 295e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Name Value parameter name. 296e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Ty Parameter type. 297e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Value Constant parameter value. 298e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param File File where this type parameter is defined. 299e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param LineNo Line number. 300e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param ColumnNo Column Number. 301e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel DITemplateValueParameter 30250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 303e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel uint64_t Value, 304e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel MDNode *File = 0, unsigned LineNo = 0, 305e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel unsigned ColumnNo = 0); 306e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel 30750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArrayType - Create debugging information entry for an array. 30843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 30943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 31043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 31143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 31250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArrayType(uint64_t Size, uint64_t AlignInBits, 31343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 31443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 31550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createVectorType - Create debugging information entry for a vector type. 31643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 31743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 31843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 31943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 32050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createVectorType(uint64_t Size, uint64_t AlignInBits, 32143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 32243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 32350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerationType - Create debugging information entry for an 32443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// enumeration. 32543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this enumeration is defined. 32643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 32743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 32843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 32943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 33043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 33143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Enumeration elements. 33250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createEnumerationType(DIDescriptor Scope, StringRef Name, 33343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIFile File, unsigned LineNumber, 33443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t SizeInBits, 33543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t AlignInBits, DIArray Elements); 33643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 33750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createSubroutineType - Create subroutine type. 33843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File in which this subroutine is defined. 33943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param ParamterTypes An array of subroutine parameter types. This 34043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// includes return type at 0th index. 34150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createSubroutineType(DIFile File, DIArray ParameterTypes); 34243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 34350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArtificialType - Create a new DIType with "artificial" flag set. 34450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArtificialType(DIType Ty); 345fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 34650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemporaryType - Create a temporary forward-declared type. 34750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(); 34850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(DIFile F); 349fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 3504fe345729285ae634c657ab854057464d03220f7Eric Christopher /// createForwardDecl - Create a temporary forward-declared type. 3514fe345729285ae634c657ab854057464d03220f7Eric Christopher DIType createForwardDecl(unsigned Tag, StringRef Name, DIFile F, 3529f90e8760fda131db8311f976c6bbeb66abbaa05Eric Christopher unsigned Line, unsigned RuntimeLang = 0); 3534fe345729285ae634c657ab854057464d03220f7Eric Christopher 35450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// retainType - Retain DIType in a module even if it is not referenced 35543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// through debug info anchors. 35650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void retainType(DIType T); 35743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 35850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnspecifiedParameter - Create unspeicified type descriptor 35943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// for a subroutine type. 36050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIDescriptor createUnspecifiedParameter(); 36143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 36250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateArray - Get a DIArray, create one if required. 363685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIArray getOrCreateArray(ArrayRef<Value *> Elements); 364fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 36550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateSubrange - Create a descriptor for a value range. This 36643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// implicitly uniques the values returned. 36750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubrange getOrCreateSubrange(int64_t Lo, int64_t Hi); 36843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 36950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createGlobalVariable - Create a new descriptor for the specified global. 370fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 371fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 372fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 373fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 374fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 375fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 376fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 377fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 37850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo, 379fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 380fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 381fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 38250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStaticVariable - Create a new descriptor for the specified 383fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable. 384fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Conext Variable scope. 385fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 386fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LinakgeName Mangled name of the variable. 387fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 388fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 389fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 390fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 391fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 392fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 393fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 39450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createStaticVariable(DIDescriptor Context, StringRef Name, 395fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef LinkageName, DIFile File, unsigned LineNo, 396fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 397fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 398fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 39950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLocalVariable - Create a new descriptor for the specified 40048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// local variable. 40148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 40248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// DW_TAG_arg_variable. 40348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Scope Variable scope. 40448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Name Variable name. 40548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param File File where this variable is defined. 40648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param LineNo Line number. 40748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Ty Variable Type 40848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param AlwaysPreserve Boolean. Set to true if debug info for this 40948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// variable should be preserved in optimized build. 41048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Flags Flags, e.g. artificial variable. 411e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 412e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 41350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope, 41448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel StringRef Name, 41548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIFile File, unsigned LineNo, 41648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIType Ty, bool AlwaysPreserve = false, 417e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned Flags = 0, 418e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned ArgNo = 0); 41948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 42048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 42150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createComplexVariable - Create a new descriptor for the specified 422fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable which has a complex address expression for its address. 423fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 424fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// DW_TAG_arg_variable. 425fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Variable scope. 426fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Variable name. 427fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 428fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 429fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type 430685501836bc60f53892854253b5bbea6c48b6d7fJay Foad /// @param Addr An array of complex address operations. 431e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 432e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 43350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope, 434fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name, DIFile F, unsigned LineNo, 435685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIType Ty, ArrayRef<Value *> Addr, 436685501836bc60f53892854253b5bbea6c48b6d7fJay Foad unsigned ArgNo = 0); 437fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 43850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFunction - Create a new descriptor for the specified subprogram. 43944498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 44044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 44144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 44244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 44344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 44444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 44544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 44644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 44744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 4486126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher /// @param ScopeLine Set to the beginning of the scope this starts 44944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 45044498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 45144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 45244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 453da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 45450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createFunction(DIDescriptor Scope, StringRef Name, 45544498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 45644498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 45744498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 45844498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 4596126a1e1894f346fae02a514a20aa56b879aeb99Eric Christopher unsigned ScopeLine, 46044498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 46144498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 462da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 4635e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *TParam = 0, 4645e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *Decl = 0); 46544498a640daa827220bc4758770190318f0ec69fDevang Patel 46650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMethod - Create a new descriptor for the specified C++ method. 46744498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 46844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 46944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 47044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 47144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 47244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 47344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 47444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 47544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 4760d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad /// @param Virtuality Attributes describing virtualness. e.g. pure 47744498a640daa827220bc4758770190318f0ec69fDevang Patel /// virtual function. 47844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableIndex Index no of this method in virtual table. 47944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableHolder Type that holds vtable. 48044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 48144498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 48244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 48344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 484da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 48550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createMethod(DIDescriptor Scope, StringRef Name, 48644498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 48744498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 48844498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 48944498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 49044498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Virtuality = 0, unsigned VTableIndex = 0, 49144498a640daa827220bc4758770190318f0ec69fDevang Patel MDNode *VTableHolder = 0, 49244498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 49344498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 494da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 495da19475328ece3da19437a2e9eef035dcafa2814Devang Patel MDNode *TParam = 0); 496fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 49750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createNameSpace - This creates new descriptor for a namespace 498fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// with the specified parent scope. 499fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Namespace scope 500fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of this namespace 501fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File Source file 502fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number 50350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name, 504fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIFile File, unsigned LineNo); 505fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 506fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 5076618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// createLexicalBlockFile - This creates a descriptor for a lexical 5086618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// block with a new file attached. This merely extends the existing 5096618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// lexical block as it crosses a file. 5106618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// @param Scope Lexical block. 5116618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher /// @param File Source file. 5126618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher DILexicalBlockFile createLexicalBlockFile(DIDescriptor Scope, 5139f99721a1882cdef9f7cca25de7ea43627d23958Devang Patel DIFile File); 5146618a241f7ba2571a1a55b3733c4441d467baf42Eric Christopher 51550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLexicalBlock - This creates a descriptor for a lexical block 51643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// with the specified parent context. 51743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Parent lexical scope. 51843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File Source file 51943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Line Line number 52043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Col Column number 52150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File, 52243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned Line, unsigned Col); 52343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 52450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 525fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 526fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 527fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 52850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 529fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 530fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 53150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 532fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 533fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 534fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 53550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 536fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 537fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 538fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 53950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 540fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 541fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 542fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 543fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 54450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 545fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 546fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 547fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 54850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 549fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 550fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 551fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 552fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 55350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 554fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 555fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 556fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 55735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel }; 55835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm 55935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 56035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif 561