<!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="#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 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></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 <tt>llvm-db</tt> tool, 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>
