<!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 border="0" width="100%">
<tr>
<td valign="top">
<ul>

  <li><a href="#introduction">Introduction</a>
  <ol>
    <li><a href="#phil">Philosophy behind LLVM debugging information</a></li>
    <li><a href="#debugopt">Debugging optimized code</a></li>
    <li><a href="#future">Future work</a></li>
  </ol></li>
  <li><a href="#llvm-db">Using the <tt>llvm-db</tt> tool</a>
  <ol>
    <li><a href="#limitations">Limitations of <tt>llvm-db</tt></a></li>
    <li><a href="#sample">A sample <tt>llvm-db</tt> session</a></li>
    <li><a href="#startup">Starting the debugger</a></li>
    <li><a href="#commands">Commands recognized by the debugger</a></li>
  </ol></li>

  <li><a href="#architecture">Architecture of the LLVM debugger</a>
  <ol>
    <li><a href="#arch_debugger">The Debugger and InferiorProcess classes</a></li>
    <li><a href="#arch_info">The RuntimeInfo, ProgramInfo, and SourceLanguage classes</a></li>
    <li><a href="#arch_llvm-db">The <tt>llvm-db</tt> tool</a></li>
    <li><a href="#arch_todo">Short-term TODO list</a></li>
  </ol></li>

  <li><a href="#format">Debugging information format</a>
  <ol>
    <li><a href="#format_common_anchors">Anchors for global objects</a></li>
    <li><a href="#format_common_stoppoint">Representing stopping points in the source program</a></li>
    <li><a href="#format_common_lifetime">Object lifetimes and scoping</a></li>
    <li><a href="#format_common_descriptors">Object descriptor formats</a>
    <ul>
      <li><a href="#format_common_source_files">Representation of source files</a></li>
      <li><a href="#format_common_program_objects">Representation of program objects</a></li>
      <li><a href="#format_common_object_contexts">Program object contexts</a></li>
    </ul></li>
    <li><a href="#format_common_intrinsics">Debugger intrinsic functions</a></li>
    <li><a href="#format_common_tags">Values for debugger tags</a></li>
  </ol></li>
  <li><a href="#ccxx_frontend">C/C++ front-end specific debug information</a>
  <ol>
    <li><a href="#ccxx_pse">Program Scope Entries</a>
    <ul>
      <li><a href="#ccxx_compilation_units">Compilation unit entries</a></li>
      <li><a href="#ccxx_modules">Module, namespace, and importing entries</a></li>
    </ul></li>
    <li><a href="#ccxx_dataobjects">Data objects (program variables)</a></li>
  </ol></li>
</ul>
</td>
<td align="right" valign="top">
<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></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="#llvm-db">user
interface</a> for the <a href="CommandGuide/llvm-db.html"><tt>llvm-db</tt>
tool</a>, which provides a powerful <a href="#llvm-db">source-level debugger</a>
to users of LLVM-based compilers.  It then describes the <a
href="#architecture">various components</a> that make up the debugger and the
libraries which future clients may use.  Finally, 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.</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 debugged, the debugger interacts with the user and turns
the stored debug information into source-language specific information.  As
such, the debugger must be aware of the source-language, and is thus tied to a
specific language of family of languages.  The <a href="#llvm-db">LLVM
debugger</a> is designed to be modular in its support for source-languages.</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 the 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_subsection">
  <a name="future">Future work</a>
</div>

<div class="doc_text">
<p>There are several important extensions that could be eventually added to the
LLVM debugger.  The most important extension would be to upgrade the LLVM code
generators to support debugging information.  This would also allow, for
example, the X86 code generator to emit native objects that contain debugging
information consumable by traditional source-level debuggers like GDB or
DBX.</p>

<p>Additionally, LLVM optimizations can be upgraded to incrementally update the
debugging information, <a href="#commands">new commands</a> can be added to the
debugger, and thread support could be added to the debugger.</p>

<p>The "SourceLanguage" modules provided by <tt>llvm-db</tt> could be
substantially improved to provide good support for C++ language features like
namespaces and scoping rules.</p>

<p>After working with the debugger for a while, perhaps the nicest improvement
would be to add some sort of line editor, such as GNU readline (but one that is
compatible with the LLVM license).</p>

