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

Devang Patel dpatel at apple.com
Fri Dec 19 11:46:06 PST 2008


On Dec 19, 2008, at 11:22 AM, John Criswell wrote:

> Dear Devang,
>
> If the indices have not changed for stoppoint, can we update the  
> asserts
> for DbgStopPointInst::getFilename()?

Sure, go ahead.

>  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
>>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-
Devang






More information about the llvm-commits mailing list