DIBuilder.h revision 6326a4238df05dafd7547cfa2cd71111cd6702a6
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 51fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *DeclareFn; // llvm.dbg.declare 52fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Function *ValueFn; // llvm.dbg.value 53fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 5435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel DIBuilder(const DIBuilder &); // DO NOT IMPLEMENT 5535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel void operator=(const DIBuilder &); // DO NOT IMPLEMENT 5635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 5735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel public: 5835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel explicit DIBuilder(Module &M); 5935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel const MDNode *getCU() { return TheCU; } 60dc8c3fdcf15a6fff6251a63869de718527c91940Devang Patel enum ComplexAddrKind { OpPlus=1, OpDeref }; 6135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 626326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel /// finalize - Construct any deferred debug info descriptors. 636326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel void finalize(); 646326a4238df05dafd7547cfa2cd71111cd6702a6Devang Patel 6550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createCompileUnit - A CompileUnit provides an anchor for all debugging 6635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// information generated during this instance of compilation. 672c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Lang Source programming language, eg. dwarf::DW_LANG_C99 682c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param File File name 692c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Dir Directory 702c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Producer String identify producer of debugging information. 712c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Usuall this is a compiler version string. 722c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param isOptimized A boolean flag which indicates whether optimization 732c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// is ON or not. 742c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Flags This string lists command line options. This string is 752c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// directly embedded in debug info output which may be used 762c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// by a tool analyzing generated debugging information. 772c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param RV This indicates runtime version for languages like 782c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// Objective-C. 7950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void createCompileUnit(unsigned Lang, StringRef File, StringRef Dir, 802c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel StringRef Producer, 8135fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel bool isOptimized, StringRef Flags, unsigned RV); 8235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 8350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFile - Create a file descriptor to hold debugging information 8435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// for a file. 8550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIFile createFile(StringRef Filename, StringRef Directory); 8635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 8750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerator - Create a single enumerator value. 8850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIEnumerator createEnumerator(StringRef Name, uint64_t Val); 8935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createBasicType - Create debugging information entry for a basic 912c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// type. 922c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Name Type name. 932c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param SizeInBits Size of the type. 942c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param AlignInBits Type alignment. 952c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float. 9650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createBasicType(StringRef Name, uint64_t SizeInBits, 9735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel uint64_t AlignInBits, unsigned Encoding); 9835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 9950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createQualifiedType - Create debugging information entry for a qualified 10035fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel /// type, e.g. 'const int'. 1012c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param Tag Tag identifing type, e.g. dwarf::TAG_volatile_type 1022c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// @param FromTy Base Type. 10350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createQualifiedType(unsigned Tag, DIType FromTy); 10435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 10550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createPointerType - Create debugging information entry for a pointer. 106fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param PointeeTy Type pointed by this pointer. 107fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Size. 108fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Alignment. (optional) 109fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Pointer type name. (optional) 11050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createPointerType(DIType PointeeTy, uint64_t SizeInBits, 111fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits = 0, 112fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name = StringRef()); 11335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 11450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createReferenceType - Create debugging information entry for a c++ 115fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// style reference. 11650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createReferenceType(DIType RTy); 11735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 11850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTypedef - Create debugging information entry for a typedef. 119fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 120fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Typedef name. 121fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this type is defined. 122fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 123da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel /// @param Context The surrounding context for the typedef. 12450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTypedef(DIType Ty, StringRef Name, DIFile File, 125da174c1d3b1fa31d7c5c47a645c66d600b4b7bd8Devang Patel unsigned LineNo, DIDescriptor Context); 12635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 12750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFriend - Create debugging information entry for a 'friend'. 12850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createFriend(DIType Ty, DIType FriendTy); 12935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 13050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createInheritance - Create debugging information entry to establish 1312c4c6a5e8a17909af336e3cba3d71ac354d7d9b6Devang Patel /// inheritance relationship between two types. 132fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Original type. 133fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseTy Base type. Ty is inherits from base. 134fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param BaseOffset Base offset. 135fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to describe inheritance attribute, 136fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// e.g. private 13750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createInheritance(DIType Ty, DIType BaseTy, uint64_t BaseOffset, 13835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel unsigned Flags); 13935fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 14050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMemberType - Create debugging information entry for a member. 141fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel /// @param Scope Member scope. 142fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Member name. 143fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this member is defined. 144fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 145fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param SizeInBits Member size. 146fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param AlignInBits Member alignment. 147fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param OffsetInBits Member offset. 148fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 149fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Parent type. 150fa3f9c001fe771af7dfcd7663b9d5dc345649d43Devang Patel DIType createMemberType(DIDescriptor Scope, StringRef Name, DIFile File, 151fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNo, uint64_t SizeInBits, 15235fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 15335fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel unsigned Flags, DIType Ty); 15435fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 155e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// createObjCIVar - Create debugging information entry for Objective-C 156e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// instance variable. 157e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Name Member name. 158e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param File File where this member is defined. 159e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param LineNo Line number. 160e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SizeInBits Member size. 161e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param AlignInBits Member alignment. 162e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param OffsetInBits Member offset. 163e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 164e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param Ty Parent type. 165e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyName Name of the Objective C property assoicated with 166e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// this ivar. 167e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param GetterName Name of the Objective C property getter selector. 168e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param SetterName Name of the Objective C property setter selector. 169e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel /// @param PropertyAttributes Objective C property attributes. 170e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel DIType createObjCIVar(StringRef Name, DIFile File, 171e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned LineNo, uint64_t SizeInBits, 172e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 173e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned Flags, DIType Ty, 174e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyName = StringRef(), 175e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertyGetterName = StringRef(), 176e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel StringRef PropertySetterName = StringRef(), 177e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel unsigned PropertyAttributes = 0); 178e9db5e29e3af91eec572bfeb8dcec908213298b0Devang Patel 17950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createClassType - Create debugging information entry for a class. 1800a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Scope Scope in which this class is defined. 1810a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Name class name. 1820a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param File File where this member is defined. 1830a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param LineNo Line number. 1840a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param SizeInBits Member size. 1850a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param AlignInBits Member alignment. 1860a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param OffsetInBits Member offset. 1870a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Flags Flags to encode member attribute, e.g. private 1880a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param Elements class members. 1890a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// @param VTableHolder Debug info of the base class that contains vtable 1900a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for this type. This is used in 1910a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// DW_AT_containing_type. See DWARF documentation 1920a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel /// for more info. 1937e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param TemplateParms Template type parameters. 19450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createClassType(DIDescriptor Scope, StringRef Name, DIFile File, 1950a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned LineNumber, uint64_t SizeInBits, 1960a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel uint64_t AlignInBits, uint64_t OffsetInBits, 1970a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel unsigned Flags, DIType DerivedFrom, 1987e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DIArray Elements, MDNode *VTableHolder = 0, 1997e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *TemplateParms = 0); 2000a2551de2c61b372d45b236b413a5d2e15225c0fDevang Patel 20150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStructType - Create debugging information entry for a struct. 20243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this struct is defined. 20343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Struct name. 20443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 20543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 20643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 20743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 20843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 20943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Struct elements. 21043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 21150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createStructType(DIDescriptor Scope, StringRef Name, DIFile File, 212fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel unsigned LineNumber, uint64_t SizeInBits, 213fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel uint64_t AlignInBits, unsigned Flags, 214fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 215fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 21650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnionType - Create debugging information entry for an union. 21743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this union is defined. 21843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 21943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 22043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 22143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 22243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 22343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Flags Flags to encode member attribute, e.g. private 22443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Union elements. 22543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param RunTimeLang Optional parameter, Objective-C runtime version. 22650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createUnionType(DIDescriptor Scope, StringRef Name, DIFile File, 22743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned LineNumber, uint64_t SizeInBits, 22843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t AlignInBits, unsigned Flags, 22943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIArray Elements, unsigned RunTimeLang = 0); 23043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 23150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateTypeParameter - Create debugging information for template 2327e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// type parameter. 233e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 2347e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Name Type parameter name. 2357e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param Ty Parameter type. 2367e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param File File where this type parameter is defined. 2377e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param LineNo Line number. 2387e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel /// @param ColumnNo Column Number. 2397e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel DITemplateTypeParameter 24050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateTypeParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 2417e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel MDNode *File = 0, unsigned LineNo = 0, 2427e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel unsigned ColumnNo = 0); 2437e2cb116556e1153401cd6b94d0f51db978f6902Devang Patel 24450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemplateValueParameter - Create debugging information for template 245e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// value parameter. 246e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Scope Scope in which this type is defined. 247e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Name Value parameter name. 248e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Ty Parameter type. 249e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param Value Constant parameter value. 250e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param File File where this type parameter is defined. 251e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param LineNo Line number. 252e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel /// @param ColumnNo Column Number. 253e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel DITemplateValueParameter 25450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty, 255e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel uint64_t Value, 256e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel MDNode *File = 0, unsigned LineNo = 0, 257e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel unsigned ColumnNo = 0); 258e7d93877c6e7029d27bfd1c137fceb472f81f390Devang Patel 25950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArrayType - Create debugging information entry for an array. 26043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 26143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 26243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 26343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 26450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArrayType(uint64_t Size, uint64_t AlignInBits, 26543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 26643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 26750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createVectorType - Create debugging information entry for a vector type. 26843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Size Array size. 26943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Alignment. 27043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Ty Element type. 27143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Subscripts Subscripts. 27250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createVectorType(uint64_t Size, uint64_t AlignInBits, 27343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIType Ty, DIArray Subscripts); 27443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 27550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createEnumerationType - Create debugging information entry for an 27643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// enumeration. 27743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Scope in which this enumeration is defined. 27843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Name Union name. 27943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File where this member is defined. 28043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param LineNo Line number. 28143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param SizeInBits Member size. 28243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param AlignInBits Member alignment. 28343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Elements Enumeration elements. 28450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createEnumerationType(DIDescriptor Scope, StringRef Name, 28543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel DIFile File, unsigned LineNumber, 28643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t SizeInBits, 28743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel uint64_t AlignInBits, DIArray Elements); 28843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 28950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createSubroutineType - Create subroutine type. 29043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File File in which this subroutine is defined. 29143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param ParamterTypes An array of subroutine parameter types. This 29243c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// includes return type at 0th index. 29350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createSubroutineType(DIFile File, DIArray ParameterTypes); 29443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 29550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createArtificialType - Create a new DIType with "artificial" flag set. 29650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createArtificialType(DIType Ty); 297fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 29850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createTemporaryType - Create a temporary forward-declared type. 29950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(); 30050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIType createTemporaryType(DIFile F); 301fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 30250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// retainType - Retain DIType in a module even if it is not referenced 30343c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// through debug info anchors. 30450d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel void retainType(DIType T); 30543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 30650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createUnspecifiedParameter - Create unspeicified type descriptor 30743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// for a subroutine type. 30850d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIDescriptor createUnspecifiedParameter(); 30943c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 31050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateArray - Get a DIArray, create one if required. 311685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIArray getOrCreateArray(ArrayRef<Value *> Elements); 312fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 31350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// getOrCreateSubrange - Create a descriptor for a value range. This 31443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// implicitly uniques the values returned. 31550d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubrange getOrCreateSubrange(int64_t Lo, int64_t Hi); 31643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 31750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createGlobalVariable - Create a new descriptor for the specified global. 318fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 319fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 320fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 321fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 322fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 323fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 324fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 325fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 32650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createGlobalVariable(StringRef Name, DIFile File, unsigned LineNo, 327fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 328fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 329fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 33050d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createStaticVariable - Create a new descriptor for the specified 331fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable. 332fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Conext Variable scope. 333fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of the variable. 334fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LinakgeName Mangled name of the variable. 335fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 336fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 337fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type. 338fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param isLocalToUnit Boolean flag indicate whether this variable is 339fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// externally visible or not. 340fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable. 341fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIGlobalVariable 34250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel createStaticVariable(DIDescriptor Context, StringRef Name, 343fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef LinkageName, DIFile File, unsigned LineNo, 344fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIType Ty, bool isLocalToUnit, llvm::Value *Val); 345fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 346fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 34750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLocalVariable - Create a new descriptor for the specified 34848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// local variable. 34948f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 35048f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// DW_TAG_arg_variable. 35148f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Scope Variable scope. 35248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Name Variable name. 35348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param File File where this variable is defined. 35448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param LineNo Line number. 35548f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Ty Variable Type 35648f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param AlwaysPreserve Boolean. Set to true if debug info for this 35748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// variable should be preserved in optimized build. 35848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel /// @param Flags Flags, e.g. artificial variable. 359e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 360e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 36150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createLocalVariable(unsigned Tag, DIDescriptor Scope, 36248f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel StringRef Name, 36348f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIFile File, unsigned LineNo, 36448f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel DIType Ty, bool AlwaysPreserve = false, 365e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned Flags = 0, 366e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel unsigned ArgNo = 0); 36748f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 36848f17ba2a611d197082d4de730b646a4ecf68df4Devang Patel 36950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createComplexVariable - Create a new descriptor for the specified 370fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// variable which has a complex address expression for its address. 371fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Tag Dwarf TAG. Usually DW_TAG_auto_variable or 372fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// DW_TAG_arg_variable. 373fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Variable scope. 374fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Variable name. 375fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File File where this variable is defined. 376fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number. 377fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Ty Variable Type 378685501836bc60f53892854253b5bbea6c48b6d7fJay Foad /// @param Addr An array of complex address operations. 379e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// @param ArgNo If this variable is an arugment then this argument's 380e9e16c5f52c4a093f4de234d448cdebedab8938eDevang Patel /// number. 1 indicates 1st argument. 38150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DIVariable createComplexVariable(unsigned Tag, DIDescriptor Scope, 382fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel StringRef Name, DIFile F, unsigned LineNo, 383685501836bc60f53892854253b5bbea6c48b6d7fJay Foad DIType Ty, ArrayRef<Value *> Addr, 384685501836bc60f53892854253b5bbea6c48b6d7fJay Foad unsigned ArgNo = 0); 385fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 38650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createFunction - Create a new descriptor for the specified subprogram. 38744498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 38844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 38944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 39044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 39144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 39244498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 39344498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 39444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 39544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 39644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 39744498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 39844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 39944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 400da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 40150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createFunction(DIDescriptor Scope, StringRef Name, 40244498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 40344498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 40444498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 40544498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 40644498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 40744498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 408da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 4095e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *TParam = 0, 4105e06bb83f4d7b1b86659ad851324350afb04f5b0Devang Patel MDNode *Decl = 0); 41144498a640daa827220bc4758770190318f0ec69fDevang Patel 41250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createMethod - Create a new descriptor for the specified C++ method. 41344498a640daa827220bc4758770190318f0ec69fDevang Patel /// See comments in DISubprogram for descriptions of these fields. 41444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Scope Function scope. 41544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Name Function name. 41644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LinkageName Mangled function name. 41744498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param File File where this variable is defined. 41844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param LineNo Line number. 41944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Ty Function type. 42044498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isLocalToUnit True if this function is not externally visible.. 42144498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isDefinition True if this is a function definition. 4220d4b81519dc3f02bbebb4ecad86bfb590c4d1898Jay Foad /// @param Virtuality Attributes describing virtualness. e.g. pure 42344498a640daa827220bc4758770190318f0ec69fDevang Patel /// virtual function. 42444498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableIndex Index no of this method in virtual table. 42544498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param VTableHolder Type that holds vtable. 42644498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Flags e.g. is this function prototyped or not. 42744498a640daa827220bc4758770190318f0ec69fDevang Patel /// This flags are used to emit dwarf attributes. 42844498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param isOptimized True if optimization is ON. 42944498a640daa827220bc4758770190318f0ec69fDevang Patel /// @param Fn llvm::Function pointer. 430da19475328ece3da19437a2e9eef035dcafa2814Devang Patel /// @param TParam Function template parameters. 43150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DISubprogram createMethod(DIDescriptor Scope, StringRef Name, 43244498a640daa827220bc4758770190318f0ec69fDevang Patel StringRef LinkageName, 43344498a640daa827220bc4758770190318f0ec69fDevang Patel DIFile File, unsigned LineNo, 43444498a640daa827220bc4758770190318f0ec69fDevang Patel DIType Ty, bool isLocalToUnit, 43544498a640daa827220bc4758770190318f0ec69fDevang Patel bool isDefinition, 43644498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Virtuality = 0, unsigned VTableIndex = 0, 43744498a640daa827220bc4758770190318f0ec69fDevang Patel MDNode *VTableHolder = 0, 43844498a640daa827220bc4758770190318f0ec69fDevang Patel unsigned Flags = 0, 43944498a640daa827220bc4758770190318f0ec69fDevang Patel bool isOptimized = false, 440da19475328ece3da19437a2e9eef035dcafa2814Devang Patel Function *Fn = 0, 441da19475328ece3da19437a2e9eef035dcafa2814Devang Patel MDNode *TParam = 0); 442fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 44350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createNameSpace - This creates new descriptor for a namespace 444fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// with the specified parent scope. 445fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Scope Namespace scope 446fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Name Name of this namespace 447fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param File Source file 448fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param LineNo Line number 44950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DINameSpace createNameSpace(DIDescriptor Scope, StringRef Name, 450fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIFile File, unsigned LineNo); 451fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 452fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 45350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// createLexicalBlock - This creates a descriptor for a lexical block 45443c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// with the specified parent context. 45543c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Scope Parent lexical scope. 45643c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param File Source file 45743c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Line Line number 45843c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel /// @param Col Column number 45950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel DILexicalBlock createLexicalBlock(DIDescriptor Scope, DIFile File, 46043c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel unsigned Line, unsigned Col); 46143c249cf1e417083ec8cbdfb4866a42861a7f638Devang Patel 46250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 463fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 464fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 465fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 46650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 467fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 468fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 46950d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. 470fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Storage llvm::Value of the variable 471fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 472fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 47350d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDeclare(llvm::Value *Storage, DIVariable VarInfo, 474fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 475fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 476fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 47750d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 478fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 479fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 480fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 481fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertAtEnd Location for the new intrinsic. 48250d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 483fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 484fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel BasicBlock *InsertAtEnd); 485fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 48650d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel /// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call. 487fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Val llvm::Value of the variable 488fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param Offset Offset 489fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param VarInfo Variable's debug info descriptor. 490fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel /// @param InsertBefore Location for the new intrinsic. 49150d280c14ee1c25fc8e6cb6f59af44f754edce42Devang Patel Instruction *insertDbgValueIntrinsic(llvm::Value *Val, uint64_t Offset, 492fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel DIVariable VarInfo, 493fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel Instruction *InsertBefore); 494fe58f95f3604b394916bee7bd289e1f0e0488ec5Devang Patel 49535fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel }; 49635fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel} // end namespace llvm 49735fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel 49835fcd6557f53aab69c2990b80fed4653fbaa3473Devang Patel#endif 499