<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>Source Level Debugging with LLVM</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">Source Level Debugging with LLVM</div>

<table class="layout" style="width:100%">
  <tr class="layout">
    <td class="left">
<ul>
  <li><a href="#introduction">Introduction</a>
  <ol>
    <li><a href="#phil">Philosophy behind LLVM debugging information</a></li>
    <li><a href="#consumers">Debug information consumers</a></li>
    <li><a href="#debugopt">Debugging optimized code</a></li>
  </ol></li>
  <li><a href="#format">Debugging information format</a>
  <ol>
    <li><a href="#debug_info_descriptors">Debug information descriptors</a>
    <ul>
      <li><a href="#format_anchors">Anchor descriptors</a></li>
      <li><a href="#format_compile_units">Compile unit descriptors</a></li>
      <li><a href="#format_global_variables">Global variable descriptors</a></li>
      <li><a href="#format_subprograms">Subprogram descriptors</a></li>
      <li><a href="#format_blocks">Block descriptors</a></li>
      <li><a href="#format_basic_type">Basic type descriptors</a></li>
      <li><a href="#format_derived_type">Derived type descriptors</a></li>
      <li><a href="#format_composite_type">Composite type descriptors</a></li>
      <li><a href="#format_subrange">Subrange descriptors</a></li>
      <li><a href="#format_enumeration">Enumerator descriptors</a></li>
      <li><a href="#format_variables">Local variables</a></li>
    </ul></li>
    <li><a href="#format_common_intrinsics">Debugger intrinsic functions</a>
      <ul>
      <li><a href="#format_common_stoppoint">llvm.dbg.stoppoint</a></li>
      <li><a href="#format_common_func_start">llvm.dbg.func.start</a></li>
      <li><a href="#format_common_region_start">llvm.dbg.region.start</a></li>
      <li><a href="#format_common_region_end">llvm.dbg.region.end</a></li>
      <li><a href="#format_common_declare">llvm.dbg.declare</a></li>
    </ul></li>
    <li><a href="#format_common_stoppoints">Representing stopping points in the
                                           source program</a></li>
  </ol></li>
  <li><a href="#ccxx_frontend">C/C++ front-end specific debug information</a>
  <ol>
    <li><a href="#ccxx_compile_units">C/C++ source file information</a></li>
    <li><a href="#ccxx_global_variable">C/C++ global variable information</a></li>
    <li><a href="#ccxx_subprogram">C/C++ function information</a></li>
    <li><a href="#ccxx_basic_types">C/C++ basic types</a></li>
    <li><a href="#ccxx_derived_types">C/C++ derived types</a></li>
    <li><a href="#ccxx_composite_types">C/C++ struct/union types</a></li>
    <li><a href="#ccxx_enumeration_types">C/C++ enumeration types</a></li>
  </ol></li>
</ul>
</td>
<td class="right">
<img src="img/venusflytrap.jpg" alt="A leafy and green bug eater" width="247"
height="369">
</td>
</tr></table>

<div class="doc_author">
  <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
            and <a href="mailto:jlaskey@mac.com">Jim Laskey</a></p>
</div>


<!-- *********************************************************************** -->
<div class="doc_section"><a name="introduction">Introduction</a></div> 
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This document is the central repository for all information pertaining to
debug information in LLVM.  It describes the <a href="#format">actual format
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 specifc examples of what debug information for C/C++.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="phil">Philosophy behind LLVM debugging information</a>
</div>

<div class="doc_text">

<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.
Several design aspects have shaped the solution that appears here.  The
important ones are:</p>

<ul>
<li>Debugging information should have very little impact on the rest of the
compiler.  No transformations, analyses, or code generators should need to be
modified because of debugging information.</li>

<li>LLVM optimizations should interact in <a href="#debugopt">well-defined and
easily described ways</a> with the debugging information.</li>

<li>Because LLVM is designed to support arbitrary programming languages,
LLVM-to-LLVM tools should not need to know anything about the semantics of the
source-level-language.</li>

<li>Source-level languages are often <b>widely</b> different from one another.
LLVM should not put any restrictions of the flavor of the source-language, and
the debugging information should work with any language.</li>

<li>With code generator support, it should be possible to use an LLVM compiler
to compile a program to native machine code and standard debugging formats.
This allows compatibility with traditional machine-code level debuggers, like
GDB or DBX.</li>

</ul>

<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 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>

<p>When a program is being debugged, a debugger interacts with the user and
turns the stored debug information into source-language specific information. 
As such, a debugger must be aware of the source-language, and is thus tied to
a specific language of family of languages.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="consumers">Debug information consumers</a>
</div>

<div class="doc_text">
<p>The role of debug information is to provide meta information normally
stripped away during the compilation process.  This meta information provides an
llvm user a relationship between generated code and the original program source
code.</p>

<p>Currently, debug information is consumed by the DwarfWriter to produce dwarf
information used by the gdb debugger.  Other targets could use the same
information to produce stabs or other debug forms.</p>

<p>It would also be reasonable to use debug information to feed profiling tools
for analysis of generated code, or, tools for reconstructing the original source
from generated code.</p>

<p>TODO - expound a bit more.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="debugopt">Debugging optimized code</a>
</div>

<div class="doc_text">

<p>An extremely high priority of LLVM debugging information is to make it
interact well with optimizations and analysis.  In particular, the LLVM debug
information provides the following guarantees:</p>

<ul>

<li>LLVM debug information <b>always provides information to accurately read the
source-level state of the program</b>, regardless of which LLVM optimizations
have been run, and without any modification to the optimizations themselves.
However, some optimizations may impact the ability to modify the current state
of the program with a debugger, such as setting program variables, or calling
function that have been deleted.</li>