<p>For someone so inclined, it should be straight-forward to write different
front-ends for the LLVM debugger, as the LLVM debugging engine is cleanly
separated from the <tt>llvm-db</tt> front-end.  A new LLVM GUI debugger or IDE
would be nice. :)</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="llvm-db">Using the <tt>llvm-db</tt> tool</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The <tt>llvm-db</tt> tool provides a GDB-like interface for source-level
debugging of programs.  This tool provides many standard commands for inspecting
and modifying the program as it executes, loading new programs, single stepping,
placing breakpoints, etc.  This section describes how to use the debugger.</p>

<p><tt>llvm-db</tt> has been designed to be as similar to GDB in its user
interface as possible.  This should make it extremely easy to learn
<tt>llvm-db</tt> if you already know <tt>GDB</tt>.  In general, <tt>llvm-db</tt>
provides the subset of GDB commands that are applicable to LLVM debugging users.
If there is a command missing that make a reasonable amount of sense within the
<a href="#limitations">limitations of <tt>llvm-db</tt></a>, please report it as
a bug or, better yet, submit a patch to add it. :)</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="limitations">Limitations of <tt>llvm-db</tt></a>
</div>

<div class="doc_text">

<p><tt>llvm-db</tt> is designed to be modular and easy to extend.  This
extensibility was key to getting the debugger up-and-running quickly, because we
can start with simple-but-unsophisicated implementations of various components.
Because of this, it is currently missing many features, though they should be
easy to add over time (patches welcomed!).  The biggest inherent limitations of
<tt>llvm-db</tt> are currently due to extremely simple <a
href="#arch_debugger">debugger backend</a> (implemented in
"lib/Debugger/UnixLocalInferiorProcess.cpp") which is designed to work without
any cooperation from the code generators.  Because it is so simple, it suffers
from the following inherent limitations:</p>

<ul>

<li>Running a program in <tt>llvm-db</tt> is a bit slower than running it with
<tt>lli</tt> (i.e., in the JIT).</li>

<li>Inspection of the target hardware is not supported.  This means that you
cannot, for example, print the contents of X86 registers.</li>

<li>Inspection of LLVM code is not supported.  This means that you cannot print
the contents of arbitrary LLVM values, or use commands such as <tt>stepi</tt>.
This also means that you cannot debug code without debug information.</li>

<li>Portions of the debugger run in the same address space as the program being
debugged.  This means that memory corruption by the program could trample on
portions of the debugger.</li>

<li>Attaching to existing processes and core files is not currently
supported.</li>

</ul>

<p>That said, the debugger is still quite useful, and all of these limitations
can be eliminated by integrating support for the debugger into the code
generators, and writing a new <a href="#arch_debugger">InferiorProcess</a>
subclass to use it.  See the <a href="#future">future work</a> section for ideas
of how to extend the LLVM debugger despite these limitations.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="sample">A sample <tt>llvm-db</tt> session</a>
</div>

<div class="doc_text">

<p>TODO: this is obviously lame, when more is implemented, this can be much
better.</p>

<pre>
$ <b>llvm-db funccall</b>
llvm-db: The LLVM source-level debugger
Loading program... successfully loaded 'funccall.bc'!
(llvm-db) <b>create</b>
Starting program: funccall.bc
main at funccall.c:9:2
9 ->            q = 0;
(llvm-db) <b>list main</b>
4       void foo() {
5               int t = q;
6               q = t + 1;
7       }
8       int main() {
9 ->            q = 0;
10              foo();
11              q = q - 1;
12
13              return q;
(llvm-db) <b>list</b>
14      }
(llvm-db) <b>step</b>
10 ->           foo();
(llvm-db) <b>s</b>
foo at funccall.c:5:2
5 ->            int t = q;
(llvm-db) <b>bt</b>
#0 ->   0x85ffba0 in foo at funccall.c:5:2
#1      0x85ffd98 in main at funccall.c:10:2
(llvm-db) <b>finish</b>
main at funccall.c:11:2
11 ->           q = q - 1;
(llvm-db) <b>s</b>
13 ->           return q;
(llvm-db) <b>s</b>
The program stopped with exit code 0
(llvm-db) <b>quit</b>
$
</pre>

</div>



<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="startup">Starting the debugger</a>
</div>

