[llvm-commits] [llvm] r61164 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h include/llvm/CodeGen/MachineModuleInfo.h lib/Analysis/DebugInfo.cpp

John Criswell criswell at uiuc.edu
Fri Dec 19 11:22:27 PST 2008


Dear Devang,

If the indices have not changed for stoppoint, can we update the asserts 
for DbgStopPointInst::getFilename()?  I'm using this intrinsic for a 
project I'm working on, and increasing the debug info version breaks it.

-- John T.

Devang Patel wrote:
> Author: dpatel
> Date: Wed Dec 17 16:39:29 2008
> New Revision: 61164
>
> URL: http://llvm.org/viewvc/llvm-project?rev=61164&view=rev
> Log:
>
> Today the front-ends (llvm-gcc and clang) generate multiple llvm.dbg.compile_units to identify source file for various debug entities. Each llvm.dbg.compile_unit matches one file on the disk. However, the backend only supports one DW_TAG_compile_unit per .o file. The backend selects first compile_unit from the vector to construct DW_TAG_compile_unit entry, which is not correct in all cases.
>
> First step to resolve this is, record file name and directory directly in debug info for various debug entities.
>
>
> Modified:
>     llvm/trunk/include/llvm/Analysis/DebugInfo.h
>     llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h
>     llvm/trunk/lib/Analysis/DebugInfo.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61164&r1=61163&r2=61164&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Wed Dec 17 16:39:29 2008
> @@ -33,7 +33,8 @@
>    class DIDescriptor {
>    public:
>      enum {
> -      Version6    = 6 << 16,     // Current version of debug information.
> +      Version7    = 7 << 16,     // Current version of debug information.
> +      Version6    = 6 << 16,     // Constant for version 6.
>        Version5    = 5 << 16,     // Constant for version 5.
>        Version4    = 4 << 16,     // Constant for version 4.
>        VersionMask = 0xffff0000   // Mask for version number.
> @@ -156,6 +157,8 @@
>      explicit DIBasicType(GlobalVariable *GV);
>
>      unsigned getEncoding() const { return getUnsignedField(9); }
> +    std::string getFileName() const { return getStringField(10); }
> +    std::string getDirectory() const { return getStringField(11); }
>    };
>
>    /// DIDerivedType - A simple derived type, like a const qualified type,
> @@ -168,7 +171,9 @@
>      explicit DIDerivedType(GlobalVariable *GV);
>
>      DIType getTypeDerivedFrom() const { return getFieldAs<DIType>(9); }
> -
> +    std::string getFileName() const { return getStringField(10); }
> +    std::string getDirectory() const { return getStringField(11); }
> +
>      /// isDerivedType - Return true if the specified tag is legal for
>      /// DIDerivedType.
>      static bool isDerivedType(unsigned TAG);
> @@ -183,6 +188,8 @@
>      explicit DICompositeType(GlobalVariable *GV);
>
>      DIArray getTypeArray() const { return getFieldAs<DIArray>(10); }
> +    std::string getFileName() const { return getStringField(11); }
> +    std::string getDirectory() const { return getStringField(12); }
>
>      /// isCompositeType - Return true if the specified tag is legal for
>      /// DICompositeType.
> @@ -216,7 +223,8 @@
>    class DISubprogram : public DIGlobal {
>    public:
>      explicit DISubprogram(GlobalVariable *GV = 0);
> -
> +    std::string getFilename() const { return getStringField(11); }
> +    std::string getDirectory() const { return getStringField(12); }
>    };
>
>    /// DIGlobalVariable - This is a wrapper for a global variable.
> @@ -225,6 +233,8 @@
>      explicit DIGlobalVariable(GlobalVariable *GV = 0);
>
>      GlobalVariable *getGlobal() const { return getGlobalVariableField(11); }
> +    std::string getFilename() const { return getStringField(12); }
> +    std::string getDirectory() const { return getStringField(13); }
>    };
>
>
> @@ -240,6 +250,8 @@
>      DICompileUnit getCompileUnit() const{ return getFieldAs<DICompileUnit>(3); }
>      unsigned getLineNumber() const      { return getUnsignedField(4); }
>      DIType getType() const              { return getFieldAs<DIType>(5); }
> +    std::string getFilename() const { return getStringField(6); }
> +    std::string getDirectory() const { return getStringField(7); }
>
>      /// isVariable - Return true if the specified tag is legal for DIVariable.
>      static bool isVariable(unsigned Tag);
> @@ -310,7 +322,9 @@
>                                  DICompileUnit CompileUnit, unsigned LineNumber,
>                                  uint64_t SizeInBits, uint64_t AlignInBits,
>                                  uint64_t OffsetInBits, unsigned Flags,
> -                                unsigned Encoding);
> +                                unsigned Encoding,
> +                                const std::string *FileName = 0,
> +                                const std::string *Directory = 0);
>
>      /// CreateDerivedType - Create a derived type like const qualified type,
>      /// pointer, typedef, etc.
> @@ -320,7 +334,9 @@
>                                      unsigned LineNumber,
>                                      uint64_t SizeInBits, uint64_t AlignInBits,
>                                      uint64_t OffsetInBits, unsigned Flags,
> -                                    DIType DerivedFrom);
> +                                    DIType DerivedFrom,
> +                                    const std::string *FileName = 0,
> +                                    const std::string *Directory = 0);
>
>      /// CreateCompositeType - Create a composite type like array, struct, etc.
>      DICompositeType CreateCompositeType(unsigned Tag, DIDescriptor Context,
> @@ -331,7 +347,9 @@
>                                          uint64_t AlignInBits,
>                                          uint64_t OffsetInBits, unsigned Flags,
>                                          DIType DerivedFrom,
> -                                        DIArray Elements);
> +                                        DIArray Elements,
> +                                        const std::string *FileName = 0,
> +                                        const std::string *Directory = 0);
>
>      /// CreateSubprogram - Create a new descriptor for the specified subprogram.
>      /// See comments in DISubprogram for descriptions of these fields.
> @@ -340,7 +358,9 @@
>                                    const std::string &LinkageName,
>                                    DICompileUnit CompileUnit, unsigned LineNo,
>                                    DIType Type, bool isLocalToUnit,
> -                                  bool isDefinition);
> +                                  bool isDefinition,
> +                                  const std::string *FileName = 0,
> +                                  const std::string *Directory = 0);
>
>      /// CreateGlobalVariable - Create a new descriptor for the specified global.
>      DIGlobalVariable
> @@ -349,14 +369,18 @@
>                           const std::string &LinkageName,
>                           DICompileUnit CompileUnit,
>                           unsigned LineNo, DIType Type, bool isLocalToUnit,
> -                         bool isDefinition, llvm::GlobalVariable *GV);
> +                         bool isDefinition, llvm::GlobalVariable *GV,
> +                         const std::string *FileName = 0,
> +                         const std::string *Directory = 0);
>
>
>      /// CreateVariable - Create a new descriptor for the specified variable.
>      DIVariable CreateVariable(unsigned Tag, DIDescriptor Context,
>                                const std::string &Name,
>                                DICompileUnit CompileUnit, unsigned LineNo,
> -                              DIType Type);
> +                              DIType Type,
> +                              const std::string *FileName = 0,
> +                              const std::string *Directory = 0);
>
>      /// CreateBlock - This creates a descriptor for a lexical block with the
>      /// specified parent context.
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h?rev=61164&r1=61163&r2=61164&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h Wed Dec 17 16:39:29 2008
> @@ -59,7 +59,8 @@
>  // Debug info constants.
>
>  enum {
> -  LLVMDebugVersion = (6 << 16),         // Current version of debug information.
> +  LLVMDebugVersion = (7 << 16),         // Current version of debug information.
> +  LLVMDebugVersion6 = (6 << 16),        // Constant for version 6.
>    LLVMDebugVersion5 = (5 << 16),        // Constant for version 5.
>    LLVMDebugVersion4 = (4 << 16),        // Constant for version 4.
>    LLVMDebugVersionMask = 0xffff0000     // Mask for version number.
>
> Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=61164&r1=61163&r2=61164&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DebugInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/DebugInfo.cpp Wed Dec 17 16:39:29 2008
> @@ -195,7 +195,7 @@
>  Constant *DIFactory::GetTagConstant(unsigned TAG) {
>    assert((TAG & DIDescriptor::VersionMask) == 0 &&
>           "Tag too large for debug encoding!");
> -  return ConstantInt::get(Type::Int32Ty, TAG | DIDescriptor::Version6);
> +  return ConstantInt::get(Type::Int32Ty, TAG | DIDescriptor::Version7);
>  }
>
>  Constant *DIFactory::GetStringConstant(const std::string &String) {
> @@ -389,7 +389,9 @@
>                                         uint64_t SizeInBits,
>                                         uint64_t AlignInBits,
>                                         uint64_t OffsetInBits, unsigned Flags,
> -                                       unsigned Encoding) {
> +                                       unsigned Encoding,
> +                                       const std::string *FileName,
> +                                       const std::string *Directory) {
>    Constant *Elts[] = {
>      GetTagConstant(dwarf::DW_TAG_base_type),
>      getCastToEmpty(Context),
> @@ -400,7 +402,9 @@
>      ConstantInt::get(Type::Int64Ty, AlignInBits),
>      ConstantInt::get(Type::Int64Ty, OffsetInBits),
>      ConstantInt::get(Type::Int32Ty, Flags),
> -    ConstantInt::get(Type::Int32Ty, Encoding)
> +    ConstantInt::get(Type::Int32Ty, Encoding),
> +    GetStringConstant(FileName ? FileName->c_str() : ""),
> +    GetStringConstant(Directory ? Directory->c_str() : "")
>    };
>
>    Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
> @@ -424,7 +428,9 @@
>                                             uint64_t AlignInBits,
>                                             uint64_t OffsetInBits,
>                                             unsigned Flags,
> -                                           DIType DerivedFrom) {
> +                                           DIType DerivedFrom,
> +                                           const std::string *FileName,
> +                                           const std::string *Directory) {
>    Constant *Elts[] = {
>      GetTagConstant(Tag),
>      getCastToEmpty(Context),
> @@ -435,7 +441,9 @@
>      ConstantInt::get(Type::Int64Ty, AlignInBits),
>      ConstantInt::get(Type::Int64Ty, OffsetInBits),
>      ConstantInt::get(Type::Int32Ty, Flags),
> -    getCastToEmpty(DerivedFrom)
> +    getCastToEmpty(DerivedFrom),
> +    GetStringConstant(FileName ? FileName->c_str() : ""),
> +    GetStringConstant(Directory ? Directory->c_str() : "")
>    };
>
>    Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
> @@ -459,7 +467,10 @@
>                                                 uint64_t OffsetInBits,
>                                                 unsigned Flags,
>                                                 DIType DerivedFrom,
> -                                               DIArray Elements) {
> +                                               DIArray Elements,
> +                                               const std::string *FileName,
> +                                               const std::string *Directory) {
> +
>    Constant *Elts[] = {
>      GetTagConstant(Tag),
>      getCastToEmpty(Context),
> @@ -471,7 +482,9 @@
>      ConstantInt::get(Type::Int64Ty, OffsetInBits),
>      ConstantInt::get(Type::Int32Ty, Flags),
>      getCastToEmpty(DerivedFrom),
> -    getCastToEmpty(Elements)
> +    getCastToEmpty(Elements),
> +    GetStringConstant(FileName ? FileName->c_str() : ""),
> +    GetStringConstant(Directory ? Directory->c_str() : "")
>    };
>
>    Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
> @@ -495,7 +508,10 @@
>                                           DICompileUnit CompileUnit,
>                                           unsigned LineNo, DIType Type,
>                                           bool isLocalToUnit,
> -                                         bool isDefinition) {
> +                                         bool isDefinition,
> +                                         const std::string *FileName,
> +                                         const std::string *Directory) {
> +
>    Constant *Elts[] = {
>      GetTagConstant(dwarf::DW_TAG_subprogram),
>      getCastToEmpty(GetOrCreateSubprogramAnchor()),
> @@ -507,7 +523,9 @@
>      ConstantInt::get(Type::Int32Ty, LineNo),
>      getCastToEmpty(Type),
>      ConstantInt::get(Type::Int1Ty, isLocalToUnit),
> -    ConstantInt::get(Type::Int1Ty, isDefinition)
> +    ConstantInt::get(Type::Int1Ty, isDefinition),
> +    GetStringConstant(FileName ? FileName->c_str() : ""),
> +    GetStringConstant(Directory ? Directory->c_str() : "")
>    };
>
>    Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
> @@ -527,8 +545,9 @@
>                                  const std::string &LinkageName,
>                                  DICompileUnit CompileUnit,
>                                  unsigned LineNo, DIType Type,bool isLocalToUnit,
> -                                bool isDefinition, llvm::GlobalVariable *Val) {
> -
> +                                bool isDefinition, llvm::GlobalVariable *Val,
> +                                const std::string *FileName,
> +                                const std::string *Directory) {
>    Constant *Elts[] = {
>      GetTagConstant(dwarf::DW_TAG_variable),
>      getCastToEmpty(GetOrCreateGlobalVariableAnchor()),
> @@ -541,7 +560,9 @@
>      getCastToEmpty(Type),
>      ConstantInt::get(Type::Int1Ty, isLocalToUnit),
>      ConstantInt::get(Type::Int1Ty, isDefinition),
> -    ConstantExpr::getBitCast(Val, EmptyStructPtr)
> +    ConstantExpr::getBitCast(Val, EmptyStructPtr),
> +    GetStringConstant(FileName ? FileName->c_str() : ""),
> +    GetStringConstant(Directory ? Directory->c_str() : "")
>    };
>
>    Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
> @@ -559,7 +580,10 @@
>  DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context,
>                                       const std::string &Name,
>                                       DICompileUnit CompileUnit, unsigned LineNo,
> -                                     DIType Type) {
> +                                     DIType Type,
> +                                     const std::string *FileName,
> +                                     const std::string *Directory) {
> +
>
>    Constant *Elts[] = {
>      GetTagConstant(Tag),
> @@ -568,6 +592,8 @@
>      getCastToEmpty(CompileUnit),
>      ConstantInt::get(Type::Int32Ty, LineNo),
>      getCastToEmpty(Type),
> +    GetStringConstant(FileName ? FileName->c_str() : ""),
> +    GetStringConstant(Directory ? Directory->c_str() : "")
>    };
>
>    Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>   




More information about the llvm-commits mailing list