<li>LLVM optimizations gracefully interact with debugging information.  If they
are not aware of debug information, they are automatically disabled as necessary
in the cases that would invalidate the debug info.  This retains the LLVM
features making it easy to write new transformations.</li>

<li>As desired, LLVM optimizations can be upgraded to be aware of the LLVM
debugging information, allowing them to update the debugging information as they
perform aggressive optimizations.  This means that, with effort, the LLVM
optimizers could optimize debug code just as well as non-debug code.</li>

<li>LLVM debug information does not prevent many important optimizations from
happening (for example inlining, basic block reordering/merging/cleanup, tail
duplication, etc), further reducing the amount of the compiler that eventually
is "aware" of debugging information.</li>

<li>LLVM debug information is automatically optimized along with the rest of the
program, using existing facilities.  For example, duplicate information is
automatically merged by the linker, and unused information is automatically
removed.</li>

</ul>

<p>Basically, the debug information allows you to compile a program with
"<tt>-O0 -g</tt>" and get full debug information, allowing you to arbitrarily
modify the program as it executes from a debugger.  Compiling a program with
"<tt>-O3 -g</tt>" gives you full debug information that is always available and
accurate for reading (e.g., you get accurate stack traces despite tail call
elimination and inlining), but you might lose the ability to modify the program
and call functions where were optimized out of the program, or inlined away
completely.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="format">Debugging information format</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<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,
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 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
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
these to a minimum.  The only common features that the LLVM debugger assumes
exist are <a href="#format_compile_units">source files</a>, and <a
href="#format_global_variables">program objects</a>.  These abstract objects are
used by a debugger to form stack traces, show information about local
variables, etc.</p>

<p>This section of the documentation first describes the representation aspects
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">
  <a name="debug_info_descriptors">Debug information descriptors</a>
</div>

<div class="doc_text">
<p>In consideration of the complexity and volume of debug information, LLVM
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
additional information appended at the end that is source-language specific. All
LLVM debugging information is versioned, allowing backwards compatibility in the
case that the core structures need to change in some way.  Also, all debugging
information objects start with a tag to indicate what type of object it is.  The
source-language is allowed to define its own objects, by using unreserved tag
numbers.  We recommend using with tags in 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 (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>sbyte*</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>

<pre>
  %llvm.dbg.object.type = type {
    uint,   ;; A tag
    ...
  }
</pre>

<p><a name="LLVMDebugVersion">The first field of a descriptor is always an
<tt>uint</tt> containing a tag value identifying the content of the descriptor.
The remaining fields are specific to the descriptor.  The values 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 = 4 << 16 or 0x40000 or 262144.)</a></p>

<p>The details of the various descriptors follow.</p>  

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_anchors">Anchor descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_anchors">llvm.dbg.anchor.type</a> = type {
    uint,   ;; Tag = 0 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
    uint    ;; Tag of descriptors grouped by the anchor
  }
</pre>

<p>One important aspect of the LLVM debug representation is that it allows the
LLVM debugger to efficiently index all of the global objects without having the
scan the program.  To do this, all of the global objects use "anchor"
descriptors with designated names.  All of the global objects of a particular
type (e.g., compile units) contain a pointer to the anchor.  This pointer allows
a debugger to use def-use chains to find all global objects of that type.</p>

<p>The following names are recognized as anchors by LLVM:</p>

<pre>
  %<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 } ;; DW_TAG_compile_unit
  %<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 } ;; DW_TAG_variable
  %<a href="#format_subprograms">llvm.dbg.subprograms</a>         = linkonce constant %<a href="#format_anchors">llvm.dbg.anchor.type</a>  { uint 0, uint 46 } ;; DW_TAG_subprogram
</pre>

<p>Using anchors in this way (where the compile unit descriptor points to the
anchors, as opposed to having a list of compile unit descriptors) allows for the
standard dead global elimination and merging passes to automatically remove
unused debugging information.  If the globals were kept track of through lists,
there would always be an object pointing to the descriptors, thus would never be
deleted.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_compile_units">Compile unit descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = type {
    uint,   ;; 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 {  }*)
    uint,   ;; Dwarf language identifier (ex. DW_LANG_C89) 
    sbyte*, ;; Source file name
    sbyte*, ;; Source file directory (includes trailing slash)
    sbyte*  ;; Producer (ex. "4.0.1 LLVM (LLVM research group)")
  }
</pre>

<p>These descriptors contain a source language ID for the file (we use the Dwarf
3.0 ID numbers, such as <tt>DW_LANG_C89</tt>, <tt>DW_LANG_C_plus_plus</tt>,
<tt>DW_LANG_Cobol74</tt>, etc), three strings describing the filename, working
directory of the compiler, and an identifier string for the compiler that
produced it.</p>

<p> 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.</p>  

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_global_variables">Global variable descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_global_variables">llvm.dbg.global_variable.type</a> = type {
    uint,   ;; 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
    sbyte*, ;; Name
    sbyte*, ;; Display name (fully qualified C++ name)
    sbyte*, ;; MIPS linkage name (for C++)
    {  }*,  ;; Reference to compile unit where defined
    uint,   ;; Line number where defined
    {  }*,  ;; Reference to type descriptor
    bool,   ;; True if the global is local to compile unit (static)
    bool,   ;; True if the global is defined in the compile unit (not extern)
    {  }*   ;; Reference to the global variable
  }
</pre>

