that the LLVM debug information</a> takes, which is useful for those
interested in creating front-ends or dealing directly with the information.
Further, this document provides specific examples of what debug information
- for C/C++.</p>
+ for C/C++ looks like.</p>
</div>
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)
+ i32 ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual
+ i32 ;; Index into a virtual function
+ metadata, ;; indicates which base type contains the vtable pointer for the
+ ;; derived class
+ i1 ;; isArtificial
+ i1 ;; isOptimized
+ Function *;; Pointer to LLVM function
}
</pre>
</div>
<div class="doc_code">
<pre>
!3 = metadata !{
- i32, ;; Tag = 13 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
- metadata ;; Reference to context descriptor
+ i32, ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
+ metadata,;; Reference to context descriptor
+ i32, ;; Line number
+ i32, ;; Column number
+ metadata,;; Reference to source file
+ i32 ;; Unique ID to identify blocks from a template function
}
</pre>
</div>
<p>These descriptors provide debug information about nested blocks within a
- subprogram. The array of member descriptors is used to define local
- variables and deeper nested blocks.</p>
+ subprogram. The line number and column numbers are used to dinstinguish
+ two lexical blocks at same depth. </p>
</div>
metadata, ;; Name (may be "" for anonymous types)
metadata, ;; Reference to file 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
+ i64, ;; Size in bits
+ i64, ;; Alignment in bits
+ i64, ;; Offset in bits
metadata ;; Reference to type derived from
}
</pre>
the bit offset if embedded in a <a href="#format_composite_type">composite
type</a>.</p>
-<p>Note that the <tt>void *</tt> type is expressed as a
- <tt>llvm.dbg.derivedtype.type</tt> with tag of <tt>DW_TAG_pointer_type</tt>
- and <tt>NULL</tt> derived type.</p>
+<p>Note that the <tt>void *</tt> type is expressed as a type derived from NULL.
+</p>
</div>
<div class="doc_code">
<pre>
-%<a href="#format_subrange">llvm.dbg.subrange.type</a> = type {
+!42 = metadata !{
i32, ;; Tag = 33 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subrange_type)
i64, ;; Low value
i64 ;; High value
metadata, ;; Context
metadata, ;; Name
metadata, ;; Reference to file where defined
- i32, ;; Line number where defined
+ i32, ;; 24 bit - Line number where defined
+ ;; 8 bit - Argument number. 1 indicates 1st argument.
metadata ;; Type descriptor
}
</pre>
<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>(metadata, metadata)
</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>
-
+ first argument is metadata holding alloca for the variable.</tt>. The
+ second argument is metadata containing description of the variable. </p>
</div>
<!-- ======================================================================= -->
<p>This intrinsic provides information when a user source variable is set to a
new value. The first argument is the new value (wrapped as metadata). The
second argument is the offset in the user source variable where the new value
- is written. The third argument is
- the <tt>%<a href="#format_variables">llvm.dbg.variable</a></tt> containing
- the description of the user source variable. </p>
-
+ is written. The third argument is metadata containing description of the
+ user source variable. </p>
</div>
<!-- ======================================================================= -->
%Y = alloca i32, align 4 ; <i32*> [#uses=4]
%Z = alloca i32, align 4 ; <i32*> [#uses=3]
%0 = bitcast i32* %X to {}* ; <{}*> [#uses=1]
- call void @llvm.dbg.declare({}* %0, metadata !0), !dbg !7
+ call void @llvm.dbg.declare(metadata !{i32 * %X}, metadata !0), !dbg !7
store i32 21, i32* %X, !dbg !8
%1 = bitcast i32* %Y to {}* ; <{}*> [#uses=1]
- call void @llvm.dbg.declare({}* %1, metadata !9), !dbg !10
+ call void @llvm.dbg.declare(metadata !{i32 * %Y}, metadata !9), !dbg !10
store i32 22, i32* %Y, !dbg !11
%2 = bitcast i32* %Z to {}* ; <{}*> [#uses=1]
- call void @llvm.dbg.declare({}* %2, metadata !12), !dbg !14
+ call void @llvm.dbg.declare(metadata !{i32 * %Z}, metadata !12), !dbg !14
store i32 23, i32* %Z, !dbg !15
%tmp = load i32* %X, !dbg !16 ; <i32> [#uses=1]
%tmp1 = load i32* %Y, !dbg !16 ; <i32> [#uses=1]
ret void, !dbg !18
}
-declare void @llvm.dbg.declare({}*, metadata) nounwind readnone
+declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
!0 = metadata !{i32 459008, metadata !1, metadata !"X",
metadata !3, i32 2, metadata !6}; [ DW_TAG_auto_variable ]
<div class="doc_code">
<pre>
-call void @llvm.dbg.declare({}* %0, metadata !0), !dbg !7
+call void @llvm.dbg.declare(metadata, metadata !0), !dbg !7
</pre>
</div>
<div class="doc_code">
<pre>
-call void @llvm.dbg.declare({}* %2, metadata !12), !dbg !14
+call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
</pre>
</div>
i32 524329, ;; Tag
metadata !"MySource.cpp",
metadata !"/Users/mine/sources",
- metadata !3 ;; Compile unit
+ metadata !2 ;; Compile unit
}
;;
i32 524329, ;; Tag
metadata !"Myheader.h"
metadata !"/Users/mine/sources",
- metadata !3 ;; Compile unit
+ metadata !2 ;; Compile unit
}
...