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