<p>These descriptors provide debug information about globals variables.  The
provide details such as name, type and where the variable is defined.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_subprograms">Subprogram descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_subprograms">llvm.dbg.subprogram.type</a> = type {
    uint,   ;; 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
    sbyte*, ;; Name
    sbyte*, ;; Display name (fully qualified C++ name)
    sbyte*, ;; MIPS linkage name (for C++)
    {  }*,  ;; Reference to compile unit where defined
    uint,   ;; Line number where defined
    {  }*,  ;; Reference to type descriptor
    bool,   ;; True if the global is local to compile unit (static)
    bool    ;; True if the global is defined in the compile unit (not extern)
  }
</pre>

<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>

</div>
<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_blocks">Block descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_blocks">llvm.dbg.block</a> = type {
    uint,   ;; Tag = 13 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
    {  }*   ;; Reference to context descriptor
  }
</pre>

<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>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_basic_type">Basic type descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_basic_type">llvm.dbg.basictype.type</a> = type {
    uint,   ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_base_type)
    {  }*,  ;; Reference to context (typically a compile unit)
    sbyte*, ;; Name (may be "" for anonymous types)
    {  }*,  ;; Reference to compile unit where defined (may be NULL)
    uint,   ;; Line number where defined (may be 0)
    uint,   ;; Size in bits
    uint,   ;; Alignment in bits
    uint,   ;; Offset in bits
    uint    ;; Dwarf type encoding
  }
</pre>

<p>These descriptors define primitive types used in the code. Example int, bool
and float.  The context provides the scope of the type, which is usually the top
level.  Since basic types are not usually user defined the compile unit and line
number can be left as NULL and 0.  The size, alignment and offset are expressed
in bits and can be 64 bit values.  The alignment is used to round the offset
when embedded in a <a href="#format_composite_type">composite type</a>
(example to keep float doubles on 64 bit boundaries.) The offset is the bit
offset if embedded in a <a href="#format_composite_type">composite
type</a>.</p>

<p>The type encoding provides the details of the type.  The values are typically
one of the following;</p>

<pre>
  DW_ATE_address = 1
  DW_ATE_boolean = 2
  DW_ATE_float = 4
  DW_ATE_signed = 5
  DW_ATE_signed_char = 6
  DW_ATE_unsigned = 7
  DW_ATE_unsigned_char = 8
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_derived_type">Derived type descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> = type {
    uint,   ;; Tag (see below)
    {  }*,  ;; Reference to context
    sbyte*, ;; Name (may be "" for anonymous types)
    {  }*,  ;; Reference to compile unit where defined (may be NULL)
    uint,   ;; Line number where defined (may be 0)
    uint,   ;; Size in bits
    uint,   ;; Alignment in bits
    uint,   ;; Offset in bits
    {  }*   ;; Reference to type derived from
  }
</pre>

<p>These descriptors are used to define types derived from other types.  The
value of the tag varies depending on the meaning.  The following are possible
tag values;</p>

<pre>
  DW_TAG_formal_parameter = 5
  DW_TAG_member = 13
  DW_TAG_pointer_type = 15
  DW_TAG_reference_type = 16
  DW_TAG_typedef = 22
  DW_TAG_const_type = 38
  DW_TAG_volatile_type = 53
  DW_TAG_restrict_type = 55
</pre>

<p> <tt>DW_TAG_member</tt> is used to define a member of a <a
href="#format_composite_type">composite type</a> or <a
href="#format_subprograms">subprogram</a>.  The type of the member is the <a
href="#format_derived_type">derived type</a>. <tt>DW_TAG_formal_parameter</tt>
is used to define a member which is a formal argument of a subprogram.</p>

<p><tt>DW_TAG_typedef</tt> is used to
provide a name for the derived type.</p>

<p><tt>DW_TAG_pointer_type</tt>,
<tt>DW_TAG_reference_type</tt>, <tt>DW_TAG_const_type</tt>,
<tt>DW_TAG_volatile_type</tt> and <tt>DW_TAG_restrict_type</tt> are used to
qualify the <a href="#format_derived_type">derived type</a>. </p>

<p><a href="#format_derived_type">Derived type</a> location can be determined
from the compile unit and line number.  The size, alignment and offset are
expressed in bits and can be 64 bit values.  The alignment is used to round the
offset when embedded in a <a href="#format_composite_type">composite type</a>
(example to keep float doubles on 64 bit boundaries.) The offset is 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
NULL derived type.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_composite_type">Composite type descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_composite_type">llvm.dbg.compositetype.type</a> = type {
    uint,   ;; Tag (see below)
    {  }*,  ;; Reference to context
    sbyte*, ;; Name (may be "" for anonymous types)
    {  }*,  ;; Reference to compile unit where defined (may be NULL)
    uint,   ;; Line number where defined (may be 0)
    uint,   ;; Size in bits
    uint,   ;; Alignment in bits
    uint,   ;; Offset in bits
    {  }*   ;; Reference to array of member descriptors
  }
</pre>

<p>These descriptors are used to define types that are composed of 0 or more
elements.  The value of the tag varies depending on the meaning.  The following
are possible tag values;</p>

<pre>
  DW_TAG_array_type = 1
  DW_TAG_enumeration_type = 4
  DW_TAG_structure_type = 19
  DW_TAG_union_type = 23
  DW_TAG_vector_type = 259
  DW_TAG_subroutine_type = 46
  DW_TAG_inheritance = 26
</pre>

<p>The vector flag indicates that an array type is a native packed vector.</p>

