From 9e2446b38c94db61b2416c28fee415c03663c11c Mon Sep 17 00:00:00 2001
From: rdivacky 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) {@@ -1738,7 +1762,7 @@ enum Trees { Chris Lattner!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}
LLVM Compiler Infrastructure
- Last modified: $Date: 2010-01-11 23:53:48 +0100 (Mon, 11 Jan 2010) $ + Last modified: $Date: 2010-03-09 01:44:10 +0100 (Tue, 09 Mar 2010) $