From: Devang Patel To provide basic functionality, the LLVM debugger does have to make some
assumptions about the source-level language being debugged, though it keeps
these to a minimum. The only common features that the LLVM debugger assumes
- exist are source files,
+ exist are source files,
and program objects. These abstract
objects are used by a debugger to form stack traces, show information about
local variables, etc.
The details of the various descriptors follow.
@@ -346,18 +347,36 @@ height="369"> that produced it.Compile unit descriptors provide the root context for objects declared in a - specific source file. Global variables and top level functions would be - defined using this context. Compile unit descriptors also provide context - for source line correspondence.
+ specific compilation unit. File descriptors are defined using this context. -Each input file is encoded as a separate compile unit in LLVM debugging - information output. However, many target specific tool chains prefer to - encode only one compile unit in an object file. In this situation, the LLVM - code generator will include debugging information entities in the compile - unit that is marked as main compile unit. The code generator accepts maximum - one main compile unit per module. If a module does not contain any main - compile unit then the code generator will emit multiple compile units in the - output object file.
+ + + ++!0 = metadata !{ + i32, ;; Tag = 41 + LLVMDebugVersion + ;; (DW_TAG_file_type) + metadata, ;; Source file name + metadata, ;; Source file directory (includes trailing slash) + metadata ;; Reference to compile unit where defined +} ++
These descriptors contain informations for a file. Global variables and top + level functions would be defined using this context.k File descriptors also + provide context for source line correspondence.
+ +Each input file is encoded as a separate file descriptor in LLVM debugging + information output. Each file descriptor would be defined using a + compile unit.
... ;; -;; Define the compile unit for the source file "/Users/mine/sources/MySource.cpp". +;; Define the compile unit for the main source file "/Users/mine/sources/MySource.cpp". ;; -!3 = metadata !{ - i32 458769, ;; Tag +!2 = metadata !{ + i32 524305, ;; Tag i32 0, ;; Unused i32 4, ;; Language Id metadata !"MySource.cpp", @@ -1027,19 +1046,24 @@ int main(int argc, char *argv[]) { i32 0} ;; Runtime version ;; -;; Define the compile unit for the header file "/Users/mine/sources/MyHeader.h". +;; Define the file for the file "/Users/mine/sources/MySource.cpp". ;; !1 = metadata !{ - i32 458769, ;; Tag - i32 0, ;; Unused - i32 4, ;; Language Id - metadata !"MyHeader.h", + i32 524329, ;; Tag + metadata !"MySource.cpp", metadata !"/Users/mine/sources", - metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build 00)", - i1 false, ;; Main Compile Unit - i1 false, ;; Optimized compile unit - metadata !"", ;; Compiler flags - i32 0} ;; Runtime version + metadata !3 ;; Compile unit +} + +;; +;; Define the file for the file "/Users/mine/sources/Myheader.h" +;; +!3 = metadata !{ + i32 524329, ;; Tag + metadata !"Myheader.h" + metadata !"/Users/mine/sources", + metadata !3 ;; Compile unit +} ...@@ -1081,15 +1105,15 @@ int MyGlobal = 100; ;; variable anchor and the global variable itself. ;; !0 = metadata !{ - i32 458804, ;; Tag + i32 524340, ;; Tag i32 0, ;; Unused metadata !1, ;; Context metadata !"MyGlobal", ;; Name metadata !"MyGlobal", ;; Display Name metadata !"MyGlobal", ;; Linkage Name - metadata !1, ;; Compile Unit + metadata !3, ;; Compile Unit i32 1, ;; Line Number - metadata !2, ;; Type + metadata !4, ;; Type i1 false, ;; Is a local variable i1 true, ;; Is this a definition i32* @MyGlobal ;; The global variable @@ -1099,11 +1123,11 @@ int MyGlobal = 100; ;; Define the basic type of 32 bit signed integer. Note that since int is an ;; intrinsic type the source file is NULL and line 0. ;; -!2 = metadata !{ - i32 458788, ;; Tag +!4 = metadata !{ + i32 524324, ;; Tag metadata !1, ;; Context metadata !"int", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in Bits i64 32, ;; Align in Bits @@ -1143,16 +1167,16 @@ int main(int argc, char *argv[]) { ;; anchor is 46, which is the same as the tag for subprograms ;; (46 = DW_TAG_subprogram.) ;; -!0 = metadata !{ - i32 458798, ;; Tag +!6 = metadata !{ + i32 524334, ;; Tag i32 0, ;; Unused metadata !1, ;; Context metadata !"main", ;; Name metadata !"main", ;; Display name metadata !"main", ;; Linkage name - metadata !1, ;; Compile unit + metadata !1, ;; File i32 1, ;; Line number - metadata !2, ;; Type + metadata !4, ;; Type i1 false, ;; Is local i1 true ;; Is definition } @@ -1188,10 +1212,10 @@ define i32 @main(i32 %argc, i8** %argv) {
!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"bool", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 8, ;; Size in Bits i64 8, ;; Align in Bits @@ -1214,10 +1238,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"char", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 8, ;; Size in Bits i64 8, ;; Align in Bits @@ -1240,10 +1264,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"unsigned char", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 8, ;; Size in Bits i64 8, ;; Align in Bits @@ -1266,10 +1290,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"short int", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 16, ;; Size in Bits i64 16, ;; Align in Bits @@ -1292,10 +1316,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"short unsigned int", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 16, ;; Size in Bits i64 16, ;; Align in Bits @@ -1318,10 +1342,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"int", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in Bits i64 32, ;; Align in Bits @@ -1343,10 +1367,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"unsigned int", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in Bits i64 32, ;; Align in Bits @@ -1369,10 +1393,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"long long int", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 64, ;; Size in Bits i64 64, ;; Align in Bits @@ -1395,10 +1419,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"long long unsigned int", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 64, ;; Size in Bits i64 64, ;; Align in Bits @@ -1421,10 +1445,10 @@ define i32 @main(i32 %argc, i8** %argv) {!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"float", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in Bits i64 32, ;; Align in Bits @@ -1447,10 +1471,10 @@ define i32 @main(i32 %argc, i8** %argv) {diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h index 41579586d98..9b1d1b306f2 100644 --- a/include/llvm/Analysis/DebugInfo.h +++ b/include/llvm/Analysis/DebugInfo.h @@ -214,7 +214,13 @@ namespace llvm { DIScope getContext() const { return getFieldAs!2 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"double",;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 64, ;; Size in Bits i64 64, ;; Align in Bits @@ -1486,10 +1510,10 @@ typedef const int *IntPtr; ;; Define the typedef "IntPtr". ;; !2 = metadata !{ - i32 458774, ;; Tag + i32 524310, ;; Tag metadata !1, ;; Context metadata !"IntPtr", ;; Name - metadata !3, ;; Compile unit + metadata !3, ;; File i32 0, ;; Line number i64 0, ;; Size in bits i64 0, ;; Align in bits @@ -1502,10 +1526,10 @@ typedef const int *IntPtr; ;; Define the pointer type. ;; !4 = metadata !{ - i32 458767, ;; Tag + i32 524303, ;; Tag metadata !1, ;; Context metadata !"", ;; Name - metadata !1, ;; Compile unit + metadata !1, ;; File i32 0, ;; Line number i64 64, ;; Size in bits i64 64, ;; Align in bits @@ -1517,10 +1541,10 @@ typedef const int *IntPtr; ;; Define the const type. ;; !5 = metadata !{ - i32 458790, ;; Tag + i32 524326, ;; Tag metadata !1, ;; Context metadata !"", ;; Name - metadata !1, ;; Compile unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in bits i64 32, ;; Align in bits @@ -1532,10 +1556,10 @@ typedef const int *IntPtr; ;; Define the int type. ;; !6 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"int", ;; Name - metadata !1, ;; Compile unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in bits i64 32, ;; Align in bits @@ -1575,10 +1599,10 @@ struct Color { ;; Define basic type for unsigned int. ;; !5 = metadata !{ - i32 458788, ;; Tag + i32 524324, ;; Tag metadata !1, ;; Context metadata !"unsigned int", - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 0, ;; Line number i64 32, ;; Size in Bits i64 32, ;; Align in Bits @@ -1590,7 +1614,7 @@ struct Color { ;; Define composite type for struct Color. ;; !2 = metadata !{ - i32 458771, ;; Tag + i32 524307, ;; Tag metadata !1, ;; Context metadata !"Color", ;; Name metadata !1, ;; Compile unit @@ -1608,10 +1632,10 @@ struct Color { ;; Define the Red field. ;; !4 = metadata !{ - i32 458765, ;; Tag + i32 524301, ;; Tag metadata !1, ;; Context metadata !"Red", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 2, ;; Line number i64 32, ;; Size in bits i64 32, ;; Align in bits @@ -1624,10 +1648,10 @@ struct Color { ;; Define the Green field. ;; !6 = metadata !{ - i32 458765, ;; Tag + i32 524301, ;; Tag metadata !1, ;; Context metadata !"Green", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 3, ;; Line number i64 32, ;; Size in bits i64 32, ;; Align in bits @@ -1640,10 +1664,10 @@ struct Color { ;; Define the Blue field. ;; !7 = metadata !{ - i32 458765, ;; Tag + i32 524301, ;; Tag metadata !1, ;; Context metadata !"Blue", ;; Name - metadata !1, ;; Compile Unit + metadata !1, ;; File i32 4, ;; Line number i64 32, ;; Size in bits i64 32, ;; Align in bits @@ -1688,10 +1712,10 @@ enum Trees { ;; Define composite type for enum Trees ;; !2 = metadata !{ - i32 458756, ;; Tag + i32 524292, ;; Tag metadata !1, ;; Context metadata !"Trees", ;; Name - metadata !1, ;; Compile unit + metadata !1, ;; File i32 1, ;; Line number i64 32, ;; Size in bits i64 32, ;; Align in bits @@ -1710,17 +1734,17 @@ enum Trees { ;; ;; Define Spruce enumerator. ;; -!4 = metadata !{i32 458792, metadata !"Spruce", i64 100} +!4 = metadata !{i32 524328, metadata !"Spruce", i64 100} ;; ;; Define Oak enumerator. ;; -!5 = metadata !{i32 458792, metadata !"Oak", i64 200} +!5 = metadata !{i32 524328, metadata !"Oak", i64 200} ;; ;; Define Maple enumerator. ;; -!6 = metadata !{i32 458792, metadata !"Maple", i64 300} +!6 = metadata !{i32 524328, metadata !"Maple", i64 300}(1); } StringRef getName() const { return getStringField(2); } - DICompileUnit getCompileUnit() const{ return getFieldAs (3); } + DICompileUnit getCompileUnit() const{ + if (getVersion() == llvm::LLVMDebugVersion7) + return getFieldAs (3); + + DIFile F = getFieldAs (3); + return F.getCompileUnit(); + } unsigned getLineNumber() const { return getUnsignedField(4); } uint64_t getSizeInBits() const { return getUInt64Field(5); } uint64_t getAlignInBits() const { return getUInt64Field(6); } @@ -324,7 +330,14 @@ namespace llvm { StringRef getName() const { return getStringField(3); } StringRef getDisplayName() const { return getStringField(4); } StringRef getLinkageName() const { return getStringField(5); } - DICompileUnit getCompileUnit() const{ return getFieldAs (6); } + DICompileUnit getCompileUnit() const{ + if (getVersion() == llvm::LLVMDebugVersion7) + return getFieldAs (6); + + DIFile F = getFieldAs (6); + return F.getCompileUnit(); + } + unsigned getLineNumber() const { return getUnsignedField(7); } DIType getType() const { return getFieldAs (8); } @@ -346,7 +359,13 @@ namespace llvm { StringRef getName() const { return getStringField(3); } StringRef getDisplayName() const { return getStringField(4); } StringRef getLinkageName() const { return getStringField(5); } - DICompileUnit getCompileUnit() const{ return getFieldAs (6); } + DICompileUnit getCompileUnit() const{ + if (getVersion() == llvm::LLVMDebugVersion7) + return getFieldAs (6); + + DIFile F = getFieldAs (6); + return F.getCompileUnit(); + } unsigned getLineNumber() const { return getUnsignedField(7); } DICompositeType getType() const { return getFieldAs (8); } @@ -413,7 +432,13 @@ namespace llvm { DIScope getContext() const { return getFieldAs (1); } StringRef getName() const { return getStringField(2); } - DICompileUnit getCompileUnit() const{ return getFieldAs (3); } + DICompileUnit getCompileUnit() const{ + if (getVersion() == llvm::LLVMDebugVersion7) + return getFieldAs (3); + + DIFile F = getFieldAs (3); + return F.getCompileUnit(); + } unsigned getLineNumber() const { return getUnsignedField(4); } DIType getType() const { return getFieldAs (5); } @@ -461,7 +486,13 @@ namespace llvm { StringRef getName() const { return getStringField(2); } StringRef getDirectory() const { return getContext().getDirectory(); } StringRef getFilename() const { return getContext().getFilename(); } - DICompileUnit getCompileUnit() const { return getFieldAs (3);} + DICompileUnit getCompileUnit() const{ + if (getVersion() == llvm::LLVMDebugVersion7) + return getFieldAs (3); + + DIFile F = getFieldAs (3); + return F.getCompileUnit(); + } unsigned getLineNumber() const { return getUnsignedField(4); } }; @@ -523,14 +554,14 @@ namespace llvm { /// CreateBasicType - Create a basic type like int, float, etc. DIBasicType CreateBasicType(DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, unsigned LineNumber, + DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, unsigned Encoding); /// CreateBasicType - Create a basic type like int, float, etc. DIBasicType CreateBasicTypeEx(DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, unsigned LineNumber, + DIFile F, unsigned LineNumber, Constant *SizeInBits, Constant *AlignInBits, Constant *OffsetInBits, unsigned Flags, unsigned Encoding); @@ -539,7 +570,7 @@ namespace llvm { /// pointer, typedef, etc. DIDerivedType CreateDerivedType(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, @@ -548,17 +579,18 @@ namespace llvm { /// CreateDerivedType - Create a derived type like const qualified type, /// pointer, typedef, etc. DIDerivedType CreateDerivedTypeEx(unsigned Tag, DIDescriptor Context, - StringRef Name, - DICompileUnit CompileUnit, - unsigned LineNumber, - Constant *SizeInBits, Constant *AlignInBits, - Constant *OffsetInBits, unsigned Flags, - DIType DerivedFrom); + StringRef Name, + DIFile F, + unsigned LineNumber, + Constant *SizeInBits, + Constant *AlignInBits, + Constant *OffsetInBits, unsigned Flags, + DIType DerivedFrom); /// CreateCompositeType - Create a composite type like array, struct, etc. DICompositeType CreateCompositeType(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, @@ -573,22 +605,23 @@ namespace llvm { /// CreateCompositeType - Create a composite type like array, struct, etc. DICompositeType CreateCompositeTypeEx(unsigned Tag, DIDescriptor Context, - StringRef Name, - DICompileUnit CompileUnit, - unsigned LineNumber, - Constant *SizeInBits, - Constant *AlignInBits, - Constant *OffsetInBits, unsigned Flags, - DIType DerivedFrom, - DIArray Elements, - unsigned RunTimeLang = 0); + StringRef Name, + DIFile F, + unsigned LineNumber, + Constant *SizeInBits, + Constant *AlignInBits, + Constant *OffsetInBits, + unsigned Flags, + DIType DerivedFrom, + DIArray Elements, + unsigned RunTimeLang = 0); /// CreateSubprogram - Create a new descriptor for the specified subprogram. /// See comments in DISubprogram for descriptions of these fields. DISubprogram CreateSubprogram(DIDescriptor Context, StringRef Name, StringRef DisplayName, StringRef LinkageName, - DICompileUnit CompileUnit, unsigned LineNo, + DIFile F, unsigned LineNo, DIType Ty, bool isLocalToUnit, bool isDefinition, unsigned VK = 0, @@ -605,21 +638,21 @@ namespace llvm { CreateGlobalVariable(DIDescriptor Context, StringRef Name, StringRef DisplayName, StringRef LinkageName, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNo, DIType Ty, bool isLocalToUnit, bool isDefinition, llvm::GlobalVariable *GV); /// CreateVariable - Create a new descriptor for the specified variable. DIVariable CreateVariable(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, unsigned LineNo, + DIFile F, unsigned LineNo, DIType Ty); /// CreateComplexVariable - Create a new descriptor for the specified /// variable which has a complex address expression for its address. DIVariable CreateComplexVariable(unsigned Tag, DIDescriptor Context, const std::string &Name, - DICompileUnit CompileUnit, unsigned LineNo, + DIFile F, unsigned LineNo, DIType Ty, SmallVector &addr); @@ -631,7 +664,7 @@ namespace llvm { /// CreateNameSpace - This creates new descriptor for a namespace /// with the specified parent context. DINameSpace CreateNameSpace(DIDescriptor Context, StringRef Name, - DICompileUnit CU, unsigned LineNo); + DIFile F, unsigned LineNo); /// CreateLocation - Creates a debug info location. DILocation CreateLocation(unsigned LineNo, unsigned ColumnNo, diff --git a/include/llvm/Support/Dwarf.h b/include/llvm/Support/Dwarf.h index 5f591d40288..31f4fd223dc 100644 --- a/include/llvm/Support/Dwarf.h +++ b/include/llvm/Support/Dwarf.h @@ -22,7 +22,8 @@ namespace llvm { // Debug info constants. enum { - LLVMDebugVersion = (7 << 16), // Current version of debug information. + LLVMDebugVersion = (8 << 16), // Current version of debug information. + LLVMDebugVersion7 = (7 << 16), // Constant for version 7. LLVMDebugVersion6 = (6 << 16), // Constant for version 6. LLVMDebugVersion5 = (5 << 16), // Constant for version 5. LLVMDebugVersion4 = (4 << 16), // Constant for version 4. diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 49b2e6b2c54..fda69ac39a2 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -41,9 +41,9 @@ bool DIDescriptor::ValidDebugInfo(MDNode *N, unsigned OptLevel) { DIDescriptor DI(N); - // Check current version. Allow Version6 for now. + // Check current version. Allow Version7 for now. unsigned Version = DI.getVersion(); - if (Version != LLVMDebugVersion && Version != LLVMDebugVersion6) + if (Version != LLVMDebugVersion && Version != LLVMDebugVersion7) return false; switch (DI.getTag()) { @@ -698,7 +698,7 @@ DIEnumerator DIFactory::CreateEnumerator(StringRef Name, uint64_t Val){ /// CreateBasicType - Create a basic type like int, float, etc. DIBasicType DIFactory::CreateBasicType(DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, @@ -708,7 +708,7 @@ DIBasicType DIFactory::CreateBasicType(DIDescriptor Context, GetTagConstant(dwarf::DW_TAG_base_type), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber), ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBits), ConstantInt::get(Type::getInt64Ty(VMContext), AlignInBits), @@ -723,7 +723,7 @@ DIBasicType DIFactory::CreateBasicType(DIDescriptor Context, /// CreateBasicType - Create a basic type like int, float, etc. DIBasicType DIFactory::CreateBasicTypeEx(DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, Constant *SizeInBits, Constant *AlignInBits, @@ -733,7 +733,7 @@ DIBasicType DIFactory::CreateBasicTypeEx(DIDescriptor Context, GetTagConstant(dwarf::DW_TAG_base_type), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber), SizeInBits, AlignInBits, @@ -773,7 +773,7 @@ DIType DIFactory::CreateArtificialType(DIType Ty) { DIDerivedType DIFactory::CreateDerivedType(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, @@ -784,7 +784,7 @@ DIDerivedType DIFactory::CreateDerivedType(unsigned Tag, GetTagConstant(Tag), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber), ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBits), ConstantInt::get(Type::getInt64Ty(VMContext), AlignInBits), @@ -801,7 +801,7 @@ DIDerivedType DIFactory::CreateDerivedType(unsigned Tag, DIDerivedType DIFactory::CreateDerivedTypeEx(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, Constant *SizeInBits, Constant *AlignInBits, @@ -812,7 +812,7 @@ DIDerivedType DIFactory::CreateDerivedTypeEx(unsigned Tag, GetTagConstant(Tag), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber), SizeInBits, AlignInBits, @@ -828,7 +828,7 @@ DIDerivedType DIFactory::CreateDerivedTypeEx(unsigned Tag, DICompositeType DIFactory::CreateCompositeType(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, uint64_t SizeInBits, uint64_t AlignInBits, @@ -843,7 +843,7 @@ DICompositeType DIFactory::CreateCompositeType(unsigned Tag, GetTagConstant(Tag), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber), ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBits), ConstantInt::get(Type::getInt64Ty(VMContext), AlignInBits), @@ -862,7 +862,7 @@ DICompositeType DIFactory::CreateCompositeType(unsigned Tag, DICompositeType DIFactory::CreateCompositeTypeEx(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNumber, Constant *SizeInBits, Constant *AlignInBits, @@ -876,7 +876,7 @@ DICompositeType DIFactory::CreateCompositeTypeEx(unsigned Tag, GetTagConstant(Tag), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber), SizeInBits, AlignInBits, @@ -897,7 +897,7 @@ DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context, StringRef Name, StringRef DisplayName, StringRef LinkageName, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNo, DIType Ty, bool isLocalToUnit, bool isDefinition, @@ -912,7 +912,7 @@ DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context, MDString::get(VMContext, Name), MDString::get(VMContext, DisplayName), MDString::get(VMContext, LinkageName), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNo), Ty.getNode(), ConstantInt::get(Type::getInt1Ty(VMContext), isLocalToUnit), @@ -957,7 +957,7 @@ DIGlobalVariable DIFactory::CreateGlobalVariable(DIDescriptor Context, StringRef Name, StringRef DisplayName, StringRef LinkageName, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNo, DIType Ty,bool isLocalToUnit, bool isDefinition, llvm::GlobalVariable *Val) { Value *Elts[] = { @@ -967,7 +967,7 @@ DIFactory::CreateGlobalVariable(DIDescriptor Context, StringRef Name, MDString::get(VMContext, Name), MDString::get(VMContext, DisplayName), MDString::get(VMContext, LinkageName), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNo), Ty.getNode(), ConstantInt::get(Type::getInt1Ty(VMContext), isLocalToUnit), @@ -989,13 +989,14 @@ DIFactory::CreateGlobalVariable(DIDescriptor Context, StringRef Name, /// CreateVariable - Create a new descriptor for the specified variable. DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, unsigned LineNo, + DIFile F, + unsigned LineNo, DIType Ty) { Value *Elts[] = { GetTagConstant(Tag), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNo), Ty.getNode(), }; @@ -1007,7 +1008,7 @@ DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context, /// which has a complex address expression for its address. DIVariable DIFactory::CreateComplexVariable(unsigned Tag, DIDescriptor Context, const std::string &Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNo, DIType Ty, SmallVector &addr) { @@ -1015,7 +1016,7 @@ DIVariable DIFactory::CreateComplexVariable(unsigned Tag, DIDescriptor Context, Elts.push_back(GetTagConstant(Tag)); Elts.push_back(Context.getNode()); Elts.push_back(MDString::get(VMContext, Name)); - Elts.push_back(CompileUnit.getNode()); + Elts.push_back(F.getNode()); Elts.push_back(ConstantInt::get(Type::getInt32Ty(VMContext), LineNo)); Elts.push_back(Ty.getNode()); Elts.insert(Elts.end(), addr.begin(), addr.end()); @@ -1040,13 +1041,13 @@ DILexicalBlock DIFactory::CreateLexicalBlock(DIDescriptor Context, /// CreateNameSpace - This creates new descriptor for a namespace /// with the specified parent context. DINameSpace DIFactory::CreateNameSpace(DIDescriptor Context, StringRef Name, - DICompileUnit CompileUnit, + DIFile F, unsigned LineNo) { Value *Elts[] = { GetTagConstant(dwarf::DW_TAG_namespace), Context.getNode(), MDString::get(VMContext, Name), - CompileUnit.getNode(), + F.getNode(), ConstantInt::get(Type::getInt32Ty(VMContext), LineNo) }; return DINameSpace(MDNode::get(VMContext, &Elts[0], 5)); diff --git a/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp b/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp index 4c8e0e5509c..2a9f1f156b1 100644 --- a/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp +++ b/test/FrontendC++/2010-02-17-DbgArtificialArg.cpp @@ -1,4 +1,4 @@ -// RUN: %llvmgcc -g -S %s -o - | grep DW_TAG_pointer_type | grep "i32 458767, metadata .., metadata ..., metadata .., i32 ., i64 .., i64 .., i64 0, i32 64, metadata ..." +// RUN: %llvmgcc -g -S %s -o - | grep DW_TAG_pointer_type | grep "i32 524303, metadata .., metadata ..., metadata .., i32 ., i64 .., i64 .., i64 0, i32 64, metadata ..." // Here, second to last argument "i32 64" indicates that artificial type is set. // Test to artificial attribute attahed to "this" pointer type. // Radar 7655792 and 7655002