<p>The members of array types (tag = <tt>DW_TAG_array_type</tt>) or vector types
(tag = <tt>DW_TAG_vector_type</tt>) are <a href="#format_subrange">subrange
descriptors</a>, each representing the range of subscripts at that level of
indexing.</p>

<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>

<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 the <a
href="#format_basic_type">basic</a>, <a href="#format_derived_type">derived</a>
or <a href="#format_composite_type">composite</a> type descriptors, each
representing a field member of the structure or union.</p>

<p>For C++ classes (tag = <tt>DW_TAG_structure_type</tt>), member descriptors
provide information about base classes, static members and member functions. If
a member is a <a href="#format_derived_type">derived type descriptor</a> and has
a tag of <tt>DW_TAG_inheritance</tt>, then the type represents a base class. If
the member of is a <a href="#format_global_variables">global variable
descriptor</a> then it represents a static member.  And, if the member is a <a
href="#format_subprograms">subprogram descriptor</a> then it represents a member
function.  For static members and member functions, <tt>getName()</tt> returns
the members link or the C++ mangled name.  <tt>getDisplayName()</tt> the
simplied version of the name.</p>

<p>The first member of subroutine (tag = <tt>DW_TAG_subroutine_type</tt>)
type elements is the return type for the subroutine.  The remaining
elements are the formal arguments to the subroutine.</p>

<p><a href="#format_composite_type">Composite type</a> location can be
determined from the compile unit and line number.  The size, alignment and
offset are expressed in bits and can be 64 bit values.  The alignment is used to
round the offset when embedded in a <a href="#format_composite_type">composite
type</a> (as an example, to keep float doubles on 64 bit boundaries.) The offset
is the bit offset if embedded in a <a href="#format_composite_type">composite
type</a>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_subrange">Subrange descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_subrange">llvm.dbg.subrange.type</a> = type {
    uint,   ;; Tag = 33 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subrange_type)
    uint,   ;; Low value
    uint    ;; High value
  }
</pre>

<p>These descriptors are used to define ranges of array subscripts for an array
<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>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_enumeration">Enumerator descriptors</a>
</div>

<div class="doc_text">

<pre>
  %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> = type {
    uint,   ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_enumerator)
    sbyte*, ;; Name
    uint    ;; Value
  }
</pre>

<p>These descriptors are used to define members of an enumeration <a
href="#format_composite_type">composite type</a>, it associates the name to the
value.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_variables">Local variables</a>
</div>

<div class="doc_text">
<pre>
  %<a href="#format_variables">llvm.dbg.variable.type</a> = type {
    uint,    ;; Tag (see below)
    {  }*,   ;; Context
    sbyte*,  ;; Name
    {  }*,   ;; Reference to compile unit where defined
    uint,    ;; Line number where defined
    {  }*    ;; Type descriptor
  }
</pre>

<p>These descriptors are used to define variables local to a sub program.  The
value of the tag depends on the usage of the variable;</p>

<pre>
  DW_TAG_auto_variable = 256
  DW_TAG_arg_variable = 257
  DW_TAG_return_variable = 258
</pre>

<p>An auto variable is any variable declared in the body of the function.  An
argument variable is any variable that appears as a formal argument to the
function.  A return variable is used to track the result of a function and has
no source correspondent.</p>

<p>The context is either the subprogram or block where the variable is defined.
Name the source variable name.  Compile unit and line indicate where the
variable was defined. Type descriptor defines the declared type of the
variable.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="format_common_intrinsics">Debugger intrinsic functions</a>
</div>

<div class="doc_text">

<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">
  <a name="format_common_stoppoint">llvm.dbg.stoppoint</a>
</div>

<div class="doc_text">
<pre>
  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>*</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>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_common_func_start">llvm.dbg.func.start</a>
</div>

<div class="doc_text">
<pre>
  void %<a href="#format_common_func_start">llvm.dbg.func.start</a>( { }* )
</pre>

<p>This intrinsic is used to link the debug information in <tt>%<a
href="#format_subprograms">llvm.dbg.subprogram</a></tt> to the function. It
defines the beginning of the function's declarative region (scope). It also
implies a call to %<tt><a
href="#format_common_stoppoint">llvm.dbg.stoppoint</a></tt> which defines a
source line "stop point". The intrinsic should be called early in the function
after the all the alloca instructions.  It should be paired off with a closing
<tt>%<a
href="#format_common_region_end">llvm.dbg.region.end</a></tt>.  The function's
single argument is the <tt>%<a
href="#format_subprograms">llvm.dbg.subprogram.type</a></tt>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_common_region_start">llvm.dbg.region.start</a>
</div>

<div class="doc_text">
<pre>
  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.
block) for local language elements.  It should be paired off with a closing
<tt>%<a href="#format_common_region_end">llvm.dbg.region.end</a></tt>.  The
function's single argument is the <tt>%<a
href="#format_blocks">llvm.dbg.block</a></tt> which is starting.</p>


</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_common_region_end">llvm.dbg.region.end</a>
</div>

<div class="doc_text">
<pre>
  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)
for local language elements.  It should be paired off with an opening <tt>%<a
href="#format_common_region_start">llvm.dbg.region.start</a></tt> or <tt>%<a
href="#format_common_func_start">llvm.dbg.func.start</a></tt>.  The function's
single argument is either the <tt>%<a
href="#format_blocks">llvm.dbg.block</a></tt> or the <tt>%<a
href="#format_subprograms">llvm.dbg.subprogram.type</a></tt> which is
ending.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="format_common_declare">llvm.dbg.declare</a>
</div>

