summaryrefslogtreecommitdiffstats
path: root/docs/SourceLevelDebugging.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/SourceLevelDebugging.html')
-rw-r--r--docs/SourceLevelDebugging.html321
1 files changed, 172 insertions, 149 deletions
diff --git a/docs/SourceLevelDebugging.html b/docs/SourceLevelDebugging.html
index 186ea4a..4cfb52e 100644
--- a/docs/SourceLevelDebugging.html
+++ b/docs/SourceLevelDebugging.html
@@ -8,7 +8,7 @@
</head>
<body>
-<div class="doc_title">Source Level Debugging with LLVM</div>
+<h1>Source Level Debugging with LLVM</h1>
<table class="layout" style="width:100%">
<tr class="layout">
@@ -68,10 +68,10 @@ height="369">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
-<div class="doc_text">
+<div>
<p>This document is the central repository for all information pertaining to
debug information in LLVM. It describes the <a href="#format">actual format
@@ -80,14 +80,12 @@ height="369">
Further, this document provides specific examples of what debug information
for C/C++ looks like.</p>
-</div>
-
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="phil">Philosophy behind LLVM debugging information</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>The idea of the LLVM debugging information is to capture how the important
pieces of the source-language's Abstract Syntax Tree map onto LLVM code.
@@ -133,11 +131,11 @@ height="369">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="consumers">Debug information consumers</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>The role of debug information is to provide meta information normally
stripped away during the compilation process. This meta information provides
@@ -157,11 +155,11 @@ height="369">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="debugopt">Debugging optimized code</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>An extremely high priority of LLVM debugging information is to make it
interact well with optimizations and analysis. In particular, the LLVM debug
@@ -226,13 +224,15 @@ height="369">
</div>
+</div>
+
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="format">Debugging information format</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
-<div class="doc_text">
+<div>
<p>LLVM debugging information has been carefully designed to make it possible
for the optimizer to optimize the program and debugging information without
@@ -265,14 +265,12 @@ height="369">
common to any source-language. The <a href="#ccxx_frontend">next section</a>
describes the data layout conventions used by the C and C++ front-ends.</p>
-</div>
-
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="debug_info_descriptors">Debug information descriptors</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>In consideration of the complexity and volume of debug information, LLVM
provides a specification for well formed debug descriptors. </p>
@@ -312,14 +310,12 @@ height="369">
<p>The details of the various descriptors follow.</p>
-</div>
-
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_compile_units">Compile unit descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -351,11 +347,11 @@ height="369">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_files">File descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -380,11 +376,11 @@ height="369">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_global_variables">Global variable descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -407,16 +403,17 @@ height="369">
</div>
<p>These descriptors provide debug information about globals variables. The
-provide details such as name, type and where the variable is defined.</p>
+provide details such as name, type and where the variable is defined. All
+global variables are collected by named metadata <tt>!llvm.dbg.gv</tt>.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_subprograms">Subprogram descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -432,30 +429,35 @@ provide details such as name, type and where the variable is defined.</p>
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)
- i32 ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual
- i32 ;; Index into a virtual function
+ 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
+ i1, ;; isArtificial
+ i1, ;; isOptimized
+ Function *,;; Pointer to LLVM function
+ metadata, ;; Lists function template parameters
+ metadata ;; Function declaration descriptor
}
</pre>
</div>
<p>These descriptors provide debug information about functions, methods and
subprograms. They provide details such as name, return types and the source
- location where the subprogram is defined.</p>
+ location where the subprogram is defined.
+ All subprogram descriptors are collected by a named metadata
+ <tt>!llvm.dbg.sp</tt>.
+</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_blocks">Block descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -463,7 +465,9 @@ provide details such as name, type and where the variable is defined.</p>
i32, ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
metadata,;; Reference to context descriptor
i32, ;; Line number
- i32 ;; Column number
+ i32, ;; Column number
+ metadata,;; Reference to source file
+ i32 ;; Unique ID to identify blocks from a template function
}
</pre>
</div>
@@ -475,11 +479,11 @@ provide details such as name, type and where the variable is defined.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_basic_type">Basic type descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -527,11 +531,11 @@ DW_ATE_unsigned_char = 8
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_derived_type">Derived type descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -544,7 +548,12 @@ DW_ATE_unsigned_char = 8
i64, ;; Size in bits
i64, ;; Alignment in bits
i64, ;; Offset in bits
- metadata ;; Reference to type derived from
+ metadata, ;; Reference to type derived from
+ metadata, ;; (optional) Name of the Objective C property assoicated with
+ ;; Objective-C an ivar
+ metadata, ;; (optional) Name of the Objective C property getter selector.
+ metadata, ;; (optional) Name of the Objective C property setter selector.
+ i32 ;; (optional) Objective C property attributes.
}
</pre>
</div>
@@ -594,11 +603,11 @@ DW_TAG_restrict_type = 55
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_composite_type">Composite type descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -644,7 +653,8 @@ DW_TAG_inheritance = 28
<p>The members of enumeration types (tag = <tt>DW_TAG_enumeration_type</tt>) are
<a href="#format_enumeration">enumerator descriptors</a>, each representing
- the definition of enumeration value for the set.</p>
+ the definition of enumeration value for the set. All enumeration type
+ descriptors are collected by named metadata <tt>!llvm.dbg.enum</tt>.</p>
<p>The members of structure (tag = <tt>DW_TAG_structure_type</tt>) or union (tag
= <tt>DW_TAG_union_type</tt>) types are any one of
@@ -680,11 +690,11 @@ DW_TAG_inheritance = 28
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_subrange">Subrange descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -700,16 +710,17 @@ DW_TAG_inheritance = 28
<a href="#format_composite_type">composite type</a>. The low value defines
the lower bounds typically zero for C/C++. The high value is the upper
bounds. Values are 64 bit. High - low + 1 is the size of the array. If low
- == high the array will be unbounded.</p>
+ > high the array bounds are not included in generated debugging information.
+</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_enumeration">Enumerator descriptors</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -729,11 +740,11 @@ DW_TAG_inheritance = 28
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_variables">Local variables</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -742,7 +753,8 @@ DW_TAG_inheritance = 28
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>
@@ -771,39 +783,39 @@ DW_TAG_return_variable = 258
</div>
+</div>
+
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="format_common_intrinsics">Debugger intrinsic functions</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>LLVM uses several intrinsic functions (name prefixed with "llvm.dbg") to
provide debug information at various points in generated code.</p>
-</div>
-
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_common_declare">llvm.dbg.declare</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<pre>
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 metadata holding alloca for the variable.</tt>. The
+ first argument is metadata holding alloca for the variable. The
second argument is metadata containing description of the variable. </p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_common_value">llvm.dbg.value</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<pre>
void %<a href="#format_common_value">llvm.dbg.value</a>(metadata, i64, metadata)
</pre>
@@ -815,12 +827,14 @@ DW_TAG_return_variable = 258
user source variable. </p>
</div>
+</div>
+
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="format_common_lifetime">Object lifetimes and scoping</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>In many languages, the local variables in functions can have their lifetimes
or scopes limited to a subset of a function. In the C family of languages,
for example, variables are only live (readable and writable) within the
@@ -978,13 +992,15 @@ call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
</div>
+</div>
+
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="ccxx_frontend">C/C++ front-end specific debug information</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
-<div class="doc_text">
+<div>
<p>The C and C++ front-ends represent information about the program in a format
that is effectively identical
@@ -1005,14 +1021,12 @@ call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
<p>The following sections provide examples of various C/C++ constructs and the
debug information that would best describe those constructs.</p>
-</div>
-
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_compile_units">C/C++ source file information</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>Given the source files <tt>MySource.cpp</tt> and <tt>MyHeader.h</tt> located
in the directory <tt>/Users/mine/sources</tt>, the following code:</p>
@@ -1086,11 +1100,11 @@ using <tt>Instruction::getMetadata()</tt> and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_global_variable">C/C++ global variable information</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>Given an integer global variable declared as follows:</p>
@@ -1156,11 +1170,11 @@ int MyGlobal = 100;
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_subprogram">C/C++ function information</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>Given a function declared as follows:</p>
@@ -1192,7 +1206,14 @@ int main(int argc, char *argv[]) {
i32 1, ;; Line number
metadata !4, ;; Type
i1 false, ;; Is local
- i1 true ;; Is definition
+ i1 true, ;; Is definition
+ i32 0, ;; Virtuality attribute, e.g. pure virtual function
+ i32 0, ;; Index into virtual table for C++ methods
+ i32 0, ;; Type that holds virtual table.
+ i32 0, ;; Flags
+ i1 false, ;; True if this function is optimized
+ Function *, ;; Pointer to llvm::Function
+ null ;; Function template parameters
}
;;
;; Define the subprogram itself.
@@ -1206,22 +1227,20 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_basic_types">C/C++ basic types</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>The following are the basic type descriptors for C/C++ core types:</p>
-</div>
-
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_type_bool">bool</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1243,11 +1262,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_char">char</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1269,11 +1288,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_char">unsigned char</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1295,11 +1314,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_short">short</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1321,11 +1340,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_short">unsigned short</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1347,11 +1366,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_int">int</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1372,11 +1391,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_int">unsigned int</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1398,11 +1417,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_long_long">long long</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1424,11 +1443,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1450,11 +1469,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_float">float</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1476,11 +1495,11 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_double">double</a>
-</div>
+</h4>
-<div class="doc_text">
+<div>
<div class="doc_code">
<pre>
@@ -1501,12 +1520,14 @@ define i32 @main(i32 %argc, i8** %argv) {
</div>
+</div>
+
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_derived_types">C/C++ derived types</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>Given the following as an example of C/C++ derived type:</p>
@@ -1587,11 +1608,11 @@ typedef const int *IntPtr;
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_composite_types">C/C++ struct/union types</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>Given the following as an example of C/C++ struct type:</p>
@@ -1700,11 +1721,11 @@ struct Color {
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_enumeration_types">C/C++ enumeration types</a>
-</div>
+</h3>
-<div class="doc_text">
+<div>
<p>Given the following as an example of C/C++ enumeration type:</p>
@@ -1765,6 +1786,8 @@ enum Trees {
</div>
+</div>
+
<!-- *********************************************************************** -->
<hr>
@@ -1775,8 +1798,8 @@ enum Trees {
src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
<a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
- <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
- Last modified: $Date: 2011-02-03 01:22:17 +0100 (Thu, 03 Feb 2011) $
+ <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
+ Last modified: $Date: 2011-04-23 02:30:22 +0200 (Sat, 23 Apr 2011) $
</address>
</body>
OpenPOWER on IntegriCloud