<div class="doc_text">

<p>There are three ways to start up the <tt>llvm-db</tt> debugger:</p>

<p>When run with no options, just <tt>llvm-db</tt>, the debugger starts up
without a program loaded at all.  You must use the <a
href="#c_file"><tt>file</tt> command</a> to load a program, and the <a
href="c_set_args"><tt>set args</tt></a> or <a href="#c_run"><tt>run</tt></a>
commands to specify the arguments for the program.</p>

<p>If you start the debugger with one argument, as <tt>llvm-db
&lt;program&gt;</tt>, the debugger will start up and load in the specified
program.  You can then optionally specify arguments to the program with the <a
href="c_set_args"><tt>set args</tt></a> or <a href="#c_run"><tt>run</tt></a>
commands.</p>

<p>The third way to start the program is with the <tt>--args</tt> option.  This
option allows you to specify the program to load and the arguments to start out
with.  <!-- No options to <tt>llvm-db</tt> may be specified after the
<tt>-args</tt> option. --> Example use: <tt>llvm-db --args ls /home</tt></p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="commands">Commands recognized by the debugger</a>
</div>

<div class="doc_text">

<p>FIXME: this needs work obviously.  See the <a
href="http://sources.redhat.com/gdb/documentation/">GDB documentation</a> for
information about what these do, or try '<tt>help [command]</tt>' within
<tt>llvm-db</tt> to get information.</p>

<p>
<h2>General usage:</h2>
<ul>
<li>help [command]</li>
<li>quit</li>
<li><a name="c_file">file</a> [program]</li>
</ul>

<h2>Program inspection and interaction:</h2>
<ul>
<li>create (start the program, stopping it ASAP in <tt>main</tt>)</li>
<li>kill</li>
<li>run [args]</li>
<li>step [num]</li>
<li>next [num]</li>
<li>cont</li>
<li>finish</li>

<li>list [start[, end]]</li>
<li>info source</li>
<li>info sources</li>
<li>info functions</li>
</ul>

<h2>Call stack inspection:</h2>
<ul>
<li>backtrace</li>
<li>up [n]</li>
<li>down [n]</li>
<li>frame [n]</li>
</ul>


<h2>Debugger inspection and interaction:</h2>
<ul>
<li>info target</li>
<li>show prompt</li>
<li>set prompt</li>
<li>show listsize</li>
<li>set listsize</li>
<li>show language</li>
<li>set language</li>
<li>show args</li>
<li>set args [args]</li>
</ul>

<h2>TODO:</h2>
<ul>
<li>info frame</li>
<li>break</li>
<li>print</li>
<li>ptype</li>

<li>info types</li>
<li>info variables</li>
<li>info program</li>

<li>info args</li>
<li>info locals</li>
<li>info catch</li>
<li>... many others</li>
</ul>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="architecture">Architecture of the LLVM debugger</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">
<p>The LLVM debugger is built out of three distinct layers of software.  These
layers provide clients with different interface options depending on what pieces
of they want to implement themselves, and it also promotes code modularity and
good design.  The three layers are the <a href="#arch_debugger">Debugger
interface</a>, the <a href="#arch_info">"info" interfaces</a>, and the <a
href="#arch_llvm-db"><tt>llvm-db</tt> tool</a> itself.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="arch_debugger">The Debugger and InferiorProcess classes</a>
</div>

<div class="doc_text">
<p>The Debugger class (defined in the <tt>include/llvm/Debugger/</tt> directory)
is a low-level class which is used to maintain information about the loaded
program, as well as start and stop the program running as necessary.  This class
does not provide any high-level analysis or control over the program, only
exposing simple interfaces like <tt>load/unloadProgram</tt>,
<tt>create/killProgram</tt>, <tt>step/next/finish/contProgram</tt>, and
low-level methods for installing breakpoints.</p>

<p>
The Debugger class is itself a wrapper around the lowest-level InferiorProcess
class.  This class is used to represent an instance of the program running under
debugger control.  The InferiorProcess class can be implemented in different
ways for different targets and execution scenarios (e.g., remote debugging).
The InferiorProcess class exposes a small and simple collection of interfaces
which are useful for inspecting the current state of the program (such as
collecting stack trace information, reading the memory image of the process,
etc).  The interfaces in this class are designed to be as low-level and simple
as possible, to make it easy to create new instances of the class.
</p>