<div class="doc_text">
<pre>
  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, also cast to a <tt>{ }*</tt>.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="format_common_stoppoints">
     Representing stopping points in the source program
  </a>
</div>

<div class="doc_text">

<p>LLVM debugger "stop points" are a key part of the debugging representation
that allows the LLVM to maintain simple semantics for <a
href="#debugopt">debugging optimized code</a>.  The basic idea is that the
front-end inserts calls to the <a
href="#format_common_stoppoint">%<tt>llvm.dbg.stoppoint</tt></a> intrinsic
function at every point in the program where a debugger should be able to
inspect the program (these correspond to places a debugger stops when you
"<tt>step</tt>" through it).  The front-end can choose to place these as
fine-grained as it would like (for example, before every subexpression
evaluated), but it is recommended to only put them after every source statement
that includes executable code.</p>

<p>Using calls to this intrinsic function to demark legal points for the
debugger to inspect the program automatically disables any optimizations that
could potentially confuse debugging information.  To non-debug-information-aware
transformations, these calls simply look like calls to an external function,
which they must assume to do anything (including reading or writing to any part
of reachable memory).  On the other hand, it does not impact many optimizations,
such as code motion of non-trapping instructions, nor does it impact
optimization of subexpressions, code duplication transformations, or basic-block
reordering transformations.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="format_common_lifetime">Object lifetimes and scoping</a>
</div>

<div class="doc_text">
<p>In many languages, the local variables in functions can have their lifetime
or scope limited to a subset of a function.  In the C family of languages, for
example, variables are only live (readable and writable) within the source block
that they are defined in.  In functional languages, values are only readable
after they have been defined.  Though this is a very obvious concept, it is also
non-trivial to model in LLVM, because it has no notion of scoping in this sense,
and does not want to be tied to a language's scoping rules.</p>

<p>In order to handle this, the LLVM debug format uses the notion of "regions"
of a function, delineated by calls to intrinsic functions.  These intrinsic
functions define new regions of the program and indicate when the region
lifetime expires.  Consider the following C fragment, for example:</p>

<pre>
1.  void foo() {
2.    int X = ...;
3.    int Y = ...;
4.    {
5.      int Z = ...;
6.      ...
7.    }
8.    ...
9.  }
</pre>

<p>Compiled to LLVM, this function would be represented like this:</p>

<pre>
void %foo() {
entry:
    %X = alloca int
    %Y = alloca int
    %Z = alloca int
    
    ...
    
    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, %<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, %<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, %<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, %<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, %<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>()
    
    ret void
}
</pre>

<p>This example illustrates a few important details about the LLVM debugging
information.  In particular, it shows how the various intrinsics are applied
together to allow a debugger to analyze the relationship between statements,
variable definitions, and the code used to implement the function.</p>

<p>The first intrinsic <tt>%<a
href="#format_common_func_start">llvm.dbg.func.start</a></tt> provides
a link with the <a href="#format_subprograms">subprogram descriptor</a>
containing the details of this function.  This call also defines the beginning
of the function region, bounded by the <tt>%<a
href="#format_common_region_end">llvm.region.end</a></tt> at the end of
the function.  This region is used to bracket the lifetime of variables declared
within.  For a function, this outer region defines a new stack frame whose
lifetime ends when the region is ended.</p>

<p>It is possible to define inner regions for short term variables by using the
%<a href="#format_common_stoppoint"><tt>llvm.region.start</tt></a> and <a
href="#format_common_region_end"><tt>%llvm.region.end</tt></a> to bound a
region.  The inner region in this example would be for the block containing the
declaration of Z.</p>

<p>Using regions to represent the boundaries of source-level functions allow
LLVM interprocedural optimizations to arbitrarily modify LLVM functions without
having to worry about breaking mapping information between the LLVM code and the
and source-level program.  In particular, the inliner requires no modification
to support inlining with debugging information: there is no explicit correlation
drawn between LLVM functions and their source-level counterparts (note however,
that if the inliner inlines all instances of a non-strong-linkage function into
its caller that it will not be possible for the user to manually invoke the
inlined function from a debugger).</p>

<p>Once the function has been defined, the <a
href="#format_common_stoppoint"><tt>stopping point</tt></a> corresponding to
line #2 (column #2) of the function is encountered.  At this point in the
function, <b>no</b> local variables are live.  As lines 2 and 3 of the example
are executed, their variable definitions are introduced into the program using
%<a href="#format_common_declare"><tt>llvm.dbg.declare</tt></a>, without the
need to specify a new region.  These variables do not require new regions to be
introduced because they go out of scope at the same point in the program: line
9.</p>

<p>In contrast, the <tt>Z</tt> variable goes out of scope at a different time,
on line 7.  For this reason, it is defined within the inner region, which kills
the availability of <tt>Z</tt> before the code for line 8 is executed.  In this
way, regions can support arbitrary source-language scoping rules, as long as
they can only be nested (ie, one scope cannot partially overlap with a part of
another scope).</p>

<p>It is worth noting that this scoping mechanism is used to control scoping of
all declarations, not just variable declarations.  For example, the scope of a
C++ using declaration is controlled with this and could change how name lookup is
performed.</p>

</div>



<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="ccxx_frontend">C/C++ front-end specific debug information</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The C and C++ front-ends represent information about the program in a format
that is effectively identical to <a
href="http://www.eagercon.com/dwarf/dwarf3std.htm">Dwarf 3.0</a> in terms of
information content.  This allows code generators to trivially support native
debuggers by generating standard dwarf information, and contains enough
information for non-dwarf targets to translate it as needed.</p>

