//===--- llvm/Analysis/DIBuilder.h - Debug Information Builder --*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines a DIBuilder that is useful for creating debugging // information entries in LLVM IR form. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_DIBUILDER_H #define LLVM_ANALYSIS_DIBUILDER_H #include "llvm/System/DataTypes.h" #include "llvm/ADT/StringRef.h" namespace llvm { class Module; class LLVMContext; class MDNode; class StringRef; class DIDescriptor; class DIFile; class DIEnumerator; class DIType; class DIBuilder { private: Module &M; LLVMContext & VMContext; MDNode *TheCU; DIBuilder(const DIBuilder &); // DO NOT IMPLEMENT void operator=(const DIBuilder &); // DO NOT IMPLEMENT public: explicit DIBuilder(Module &M); const MDNode *getCU() { return TheCU; } /// CreateCompileUnit - A CompileUnit provides an anchor for all debugging /// information generated during this instance of compilation. /// @param Lang Source programming language, eg. dwarf::DW_LANG_C99 /// @param File File name /// @param Dir Directory /// @param Producer String identify producer of debugging information. /// Usuall this is a compiler version string. /// @param isOptimized A boolean flag which indicates whether optimization /// is ON or not. /// @param Flags This string lists command line options. This string is /// directly embedded in debug info output which may be used /// by a tool analyzing generated debugging information. /// @param RV This indicates runtime version for languages like /// Objective-C. void CreateCompileUnit(unsigned Lang, StringRef File, StringRef Dir, StringRef Producer, bool isOptimized, StringRef Flags, unsigned RV); /// CreateFile - Create a file descriptor to hold debugging information /// for a file. DIFile CreateFile(StringRef Filename, StringRef Directory); /// CreateEnumerator - Create a single enumerator value. DIEnumerator CreateEnumerator(StringRef Name, uint64_t Val); /// CreateBasicType - Create debugging information entry for a basic /// type. /// @param Name Type name. /// @param SizeInBits Size of the type. /// @param AlignInBits Type alignment. /// @param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float. DIType CreateBasicType(StringRef Name, uint64_t SizeInBits, uint64_t AlignInBits, unsigned Encoding); /// CreateQualifiedType - Create debugging information entry for a qualified /// type, e.g. 'const int'. /// @param Tag Tag identifing type, e.g. dwarf::TAG_volatile_type /// @param FromTy Base Type. DIType CreateQualifiedType(unsigned Tag, DIType FromTy); /// CreatePointerType - Create debugging information entry for a pointer. DIType CreatePointerType(DIType PointeeTy, uint64_t SizeInBits, uint64_t AlignInBits = 0, StringRef Name = StringRef()); /// CreateReferenceType - Create debugging information entry for a reference. DIType CreateReferenceType(DIType RTy); /// CreateTypedef - Create debugging information entry for a typedef. DIType CreateTypedef(DIType Ty, StringRef Name, DIFile F, unsigned LineNo); /// CreateFriend - Create debugging information entry for a 'friend'. DIType CreateFriend(DIType Ty, DIType FriendTy); /// CreateInheritance - Create debugging information entry to establish /// inheritance relationship between two types. DIType CreateInheritance(DIType Ty, DIType BaseTy, uint64_t BaseOffset, unsigned Flags); /// CreateMemberType - Create debugging information entry for a member. DIType CreateMemberType(DIDescriptor Context, StringRef Name, DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, DIType Ty); /// CreateArtificialType - Create a new DIType with "artificial" flag set. DIType CreateArtificialType(DIType Ty); }; } // end namespace llvm #endif