<p>
The Debugger class exposes the currently active instance of InferiorProcess
through the <tt>Debugger::getRunningProcess</tt> method, which returns a
<tt>const</tt> reference to the class.  This means that clients of the Debugger
class can only <b>inspect</b> the running instance of the program directly.  To
change the executing process in some way, they must use the interces exposed by
the Debugger class.
</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="arch_info">The RuntimeInfo, ProgramInfo, and SourceLanguage classes</a>
</div>

<div class="doc_text">
<p>
The next-highest level of debugger abstraction is provided through the
ProgramInfo, RuntimeInfo, SourceLanguage and related classes (also defined in
the <tt>include/llvm/Debugger/</tt> directory).  These classes efficiently
decode the debugging information and low-level interfaces exposed by
InferiorProcess into a higher-level representation, suitable for analysis by the
debugger.
</p>

<p>
The ProgramInfo class exposes a variety of different kinds of information about
the program objects in the source-level-language.  The SourceFileInfo class
represents a source-file in the program (e.g. a .cpp or .h file).  The
SourceFileInfo class captures information such as which SourceLanguage was used
to compile the file, where the debugger can get access to the actual file text
(which is lazily loaded on demand), etc.  The SourceFunctionInfo class
represents a... <b>FIXME: finish</b>.  The ProgramInfo class provides interfaces
to lazily find and decode the information needed to create the Source*Info
classes requested by the debugger.
</p>

<p>
The RuntimeInfo class exposes information about the currently executed program,
by decoding information from the InferiorProcess and ProgramInfo classes.  It
provides a StackFrame class which provides an easy-to-use interface for
inspecting the current and suspended stack frames in the program.
</p>