<p>This section describes the forms used to represent C and C++ programs. Other
languages could pattern themselves after this (which itself is tuned to
representing programs in the same way that Dwarf 3 does), or they could choose
to provide completely different forms if they don't fit into the Dwarf model. 
As support for debugging information gets added to the various LLVM
source-language front-ends, the information used should be documented here.</p>

<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">
  <a name="ccxx_compile_units">C/C++ source file information</a>
</div>

<div class="doc_text">

<p>Given the source files "MySource.cpp" and "MyHeader.h" located in the
directory "/Users/mine/sources", the following code;</p>

<pre>
#include "MyHeader.h"

int main(int argc, char *argv[]) {
  return 0;
}
</pre>

<p>a C/C++ front-end would generate the following descriptors;</p>

<pre>
...
;;
;; 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, sbyte*, sbyte*, sbyte* }
...
;;
;; 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.)
;;
%<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, 
    sbyte* getelementptr ([13 x sbyte]* %str1, int 0, int 0), 
    sbyte* getelementptr ([21 x sbyte]* %str2, int 0, int 0), 
    sbyte* getelementptr ([33 x sbyte]* %str3, int 0, int 0) }, section "llvm.metadata"
    
;;
;; Define the compile unit for the header file "/Users/mine/sources/MyHeader.h".
;;
%<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, 
    sbyte* getelementptr ([11 x sbyte]* %str4, int 0, int 0), 
    sbyte* getelementptr ([21 x sbyte]* %str2, int 0, int 0), 
    sbyte* getelementptr ([33 x sbyte]* %str3, int 0, int 0) }, section "llvm.metadata"

;;
;; Define each of the strings used in the compile units.
;;
%str1 = internal constant [13 x sbyte] c"MySource.cpp\00", section "llvm.metadata";
%str2 = internal constant [21 x sbyte] c"/Users/mine/sources/\00", section "llvm.metadata";
%str3 = internal constant [33 x sbyte] c"4.0.1 LLVM (LLVM research group)\00", section "llvm.metadata";
%str4 = internal constant [11 x sbyte] c"MyHeader.h\00", section "llvm.metadata";
...
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_global_variable">C/C++ global variable information</a>
</div>

<div class="doc_text">

<p>Given an integer global variable declared as follows;</p>

<pre>
int MyGlobal = 100;
</pre>

<p>a C/C++ front-end would generate the following descriptors;</p>

<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, {  }*, {  }*, sbyte*, {  }*, uint, {  }*, bool, bool, {  }*, uint }
%<a href="#format_basic_type">llvm.dbg.basictype.type</a> = type { uint, {  }*, sbyte*, {  }*, int, uint, uint, uint, uint }
%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = ...
...
;;
;; Define the global itself.
;;
%MyGlobal = global int 100
...
;;
;; 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.)
;;
%<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.
;;
%<a href="#format_global_variables">llvm.dbg.global_variable</a> = internal constant %<a href="#format_global_variables">llvm.dbg.global_variable.type</a> {
    uint add(uint 52, uint 262144), 
    {  }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_global_variables">llvm.dbg.global_variables</a> to {  }*), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([9 x sbyte]* %str1, int 0, int 0), 
    sbyte* getelementptr ([1 x sbyte]* %str2, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    uint 1,
    {  }* cast (%<a href="#format_basic_type">llvm.dbg.basictype.type</a>* %<a href="#format_basic_type">llvm.dbg.basictype</a> to {  }*), 
    bool false, 
    bool true, 
    {  }* cast (int* %MyGlobal to {  }*) }, section "llvm.metadata"
    
;;
;; 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.
;;    
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([4 x sbyte]* %str3, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 5 }, section "llvm.metadata"

;;
;; Define the names of the global variable and basic type.
;;
%str1 = internal constant [9 x sbyte] c"MyGlobal\00", section "llvm.metadata"
%str2 = internal constant [1 x sbyte] c"\00", section "llvm.metadata"
%str3 = internal constant [4 x sbyte] c"int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_subprogram">C/C++ function information</a>
</div>

<div class="doc_text">

<p>Given a function declared as follows;</p>

<pre>
int main(int argc, char *argv[]) {
  return 0;
}
</pre>

<p>a C/C++ front-end would generate the following descriptors;</p>

<pre>
;;
;; Define types used. One for subprogram anchors, one for the subprogram
;; descriptor, one for the global's basic type and one for the subprogram's
;; compile unit.
;;
%<a href="#format_subprograms">llvm.dbg.subprogram.type</a> = type { uint, {  }*, {  }*, sbyte*, {  }*, bool, bool }
%<a href="#format_anchors">llvm.dbg.anchor.type</a> = type { uint, uint }
%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = ...
	
;;
;; Define the anchor for subprograms.  Note that the second field of the
;; anchor is 46, which is the same as the tag for subprograms
;; (46 = DW_TAG_subprogram.)
;;
%<a href="#format_subprograms">llvm.dbg.subprograms</a> = linkonce constant %<a href="#format_anchors">llvm.dbg.anchor.type</a> { uint 0, uint 46 }, section "llvm.metadata"

;;
;; Define the descriptor for the subprogram.  TODO - more details.
;;
%<a href="#format_subprograms">llvm.dbg.subprogram</a> = internal constant %<a href="#format_subprograms">llvm.dbg.subprogram.type</a> {
    uint add(uint 46, uint 262144), 
    {  }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_subprograms">llvm.dbg.subprograms</a> to {  }*), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0), 
    sbyte* getelementptr ([1 x sbyte]* %str2, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*),
    uint 1,
    {  }* null, 
    bool false, 
    bool true }, section "llvm.metadata"

;;
;; Define the name of the subprogram.
;;
%str1 = internal constant [5 x sbyte] c"main\00", section "llvm.metadata"
%str2 = internal constant [1 x sbyte] c"\00", section "llvm.metadata"

;;
;; Define the subprogram itself.
;;
int %main(int %argc, sbyte** %argv) {
...
}
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_basic_types">C/C++ basic types</a>
</div>

<div class="doc_text">

<p>The following are the basic type descriptors for C/C++ core types;</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_type_bool">bool</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 2 }, section "llvm.metadata"
%str1 = internal constant [5 x sbyte] c"bool\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_char">char</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 8, 
    uint 8, 
    uint 0, 
    uint 6 }, section "llvm.metadata"
