diff options
author | Devang Patel <dpatel@apple.com> | 2009-08-26 05:01:18 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-08-26 05:01:18 +0000 |
commit | 824598883513789516a919651f4b35e7a638ec5c (patch) | |
tree | 5a87b0b92a0c718d5f87d80b51cc4a6b9251eb63 | |
parent | be1f788676ff6a71bc0324ac38af7626fdcf92b2 (diff) |
Revert 79977. It causes llvm-gcc bootstrap failures on some platforms.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80073 91177308-0d34-0410-b5e6-96231b3b80d8
47 files changed, 1924 insertions, 957 deletions
diff --git a/docs/SourceLevelDebugging.html b/docs/SourceLevelDebugging.html index 49ce278522..fab63046a4 100644 --- a/docs/SourceLevelDebugging.html +++ b/docs/SourceLevelDebugging.html @@ -122,8 +122,8 @@ height="369"> <p>The approach used by the LLVM implementation is to use a small set of <a href="#format_common_intrinsics">intrinsic functions</a> to define a mapping between LLVM program objects and the source-level objects. The - description of the source-level program is maintained in LLVM metadata - in an <a href="#ccxx_frontend">implementation-defined format</a> + description of the source-level program is maintained in LLVM global + variables in an <a href="#ccxx_frontend">implementation-defined format</a> (the C/C++ front-end currently uses working draft 7 of the <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3 standard</a>).</p> @@ -240,21 +240,31 @@ height="369"> <p>LLVM debugging information has been carefully designed to make it possible for the optimizer to optimize the program and debugging information without necessarily having to know anything about debugging information. In - particular, te use of metadadta avoids duplicated dubgging information from - the beginning, and the global dead code elimination pass automatically - deletes debugging information for a function if it decides to delete the - function. </p> + particular, the global constant merging pass automatically eliminates + duplicated debugging information (often caused by header files), the global + dead code elimination pass automatically deletes debugging information for a + function if it decides to delete the function, and the linker eliminates + debug information when it merges <tt>linkonce</tt> functions.</p> <p>To do this, most of the debugging information (descriptors for types, variables, functions, source files, etc) is inserted by the language - front-end in the form of LLVM metadata. </p> + front-end in the form of LLVM global variables. These LLVM global variables + are no different from any other global variables, except that they have a web + of LLVM intrinsic functions that point to them. If the last references to a + particular piece of debugging information are deleted (for example, by the + <tt>-globaldce</tt> pass), the extraneous debug information will + automatically become dead and be removed by the optimizer.</p> <p>Debug information is designed to be agnostic about the target debugger and debugging information representation (e.g. DWARF/Stabs/etc). It uses a - generic pass to decode the information that represents variables, types, - functions, namespaces, etc: this allows for arbitrary source-language - semantics and type-systems to be used, as long as there is a module - written for the target debugger to interpret the information. </p> + generic machine debug information pass to decode the information that + represents variables, types, functions, namespaces, etc: this allows for + arbitrary source-language semantics and type-systems to be used, as long as + there is a module written for the target debugger to interpret the + information. In addition, debug global variables are declared in + the <tt>"llvm.metadata"</tt> section. All values declared in this section + are stripped away after target debug information is constructed and before + the program object is emitted.</p> <p>To provide basic functionality, the LLVM debugger does have to make some assumptions about the source-level language being debugged, though it keeps @@ -278,7 +288,9 @@ height="369"> <div class="doc_text"> <p>In consideration of the complexity and volume of debug information, LLVM - provides a specification for well formed debug descriptors. </p> + provides a specification for well formed debug global variables. The + constant value of each of these globals is one of a limited set of + structures, known as debug descriptors.</p> <p>Consumers of LLVM debug information expect the descriptors for program objects to start in a canonical format, but the descriptors can include @@ -291,14 +303,17 @@ height="369"> the range 0x1000 thru 0x2000 (there is a defined enum DW_TAG_user_base = 0x1000.)</p> -<p>The fields of debug descriptors used internally by LLVM +<p>The fields of debug descriptors used internally by LLVM (MachineModuleInfo) are restricted to only the simple data types <tt>int</tt>, <tt>uint</tt>, - <tt>bool</tt>, <tt>float</tt>, <tt>double</tt>, <tt>mdstring</tt> and - <tt>mdnode</tt>. </p> + <tt>bool</tt>, <tt>float</tt>, <tt>double</tt>, <tt>i8*</tt> and + <tt>{ }*</tt>. References to arbitrary values are handled using a + <tt>{ }*</tt> and a cast to <tt>{ }*</tt> expression; typically + references to other field descriptors, arrays of descriptors or global + variables.</p> <div class="doc_code"> <pre> -!1 = metadata !{ +%llvm.dbg.object.type = type { uint, ;; A tag ... } @@ -311,8 +326,8 @@ height="369"> of tags are loosely bound to the tag values of DWARF information entries. However, that does not restrict the use of the information supplied to DWARF targets. To facilitate versioning of debug information, the tag is augmented - with the current debug version (LLVMDebugVersion = 7 << 16 or 0x70000 or - 458752.)</a></p> + with the current debug version (LLVMDebugVersion = 4 << 16 or 0x40000 or + 262144.)</a></p> <p>The details of the various descriptors follow.</p> @@ -327,18 +342,17 @@ height="369"> <div class="doc_code"> <pre> -!0 = metadata !{ - i32, ;; Tag = 17 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> - ;; (DW_TAG_compile_unit) - i32, ;; Unused field. - i32, ;; DWARF language identifier (ex. DW_LANG_C89) - metadata, ;; Source file name - metadata, ;; Source file directory (includes trailing slash) - metadata ;; Producer (ex. "4.0.1 LLVM (LLVM research group)") - i1, ;; True if this is a main compile unit. - i1, ;; True if this is optimized. - metadata, ;; Flags - i32 ;; Runtime version +%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = type { + i32, ;; Tag = 17 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_compile_unit) + { }*, ;; Compile unit anchor = cast = (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_units</a> to { }*) + i32, ;; DWARF language identifier (ex. DW_LANG_C89) + i8*, ;; Source file name + i8*, ;; Source file directory (includes trailing slash) + i8* ;; Producer (ex. "4.0.1 LLVM (LLVM research group)") + i1, ;; True if this is a main compile unit. + i1, ;; True if this is optimized. + i8*, ;; Flags + i32 ;; Runtime version } </pre> </div> @@ -374,20 +388,19 @@ height="369"> <div class="doc_code"> <pre> -!1 = metadata !{ - i32, ;; Tag = 52 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> - ;; (DW_TAG_variable) - i32, ;; Unused field. - metadata, ;; Reference to context descriptor - metadata, ;; Name - metadata, ;; Display name (fully qualified C++ name) - metadata, ;; MIPS linkage name (for C++) - metadata, ;; Reference to compile unit where defined - i32, ;; Line number where defined - metadata, ;; Reference to type descriptor - i1, ;; True if the global is local to compile unit (static) - i1, ;; True if the global is defined in the compile unit (not extern) - { }* ;; Reference to the global variable +%<a href="#format_global_variables">llvm.dbg.global_variable.type</a> = type { + i32, ;; Tag = 52 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_variable) + { }*, ;; Global variable anchor = cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_global_variables">llvm.dbg.global_variables</a> to { }*), + { }*, ;; Reference to context descriptor + i8*, ;; Name + i8*, ;; Display name (fully qualified C++ name) + i8*, ;; MIPS linkage name (for C++) + { }*, ;; Reference to compile unit where defined + i32, ;; Line number where defined + { }*, ;; Reference to type descriptor + i1, ;; True if the global is local to compile unit (static) + i1, ;; True if the global is defined in the compile unit (not extern) + { }* ;; Reference to the global variable } </pre> </div> @@ -406,19 +419,18 @@ provide details such as name, type and where the variable is defined.</p> <div class="doc_code"> <pre> -!2 = metadata !{ - i32, ;; Tag = 46 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> - ;; (DW_TAG_subprogram) - i32, ;; Unused field. - metadata, ;; Reference to context descriptor - metadata, ;; Name - metadata, ;; Display name (fully qualified C++ name) - metadata, ;; MIPS linkage name (for C++) - metadata, ;; Reference to compile unit where defined - i32, ;; Line number where defined - metadata, ;; Reference to type descriptor - i1, ;; True if the global is local to compile unit (static) - i1 ;; True if the global is defined in the compile unit (not extern) +%<a href="#format_subprograms">llvm.dbg.subprogram.type</a> = type { + i32, ;; Tag = 46 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subprogram) + { }*, ;; Subprogram anchor = cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_subprograms">llvm.dbg.subprograms</a> to { }*), + { }*, ;; Reference to context descriptor + i8*, ;; Name + i8*, ;; Display name (fully qualified C++ name) + i8*, ;; MIPS linkage name (for C++) + { }*, ;; Reference to compile unit where defined + i32, ;; Line number where defined + { }*, ;; Reference to type descriptor + i1, ;; True if the global is local to compile unit (static) + i1 ;; True if the global is defined in the compile unit (not extern) } </pre> </div> @@ -438,9 +450,9 @@ provide details such as name, type and where the variable is defined.</p> <div class="doc_code"> <pre> -!3 = metadata !{ - i32, ;; Tag = 13 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block) - metadata ;; Reference to context descriptor +%<a href="#format_blocks">llvm.dbg.block</a> = type { + i32, ;; Tag = 13 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block) + { }* ;; Reference to context descriptor } </pre> </div> @@ -460,18 +472,17 @@ provide details such as name, type and where the variable is defined.</p> <div class="doc_code"> <pre> -!4 = metadata !{ - i32, ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> - ;; (DW_TAG_base_type) - metadata, ;; Reference to context (typically a compile unit) - metadata, ;; Name (may be "" for anonymous types) - metadata, ;; Reference to compile unit where defined (may be NULL) - i32, ;; Line number where defined (may be 0) - i64, ;; Size in bits - i64, ;; Alignment in bits - i64, ;; Offset in bits - i32, ;; Flags - i32 ;; DWARF type encoding +%<a href="#format_basic_type">llvm.dbg.basictype.type</a> = type { + i32, ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_base_type) + { }*, ;; Reference to context (typically a compile unit) + i8*, ;; Name (may be "" for anonymous types) + { }*, ;; Reference to compile unit where defined (may be NULL) + i32, ;; Line number where defined (may be 0) + i64, ;; Size in bits + i64, ;; Alignment in bits + i64, ;; Offset in bits + i32, ;; Flags + i32 ;; DWARF type encoding } </pre> </div> @@ -512,16 +523,16 @@ DW_ATE_unsigned_char = 8 <div class="doc_code"> <pre> -!5 = metadata !{ - i32, ;; Tag (see below) - metadata, ;; Reference to context - metadata, ;; Name (may be "" for anonymous types) - metadata, ;; Reference to compile unit where defined (may be NULL) - i32, ;; Line number where defined (may be 0) - i32, ;; Size in bits - i32, ;; Alignment in bits - i32, ;; Offset in bits - metadata ;; Reference to type derived from +%<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> = type { + i32, ;; Tag (see below) + { }*, ;; Reference to context + i8*, ;; Name (may be "" for anonymous types) + { }*, ;; Reference to compile unit where defined (may be NULL) + i32, ;; Line number where defined (may be 0) + i32, ;; Size in bits + i32, ;; Alignment in bits + i32, ;; Offset in bits + { }* ;; Reference to type derived from } </pre> </div> @@ -580,19 +591,19 @@ DW_TAG_restrict_type = 55 <div class="doc_code"> <pre> -!6 = metadata !{ - i32, ;; Tag (see below) - metadata, ;; Reference to context - metadata, ;; Name (may be "" for anonymous types) - metadata, ;; Reference to compile unit where defined (may be NULL) - i32, ;; Line number where defined (may be 0) - i64, ;; Size in bits - i64, ;; Alignment in bits - i64, ;; Offset in bits - i32, ;; Flags - metadata, ;; Reference to type derived from - metadata, ;; Reference to array of member descriptors - i32 ;; Runtime languages +%<a href="#format_composite_type">llvm.dbg.compositetype.type</a> = type { + i32, ;; Tag (see below) + { }*, ;; Reference to context + i8*, ;; Name (may be "" for anonymous types) + { }*, ;; Reference to compile unit where defined (may be NULL) + i32, ;; Line number where defined (may be 0) + i64, ;; Size in bits + i64, ;; Alignment in bits + i64, ;; Offset in bits + i32, ;; Flags + { }*, ;; Reference to type derived from + { }*, ;; Reference to array of member descriptors + i32 ;; Runtime languages } </pre> </div> @@ -691,11 +702,10 @@ DW_TAG_inheritance = 28 <div class="doc_code"> <pre> -!6 = metadata !{ - i32, ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> - ;; (DW_TAG_enumerator) - metadata, ;; Name - i64 ;; Value +%<a href="#format_enumeration">llvm.dbg.enumerator.type</a> = type { + i32, ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_enumerator) + i8*, ;; Name + i64 ;; Value } </pre> </div> @@ -715,13 +725,13 @@ DW_TAG_inheritance = 28 <div class="doc_code"> <pre> -!7 = metadata !{ - i32, ;; Tag (see below) - metadata, ;; Context - metadata, ;; Name - metadata, ;; Reference to compile unit where defined - i32, ;; Line number where defined - metadata ;; Type descriptor +%<a href="#format_variables">llvm.dbg.variable.type</a> = type { + i32, ;; Tag (see below) + { }*, ;; Context + i8*, ;; Name + { }*, ;; Reference to compile unit where defined + i32, ;; Line number where defined + { }* ;; Type descriptor } </pre> </div> @@ -768,14 +778,14 @@ DW_TAG_return_variable = 258 <div class="doc_text"> <pre> - void %<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint, uint, metadata) + void %<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint, uint, { }* ) </pre> <p>This intrinsic is used to provide correspondence between the source file and the generated code. The first argument is the line number (base 1), second argument is the column number (0 if unknown) and the third argument the - source <tt>%<a href="#format_compile_units">llvm.dbg.compile_unit</a>. - Code following a call to this intrinsic will + source <tt>%<a href="#format_compile_units">llvm.dbg.compile_unit</a>*</tt> + cast to a <tt>{ }*</tt>. Code following a call to this intrinsic will have been defined in close proximity of the line, column and file. This information holds until the next call to <tt>%<a href="#format_common_stoppoint">lvm.dbg.stoppoint</a></tt>.</p> @@ -789,7 +799,7 @@ DW_TAG_return_variable = 258 <div class="doc_text"> <pre> - void %<a href="#format_common_func_start">llvm.dbg.func.start</a>( metadata ) + void %<a href="#format_common_func_start">llvm.dbg.func.start</a>( { }* ) </pre> <p>This intrinsic is used to link the debug information @@ -813,7 +823,7 @@ DW_TAG_return_variable = 258 <div class="doc_text"> <pre> - void %<a href="#format_common_region_start">llvm.dbg.region.start</a>( metadata ) + void %<a href="#format_common_region_start">llvm.dbg.region.start</a>( { }* ) </pre> <p>This intrinsic is used to define the beginning of a declarative scope (ex. @@ -833,7 +843,7 @@ DW_TAG_return_variable = 258 <div class="doc_text"> <pre> - void %<a href="#format_common_region_end">llvm.dbg.region.end</a>( metadata ) + void %<a href="#format_common_region_end">llvm.dbg.region.end</a>( { }* ) </pre> <p>This intrinsic is used to define the end of a declarative scope (ex. block) @@ -854,14 +864,14 @@ DW_TAG_return_variable = 258 <div class="doc_text"> <pre> - void %<a href="#format_common_declare">llvm.dbg.declare</a>( { } *, metadata ) + void %<a href="#format_common_declare">llvm.dbg.declare</a>( { } *, { }* ) </pre> <p>This intrinsic provides information about a local element (ex. variable.) The first argument is the alloca for the variable, cast to a <tt>{ }*</tt>. The second argument is the <tt>%<a href="#format_variables">llvm.dbg.variable</a></tt> containing - the description of the variable. </p> + the description of the variable, also cast to a <tt>{ }*</tt>.</p> </div> @@ -945,29 +955,29 @@ entry: ... - call void @<a href="#format_common_func_start">llvm.dbg.func.start</a>( metadata !0) + call void @<a href="#format_common_func_start">llvm.dbg.func.start</a>( %<a href="#format_subprograms">llvm.dbg.subprogram.type</a>* @llvm.dbg.subprogram ) - call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 2, uint 2, metadata !1) + call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 2, uint 2, %<a href="#format_compile_units">llvm.dbg.compile_unit</a>* @llvm.dbg.compile_unit ) call void @<a href="#format_common_declare">llvm.dbg.declare</a>({}* %X, ...) call void @<a href="#format_common_declare">llvm.dbg.declare</a>({}* %Y, ...) <i>;; Evaluate expression on line 2, assigning to X.</i> - call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 3, uint 2, metadata !1) + call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 3, uint 2, %<a href="#format_compile_units">llvm.dbg.compile_unit</a>* @llvm.dbg.compile_unit ) <i>;; Evaluate expression on line 3, assigning to Y.</i> call void @<a href="#format_common_stoppoint">llvm.region.start</a>() - call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 5, uint 4, metadata !1) + call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 5, uint 4, %<a href="#format_compile_units">llvm.dbg.compile_unit</a>* @llvm.dbg.compile_unit ) call void @<a href="#format_common_declare">llvm.dbg.declare</a>({}* %X, ...) <i>;; Evaluate expression on line 5, assigning to Z.</i> - call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 7, uint 2, metadata !1) + call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 7, uint 2, %<a href="#format_compile_units">llvm.dbg.compile_unit</a>* @llvm.dbg.compile_unit ) call void @<a href="#format_common_region_end">llvm.region.end</a>() - call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 9, uint 2, metadata !1) + call void @<a href="#format_common_stoppoint">llvm.dbg.stoppoint</a>( uint 9, uint 2, %<a href="#format_compile_units">llvm.dbg.compile_unit</a>* @llvm.dbg.compile_unit ) call void @<a href="#format_common_region_end">llvm.region.end</a>() @@ -1087,35 +1097,50 @@ int main(int argc, char *argv[]) { <pre> ... ;; -;; Define the compile unit for the source file "/Users/mine/sources/MySource.cpp". +;; Define types used. In this case we need one for compile unit anchors and one +;; for compile units. +;; +%<a href="#format_anchors">llvm.dbg.anchor.type</a> = type { uint, uint } +%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = type { uint, { }*, uint, uint, i8*, i8*, i8* } +... +;; +;; Define the anchor for compile units. Note that the second field of the +;; anchor is 17, which is the same as the tag for compile units +;; (17 = DW_TAG_compile_unit.) ;; -!3 = metadata !{ - i32 458769, ;; Tag - i32 0, ;; Unused - i32 4, ;; Language Id - metadata !"MySource.cpp", - metadata !"/Users/mine/sources", - metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build 00)", - i1 true, ;; Main Compile Unit - i1 false, ;; Optimized compile unit - metadata !"", ;; Compiler flags - i32 0} ;; Runtime version +%<a href="#format_compile_units">llvm.dbg.compile_units</a> = linkonce constant %<a href="#format_anchors">llvm.dbg.anchor.type</a> { uint 0, uint 17 }, section "llvm.metadata" ;; +;; Define the compile unit for the source file "/Users/mine/sources/MySource.cpp". +;; +%<a href="#format_compile_units">llvm.dbg.compile_unit1</a> = internal constant %<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> { + uint add(uint 17, uint 262144), + { }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_units</a> to { }*), + uint 1, + uint 1, + i8* getelementptr ([13 x i8]* %str1, i32 0, i32 0), + i8* getelementptr ([21 x i8]* %str2, i32 0, i32 0), + i8* getelementptr ([33 x i8]* %str3, i32 0, i32 0) }, section "llvm.metadata" + +;; ;; Define the compile unit for the header file "/Users/mine/sources/MyHeader.h". ;; -!1 = metadata !{ - i32 458769, ;; Tag - i32 0, ;; Unused - i32 4, ;; Language Id - metadata !"MyHeader.h", - 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 +%<a href="#format_compile_units">llvm.dbg.compile_unit2</a> = internal constant %<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> { + uint add(uint 17, uint 262144), + { }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_units</a> to { }*), + uint 1, + uint 1, + i8* getelementptr ([11 x i8]* %str4, int 0, int 0), + i8* getelementptr ([21 x i8]* %str2, int 0, int 0), + i8* getelementptr ([33 x i8]* %str3, int 0, int 0) }, section "llvm.metadata" +;; +;; Define each of the strings used in the compile units. +;; +%str1 = internal constant [13 x i8] c"MySource.cpp\00", section "llvm.metadata"; +%str2 = internal constant [21 x i8] c"/Users/mine/sources/\00", section "llvm.metadata"; +%str3 = internal constant [33 x i8] c"4.0.1 LLVM (LLVM research group)\00", section "llvm.metadata"; +%str4 = internal constant [11 x i8] c"MyHeader.h\00", section "llvm.metadata"; ... </pre> </div> @@ -1142,51 +1167,65 @@ int MyGlobal = 100; <div class="doc_code"> <pre> ;; +;; Define types used. One for global variable anchors, one for the global +;; variable descriptor, one for the global's basic type and one for the global's +;; compile unit. +;; +%<a href="#format_anchors">llvm.dbg.anchor.type</a> = type { uint, uint } +%<a href="#format_global_variables">llvm.dbg.global_variable.type</a> = type { uint, { }*, { }*, i8*, { }*, uint, { }*, bool, bool, { }*, uint } +%<a href="#format_basic_type">llvm.dbg.basictype.type</a> = type { uint, { }*, i8*, { }*, int, uint, uint, uint, uint } +%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = ... +... +;; ;; Define the global itself. ;; %MyGlobal = global int 100 ... ;; -;; List of debug info of globals +;; Define the anchor for global variables. Note that the second field of the +;; anchor is 52, which is the same as the tag for global variables +;; (52 = DW_TAG_variable.) ;; -!llvm.dbg.gv = !{!0} +%<a href="#format_global_variables">llvm.dbg.global_variables</a> = linkonce constant %<a href="#format_anchors">llvm.dbg.anchor.type</a> { uint 0, uint 52 }, section "llvm.metadata" ;; ;; Define the global variable descriptor. Note the reference to the global ;; variable anchor and the global variable itself. ;; -!0 = metadata !{ - i32 458804, ;; Tag - i32 0, ;; Unused - metadata !1, ;; Context - metadata !"MyGlobal", ;; Name - metadata !"MyGlobal", ;; Display Name - metadata !"MyGlobal", ;; Linkage Name - metadata !1, ;; Compile Unit - i32 1, ;; Line Number - metadata !2, ;; Type - i1 false, ;; Is a local |