<p>
The SourceLanguage class is an abstract interface used by the debugger to
perform all source-language-specific tasks.  For example, this interface is used
by the ProgramInfo class to decode language-specific types and functions and by
the debugger front-end (such as <a href="#arch_llvm-db"><tt>llvm-db</tt></a> to
evaluate source-langauge expressions typed into the debugger.  This class uses
the RuntimeInfo &amp; ProgramInfo classes to get information about the current
execution context and the loaded program, respectively.
</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="arch_llvm-db">The <tt>llvm-db</tt> tool</a>
</div>

<div class="doc_text">
<p>
The <tt>llvm-db</tt> is designed to be a debugger providing an interface as <a
href="#llvm-db">similar to GDB</a> as reasonable, but no more so than that.
Because the <a href="#arch_debugger">Debugger</a> and <a
href="#arch_info">info</a> classes implement all of the heavy lifting and
analysis, <tt>llvm-db</tt> (which lives in <tt>llvm/tools/llvm-db</tt>) consists
mainly of of code to interact with the user and parse commands.  The CLIDebugger
constructor registers all of the builtin commands for the debugger, and each
command is implemented as a CLIDebugger::[name]Command method.
</p>
</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="arch_todo">Short-term TODO list</a>
</div>

<div class="doc_text">

<p>
FIXME: this section will eventually go away.  These are notes to myself of
things that should be implemented, but haven't yet.
</p>

<p>
<b>Breakpoints:</b> Support is already implemented in the 'InferiorProcess'
class, though it hasn't been tested yet.  To finish breakpoint support, we need
to implement breakCommand (which should reuse the linespec parser from the list
command), and handle the fact that 'break foo' or 'break file.c:53' may insert
multiple breakpoints.  Also, if you say 'break file.c:53' and there is no
stoppoint on line 53, the breakpoint should go on the next available line.  My
idea was to have the Debugger class provide a "Breakpoint" class which
encapsulated this messiness, giving the debugger front-end a simple interface.
The debugger front-end would have to map the really complex semantics of
temporary breakpoints and 'conditional' breakpoints onto this intermediate
level. Also, breakpoints should survive as much as possible across program
reloads.
</p>

<p>
<b>UnixLocalInferiorProcess.cpp speedup</b>: There is no reason for the debugged
process to code gen the globals corresponding to debug information.  The
IntrinsicLowering object could instead change descriptors into constant expr
casts of the constant address of the LLVM objects for the descriptors.  This
would also allow us to eliminate the mapping back and forth between physical
addresses that must be done.</p>

<p>
<b>Process deaths</b>: The InferiorProcessDead exception should be extended to
know "how" a process died, i.e., it was killed by a signal.  This is easy to
collect in the UnixLocalInferiorProcess, we just need to represent it.</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>The debugger is designed to be agnostic about the contents of most of the
debugging information.  It uses a <a href="#arch_info">source-language-specific
module</a> 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
debugger to interpret the information.</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_common_source_files">source files</a>, and <a
href="#format_program_objects">program objects</a>.  These abstract objects are
used by the 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="format_common_anchors">Anchors for global objects</a>
</div>

<div class="doc_text">
<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" globals of
type "<tt>{}</tt>", with designated names.  These anchor objects obviously do
not contain any content or meaning by themselves, but all of the global objects
of a particular type (e.g., source file descriptors) contain a pointer to the
anchor.  This pointer allows the debugger to use def-use chains to find all
global objects of that type.</p>

<p>So far, the following names are recognized as anchors by the LLVM
debugger:</p>

<pre>
  %<a href="#format_common_source_files">llvm.dbg.translation_units</a> = linkonce global {} {}
  %<a href="#format_program_objects">llvm.dbg.globals</a>         = linkonce global {} {}
</pre>

<p>Using anchors in this way (where the source file descriptor points to the
anchors, as opposed to having a list of source file 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_subsection">
  <a name="format_common_stoppoint">
     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 <tt>%llvm.dbg.stoppoint</tt> intrinsic function
at every point in the program where the debugger should be able to inspect the
program (these correspond to places the 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>

<p>An important aspect of the calls to the <tt>%llvm.dbg.stoppoint</tt>
intrinsic is that the function-local debugging information is woven together
with use-def chains.  This makes it easy for the debugger to, for example,
locate the 'next' stop point.  For a concrete example of stop points, see the
example in <a href="#format_common_lifetime">the next section</a>.</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 (FIXME: CHECK
AND UPDATE THIS):</p>

<pre>
void %foo() {
    %X = alloca int
    %Y = alloca int
    %Z = alloca int
    <a name="#icl_ex_D1">%D1</a> = call {}* %llvm.dbg.func.start(<a href="#format_program_objects">%lldb.global</a>* %d.foo)
    %D2 = call {}* <a href="#format_common_stoppoint">%llvm.dbg.stoppoint</a>({}* %D1, uint 2, uint 2, <a href="#format_common_source_files">%lldb.compile_unit</a>* %file)

    %D3 = call {}* %llvm.dbg.DEFINEVARIABLE({}* %D2, ...)
    <i>;; Evaluate expression on line 2, assigning to X.</i>
    %D4 = call {}* <a href="#format_common_stoppoint">%llvm.dbg.stoppoint</a>({}* %D3, uint 3, uint 2, <a href="#format_common_source_files">%lldb.compile_unit</a>* %file)

    %D5 = call {}* %llvm.dbg.DEFINEVARIABLE({}* %D4, ...)
    <i>;; Evaluate expression on line 3, assigning to Y.</i>
    %D6 = call {}* <a href="#format_common_stoppoint">%llvm.dbg.stoppoint</a>({}* %D5, uint 5, uint 4, <a href="#format_common_source_files">%lldb.compile_unit</a>* %file)

    <a name="#icl_ex_D1">%D7</a> = call {}* %llvm.region.start({}* %D6)
    %D8 = call {}* %llvm.dbg.DEFINEVARIABLE({}* %D7, ...)
    <i>;; Evaluate expression on line 5, assigning to Z.</i>
    %D9 = call {}* <a href="#format_common_stoppoint">%llvm.dbg.stoppoint</a>({}* %D8, uint 6, uint 4, <a href="#format_common_source_files">%lldb.compile_unit</a>* %file)

    <i>;; Code for line 6.</i>
    %D10 = call {}* %llvm.region.end({}* %D9)
    %D11 = call {}* <a href="#format_common_stoppoint">%llvm.dbg.stoppoint</a>({}* %D10, uint 8, uint 2, <a href="#format_common_source_files">%lldb.compile_unit</a>* %file)

    <i>;; Code for line 8.</i>
    <a name="#icl_ex_D1">%D12</a> = call {}* %llvm.region.end({}* %D11)
    ret void
}
</pre>

<p>This example illustrates a few important details about the LLVM debugging
information.  In particular, it shows how the various intrinsics used are woven
together with def-use and use-def chains, similar to how <a
href="#format_common_anchors">anchors</a> are used with globals.  This allows
the debugger to analyze the relationship between statements, variable
definitions, and the code used to implement the function.</p>

<p>In this example, two explicit regions are defined, one with the <a
href="#icl_ex_D1">definition of the <tt>%D1</tt> variable</a> and one with the
<a href="#icl_ex_D7">definition of <tt>%D7</tt></a>.  In the case of
<tt>%D1</tt>, the debug information indicates that the function whose <a
href="#format_program_objects">descriptor</a> is specified as an argument to the
intrinsic.  This defines a new stack frame whose lifetime ends when the region
is ended by <a href="#icl_ex_D12">the <tt>%D12</tt> call</a>.</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 the debugger).</p>

<p>Once the function has been defined, the <a
href="#format_common_stoppoint">stopping point</a> corresponding to line #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 automatically introduced into the program, 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 <a href="#icl_ex_D7">the
<tt>%D7</tt> region</a>, 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 the <tt>llvm-db</tt> C++
support routines could use this to change how name lookup is performed (though
this is not implemented yet).</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="format_common_descriptors">Object descriptor formats</a>
</div>

<div class="doc_text">
<p>The LLVM debugger expects 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 <a href="#format_common_tags">tag</a> to indicate what type
of object it is.  The source-language is allows to define its own objects, by
using unreserved tag numbers.</p>

<p>The lowest-level descriptor are those describing <a
href="#format_common_source_files">the files containing the program source
code</a>, as most other descriptors (sometimes indirectly) refer to them.
</p>
</div>


<!-- ------------------------------------------------------------------------ ->
<div class="doc_subsubsection">
  <a name="format_common_source_files">Representation of source files</a>
</div>

<div class="doc_text">
<p>
Source file descriptors are patterned after the Dwarf "compile_unit" object.
The descriptor currently is defined to have at least the following LLVM
type entries:</p>

<pre>
%lldb.compile_unit = type {
       uint,                 <i>;; Tag: <a href="#tag_compile_unit">LLVM_COMPILE_UNIT</a></i>
       ushort,               <i>;; LLVM debug version number</i>
       ushort,               <i>;; Dwarf language identifier</i>
       sbyte*,               <i>;; Filename</i>
       sbyte*,               <i>;; Working directory when compiled</i>
       sbyte*                <i>;; Producer of the debug information</i>
}
</pre>

<p>
These descriptors contain the version number for the debug info, 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.  Note that actual
compile_unit declarations must also include an <a
href="#format_common_anchors">anchor</a> to <tt>llvm.dbg.translation_units</tt>,
but it is not specified where the anchor is to be located.  Here is an example
descriptor:
</p>

<p><pre>
%arraytest_source_file = internal constant %lldb.compile_unit {
    <a href="#tag_compile_unit">uint 17</a>,                                                      ; Tag value
    ushort 0,                                                     ; Version #0
    ushort 1,                                                     ; DW_LANG_C89
    sbyte* getelementptr ([12 x sbyte]* %.str_1, long 0, long 0), ; filename
    sbyte* getelementptr ([12 x sbyte]* %.str_2, long 0, long 0), ; working dir
    sbyte* getelementptr ([12 x sbyte]* %.str_3, long 0, long 0), ; producer
    {}* %llvm.dbg.translation_units                               ; Anchor
}
%.str_1 = internal constant [12 x sbyte] c"arraytest.c\00"
%.str_2 = internal constant [12 x sbyte] c"/home/sabre\00"
%.str_3 = internal constant [12 x sbyte] c"llvmgcc 3.4\00"
</pre></p>

<p>
Note that the LLVM constant merging pass should eliminate duplicate copies of
the strings that get emitted to each translation unit, such as the producer.
</p>

</div>


<!-- ----------------------------------------------------------------------- -->
<div class="doc_subsubsection">
  <a name="format_program_objects">Representation of program objects</a>
</div>

<div class="doc_text">
<p>
The LLVM debugger needs to know about some source-language program objects, in
order to build stack traces, print information about local variables, and other
related activities.  The LLVM debugger differentiates between three different
types of program objects: subprograms (functions, messages, methods, etc),
variables (locals and globals), and others.  Because source-languages have
widely varying forms of these objects, the LLVM debugger expects only a few
fields in the descriptor for each object:
</p>

<pre>
%lldb.object = type {
       uint,                  <i>;; <a href="#format_common_tag">A tag</a></i>
       <i>any</i>*,                  <i>;; The <a href="#format_common_object_contexts">context</a> for the object</i>
       sbyte*                 <i>;; The object 'name'</i>
}
</pre>

<p>The first field contains a tag for the descriptor.  The second field contains
either a pointer to the descriptor for the containing <a
href="#format_common_source_files">source file</a>, or it contains a pointer to
another program object whose context pointer eventually reaches a source file.
Through this <a href="#format_common_object_contexts">context</a> pointer, the
LLVM debugger can establish the debug version number of the object.</p>

<p>The third field contains a string that the debugger can use to identify the
object if it does not contain explicit support for the source-language in use
(ie, the 'unknown' source language handler uses this string).  This should be
some sort of unmangled string that corresponds to the object, but it is a
quality of implementation issue what exactly it contains (it is legal, though
not useful, for all of these strings to be null).</p>

<p>Note again that descriptors can be extended to include
source-language-specific information in addition to the fields required by the
LLVM debugger.  See the <a href="#ccxx_descriptors">section on the C/C++
front-end</a> for more information.  Also remember that global objects
(functions, selectors, global variables, etc) must contain an <a
href="format_common_anchors">anchor</a> to the <tt>llvm.dbg.globals</tt>
variable.</p>
</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="format_common_object_contexts">Program object contexts</a>
</div>

<div class="doc_text">
<pre>
Allow source-language specific contexts, use to identify namespaces etc
Must end up in a source file descriptor.
Debugger core ignores all unknown context objects.
</pre>
</div>

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

<div class="doc_text">
<pre>
Define each intrinsics, as an extension of the language reference manual.

llvm.dbg.stoppoint
llvm.dbg.region.start
llvm.dbg.region.end
llvm.dbg.function.start
llvm.dbg.declare
</pre>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="format_common_tags">Values for debugger tags</a>
</div>

<div class="doc_text">

<p>Happen to be the same value as the similarly named Dwarf-3 tags, this may
change in the future.</p>

<pre>
  <a name="tag_compile_unit">LLVM_COMPILE_UNIT</a>     : 17
  <a name="tag_subprogram">LLVM_SUBPROGRAM</a>       : 46
  <a name="tag_variable">LLVM_VARIABLE</a>         : 52
<!--  <a name="tag_formal_parameter">LLVM_FORMAL_PARAMETER :  5-->
</pre>
</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>The basic debug information required by the debugger is (intentionally)
designed to be as minimal as possible.  This basic information is so minimal
that it is unlikely that <b>any</b> source-language could be adequately
described by it.  Because of this, the debugger format was designed for
extension to support source-language-specific information.  The extended
descriptors are read and interpreted by the <a
href="#arch_info">language-specific</a> modules in the debugger if there is
support available, otherwise it is ignored.</p>

<p>This section describes the extensions 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 extensions 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>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_pse">Program Scope Entries</a>
</div>

<div class="doc_text">
<p>TODO</p>
</div>

<!-- -------------------------------------------------------------------------->
<div class="doc_subsubsection">
  <a name="ccxx_compilation_units">Compilation unit entries</a>
</div>

<div class="doc_text">
<p>
Translation units do not add any information over the standard <a
href="#format_common_source_files">source file representation</a> already
expected by the debugger.  As such, it uses descriptors of the type specified,
with a trailing <a href="#format_common_anchors">anchor</a>.
</p>
</div>

<!-- -------------------------------------------------------------------------->
<div class="doc_subsubsection">
  <a name="ccxx_modules">Module, namespace, and importing entries</a>
</div>

<div class="doc_text">
<p>TODO</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ccxx_dataobjects">Data objects (program variables)</a>
</div>

<div class="doc_text">
<p>TODO</p>
</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.cs.uiuc.edu">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