%str1 = internal constant [5 x sbyte] c"char\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_unsigned_char">unsigned char</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([14 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 8, 
    uint 8, 
    uint 0, 
    uint 8 }, section "llvm.metadata"
%str1 = internal constant [14 x sbyte] c"unsigned char\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_short">short</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([10 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 16, 
    uint 16, 
    uint 0, 
    uint 5 }, section "llvm.metadata"
%str1 = internal constant [10 x sbyte] c"short int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_unsigned_short">unsigned short</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([19 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 16, 
    uint 16, 
    uint 0, 
    uint 7 }, section "llvm.metadata"
%str1 = internal constant [19 x sbyte] c"short unsigned int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_int">int</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([4 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 5 }, section "llvm.metadata"
%str1 = internal constant [4 x sbyte] c"int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_unsigned_int">unsigned int</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([13 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 7 }, section "llvm.metadata"
%str1 = internal constant [13 x sbyte] c"unsigned int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_long_long">long long</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([14 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 64, 
    uint 64, 
    uint 0, 
    uint 5 }, section "llvm.metadata"
%str1 = internal constant [14 x sbyte] c"long long int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([23 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 64, 
    uint 64, 
    uint 0, 
    uint 7 }, section "llvm.metadata"
%str1 = internal constant [23 x sbyte] c"long long unsigned int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_float">float</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([6 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 4 }, section "llvm.metadata"
%str1 = internal constant [6 x sbyte] c"float\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsubsection">
  <a name="ccxx_basic_double">double</a>
</div>

<div class="doc_text">

<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([7 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 64, 
    uint 64, 
    uint 0, 
    uint 4 }, section "llvm.metadata"
%str1 = internal constant [7 x sbyte] c"double\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_derived_types">C/C++ derived types</a>
</div>

<div class="doc_text">

<p>Given the following as an example of C/C++ derived type;</p>

<pre>
typedef const int *IntPtr;
</pre>

<p>a C/C++ front-end would generate the following descriptors;</p>

<pre>
;;
;; Define the typedef "IntPtr".
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype1</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
    uint add(uint 22, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([7 x sbyte]* %str1, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    int 1, 
    uint 0, 
    uint 0, 
    uint 0, 
    {  }* cast (%<a href="#format_derived_type">llvm.dbg.derivedtype.type</a>* %<a href="#format_derived_type">llvm.dbg.derivedtype2</a> to {  }*) }, section "llvm.metadata"
%str1 = internal constant [7 x sbyte] c"IntPtr\00", section "llvm.metadata"

;;
;; Define the pointer type.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype2</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
    uint add(uint 15, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* null, 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    {  }* cast (%<a href="#format_derived_type">llvm.dbg.derivedtype.type</a>* %<a href="#format_derived_type">llvm.dbg.derivedtype3</a> to {  }*) }, section "llvm.metadata"

;;
;; Define the const type.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype3</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
    uint add(uint 38, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* null, 
    {  }* null, 
    int 0, 
    uint 0, 
    uint 0, 
    uint 0, 
    {  }* cast (%<a href="#format_basic_type">llvm.dbg.basictype.type</a>* %<a href="#format_basic_type">llvm.dbg.basictype1</a> to {  }*) }, section "llvm.metadata"	

;;
;; Define the int type.
;;
%<a href="#format_basic_type">llvm.dbg.basictype1</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([4 x sbyte]* %str2, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 5 }, section "llvm.metadata"
%str2 = internal constant [4 x sbyte] c"int\00", section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_composite_types">C/C++ struct/union types</a>
</div>

<div class="doc_text">

<p>Given the following as an example of C/C++ struct type;</p>

<pre>
struct Color {
  unsigned Red;
  unsigned Green;
  unsigned Blue;
};
</pre>

<p>a C/C++ front-end would generate the following descriptors;</p>

<pre>
;;
;; Define basic type for unsigned int.
;;
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
    uint add(uint 36, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([13 x sbyte]* %str1, int 0, int 0), 
    {  }* null, 
    int 0, 
    uint 32, 
    uint 32, 
    uint 0, 
    uint 7 }, section "llvm.metadata"
%str1 = internal constant [13 x sbyte] c"unsigned int\00", section "llvm.metadata"

;;
;; Define composite type for struct Color.
;;
%<a href="#format_composite_type">llvm.dbg.compositetype</a> = internal constant %<a href="#format_composite_type">llvm.dbg.compositetype.type</a> {
    uint add(uint 19, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([6 x sbyte]* %str2, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    int 1, 
    uint 96, 
    uint 32, 
    uint 0, 
    {  }* null,
    {  }* cast ([3 x {  }*]* %llvm.dbg.array to {  }*) }, section "llvm.metadata"
%str2 = internal constant [6 x sbyte] c"Color\00", section "llvm.metadata"

;;
;; Define the Red field.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype1</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
    uint add(uint 13, uint 262144), 
    {  }* null, 
    sbyte* getelementptr ([4 x sbyte]* %str3, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    int 2, 
    uint 32, 
    uint 32, 
    uint 0, 
    {  }* cast (%<a href="#format_basic_type">llvm.dbg.basictype.type</a>* %<a href="#format_basic_type">llvm.dbg.basictype</a> to {  }*) }, section "llvm.metadata"
%str3 = internal constant [4 x sbyte] c"Red\00", section "llvm.metadata"

;;
;; Define the Green field.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype2</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
    uint add(uint 13, uint 262144), 
    {  }* null, 
    sbyte* getelementptr ([6 x sbyte]* %str4, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    int 3, 
    uint 32, 
    uint 32, 
    uint 32, 
    {  }* cast (%<a href="#format_basic_type">llvm.dbg.basictype.type</a>* %<a href="#format_basic_type">llvm.dbg.basictype</a> to {  }*) }, section "llvm.metadata"
%str4 = internal constant [6 x sbyte] c"Green\00", section "llvm.metadata"

;;
;; Define the Blue field.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype3</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
    uint add(uint 13, uint 262144), 
    {  }* null, 
    sbyte* getelementptr ([5 x sbyte]* %str5, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    int 4, 
    uint 32, 
    uint 32, 
    uint 64, 
    {  }* cast (%<a href="#format_basic_type">llvm.dbg.basictype.type</a>* %<a href="#format_basic_type">llvm.dbg.basictype</a> to {  }*) }, section "llvm.metadata"
%str5 = internal constant [5 x sbyte] c"Blue\00", section "llvm.metadata"

;;
;; Define the array of fields used by the composite type Color.
;;
%llvm.dbg.array = internal constant [3 x {  }*] [
      {  }* cast (%<a href="#format_derived_type">llvm.dbg.derivedtype.type</a>* %<a href="#format_derived_type">llvm.dbg.derivedtype1</a> to {  }*),
      {  }* cast (%<a href="#format_derived_type">llvm.dbg.derivedtype.type</a>* %<a href="#format_derived_type">llvm.dbg.derivedtype2</a> to {  }*),
      {  }* cast (%<a href="#format_derived_type">llvm.dbg.derivedtype.type</a>* %<a href="#format_derived_type">llvm.dbg.derivedtype3</a> to {  }*) ], section "llvm.metadata"
</pre>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_enumeration_types">C/C++ enumeration types</a>
</div>

<div class="doc_text">

<p>Given the following as an example of C/C++ enumeration type;</p>

<pre>
enum Trees {
  Spruce = 100,
  Oak = 200,
  Maple = 300
};
</pre>

<p>a C/C++ front-end would generate the following descriptors;</p>

<pre>
;;
;; Define composite type for enum Trees
;;
%<a href="#format_composite_type">llvm.dbg.compositetype</a> = internal constant %<a href="#format_composite_type">llvm.dbg.compositetype.type</a> {
    uint add(uint 4, uint 262144), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    sbyte* getelementptr ([6 x sbyte]* %str1, int 0, int 0), 
    {  }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to {  }*), 
    int 1, 
    uint 32, 
    uint 32, 
    uint 0, 
    {  }* null, 
    {  }* cast ([3 x {  }*]* %llvm.dbg.array to {  }*) }, section "llvm.metadata"
%str1 = internal constant [6 x sbyte] c"Trees\00", section "llvm.metadata"

;;
;; Define Spruce enumerator.
;;
%<a href="#format_enumeration">llvm.dbg.enumerator1</a> = internal constant %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> {
    uint add(uint 40, uint 262144), 
    sbyte* getelementptr ([7 x sbyte]* %str2, int 0, int 0), 
    int 100 }, section "llvm.metadata"
%str2 = internal constant [7 x sbyte] c"Spruce\00", section "llvm.metadata"

;;
;; Define Oak enumerator.
;;
%<a href="#format_enumeration">llvm.dbg.enumerator2</a> = internal constant %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> {
    uint add(uint 40, uint 262144), 
    sbyte* getelementptr ([4 x sbyte]* %str3, int 0, int 0), 
    int 200 }, section "llvm.metadata"
%str3 = internal constant [4 x sbyte] c"Oak\00", section "llvm.metadata"

;;
;; Define Maple enumerator.
;;
%<a href="#format_enumeration">llvm.dbg.enumerator3</a> = internal constant %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> {
    uint add(uint 40, uint 262144), 
    sbyte* getelementptr ([6 x sbyte]* %str4, int 0, int 0), 
    int 300 }, section "llvm.metadata"
%str4 = internal constant [6 x sbyte] c"Maple\00", section "llvm.metadata"

;;
;; Define the array of enumerators used by composite type Trees.
;;
%llvm.dbg.array = internal constant [3 x {  }*] [
  {  }* cast (%<a href="#format_enumeration">llvm.dbg.enumerator.type</a>* %<a href="#format_enumeration">llvm.dbg.enumerator1</a> to {  }*),
  {  }* cast (%<a href="#format_enumeration">llvm.dbg.enumerator.type</a>* %<a href="#format_enumeration">llvm.dbg.enumerator2</a> to {  }*),
  {  }* cast (%<a href="#format_enumeration">llvm.dbg.enumerator.type</a>* %<a href="#format_enumeration">llvm.dbg.enumerator3</a> to {  }*) ], section "llvm.metadata"
</pre>

</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" 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$
</address>

</body>
</html>
