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

<h1>Source Level Debugging with LLVM</h1>

<table class="layout" style="width:100%">
  <tr class="layout">
    <td class="left">
<ul>
  <li><a href="#introduction">Introduction</a>
  <ol>
    <li><a href="#phil">Philosophy behind LLVM debugging information</a></li>
    <li><a href="#consumers">Debug information consumers</a></li>
    <li><a href="#debugopt">Debugging optimized code</a></li>
  </ol></li>
  <li><a href="#format">Debugging information format</a>
  <ol>
    <li><a href="#debug_info_descriptors">Debug information descriptors</a>
    <ul>
      <li><a href="#format_compile_units">Compile unit descriptors</a></li>
      <li><a href="#format_files">File descriptors</a></li>
      <li><a href="#format_global_variables">Global variable descriptors</a></li>
      <li><a href="#format_subprograms">Subprogram descriptors</a></li>
      <li><a href="#format_blocks">Block descriptors</a></li>
      <li><a href="#format_basic_type">Basic type descriptors</a></li>
      <li><a href="#format_derived_type">Derived type descriptors</a></li>
      <li><a href="#format_composite_type">Composite type descriptors</a></li>
      <li><a href="#format_subrange">Subrange descriptors</a></li>
      <li><a href="#format_enumeration">Enumerator descriptors</a></li>
      <li><a href="#format_variables">Local variables</a></li>
    </ul></li>
    <li><a href="#format_common_intrinsics">Debugger intrinsic functions</a>
      <ul>
      <li><a href="#format_common_declare">llvm.dbg.declare</a></li>
      <li><a href="#format_common_value">llvm.dbg.value</a></li>
    </ul></li>
  </ol></li>
  <li><a href="#format_common_lifetime">Object lifetimes and scoping</a></li>
  <li><a href="#ccxx_frontend">C/C++ front-end specific debug information</a>
  <ol>
    <li><a href="#ccxx_compile_units">C/C++ source file information</a></li>
    <li><a href="#ccxx_global_variable">C/C++ global variable information</a></li>
    <li><a href="#ccxx_subprogram">C/C++ function information</a></li>
    <li><a href="#ccxx_basic_types">C/C++ basic types</a></li>
    <li><a href="#ccxx_derived_types">C/C++ derived types</a></li>
    <li><a href="#ccxx_composite_types">C/C++ struct/union types</a></li>
    <li><a href="#ccxx_enumeration_types">C/C++ enumeration types</a></li>
  </ol></li>
  <li><a href="#llvmdwarfextension">LLVM Dwarf Extensions</a>
    <ol>
      <li><a href="#objcproperty">Debugging Information Extension
	  for Objective C Properties</a>
        <ul>
	  <li><a href="#objcpropertyintroduction">Introduction</a></li>
	  <li><a href="#objcpropertyproposal">Proposal</a></li>
	  <li><a href="#objcpropertynewattributes">New DWARF Attributes</a></li>
	  <li><a href="#objcpropertynewconstants">New DWARF Constants</a></li>
        </ul>
      </li>
      <li><a href="#acceltable">Name Accelerator Tables</a>
        <ul>
          <li><a href="#acceltableintroduction">Introduction</a></li>
          <li><a href="#acceltablehashes">Hash Tables</a></li>
          <li><a href="#acceltabledetails">Details</a></li>
          <li><a href="#acceltablecontents">Contents</a></li>
          <li><a href="#acceltableextensions">Language Extensions and File Format Changes</a></li>
        </ul>
      </li>
    </ol>
  </li>
</ul>
</td>
<td class="right">
<img src="img/venusflytrap.jpg" alt="A leafy and green bug eater" width="247"
height="369">
</td>
</tr></table>

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


<!-- *********************************************************************** -->
<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->

<div>

<p>This document is the central repository for all information pertaining to
   debug information in LLVM.  It describes the <a href="#format">actual format
   that the LLVM debug information</a> takes, which is useful for those
   interested in creating front-ends or dealing directly with the information.
   Further, this document provides specific examples of what debug information
   for C/C++ looks like.</p>

<!-- ======================================================================= -->
<h3>
  <a name="phil">Philosophy behind LLVM debugging information</a>
</h3>

<div>

<p>The idea of the LLVM debugging information is to capture how the important
   pieces of the source-language's Abstract Syntax Tree map onto LLVM code.
   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 metadata
   in an <a href="#ccxx_frontend">implementation-defined format</a>
   (the C/C++ front-end currently uses working draft 7 of
   the <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3
   standard</a>).</p>

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

</div>

<!-- ======================================================================= -->
<h3>
  <a name="consumers">Debug information consumers</a>
</h3>

<div>

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

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

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

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

</div>

<!-- ======================================================================= -->
<h3>
  <a name="debugopt">Debugging optimized code</a>
</h3>

<div>

<p>An extremely high priority of LLVM debugging information is to make it
   interact well with optimizations and analysis.  In particular, the LLVM debug
   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 functions that have been
      deleted.</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 optimizations from
      happening (for example inlining, basic block reordering/merging/cleanup,
      tail duplication, etc).</li>

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

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

<p><a href="TestingGuide.html#quicktestsuite">LLVM test suite</a> provides a
   framework to test optimizer's handling of debugging information. It can be
   run like this:</p>

<div class="doc_code">
<pre>
% cd llvm/projects/test-suite/MultiSource/Benchmarks  # or some other level
% make TEST=dbgopt
</pre>
</div>

<p>This will test impact of debugging information on optimization passes. If
   debugging information influences optimization passes then it will be reported
   as a failure. See <a href="TestingGuide.html">TestingGuide</a> for more
   information on LLVM test infrastructure and how to run various tests.</p>

</div>

</div>

<!-- *********************************************************************** -->
<h2>
  <a name="format">Debugging information format</a>
</h2>
<!-- *********************************************************************** -->

<div>

<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 use of metadata avoids duplicated debugging information from
   the beginning, and the global dead code elimination pass automatically
   deletes debugging information for a function if it decides to delete the
   function. </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 metadata. </p>

<p>Debug information is designed to be agnostic about the target debugger and
   debugging information representation (e.g. DWARF/Stabs/etc).  It uses a
   generic pass to decode the information that represents variables, types,
   functions, namespaces, etc: this allows for arbitrary source-language
   semantics and type-systems to be used, as long as there is a module
   written for the target debugger to interpret the information. </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_files">source files</a>,
   and <a href="#format_global_variables">program objects</a>.  These abstract
   objects are used by a debugger to form stack traces, show information about
   local variables, etc.</p>

<p>This section of the documentation first describes the representation aspects
   common to any source-language.  The <a href="#ccxx_frontend">next section</a>
   describes the data layout conventions used by the C and C++ front-ends.</p>

<!-- ======================================================================= -->
<h3>
  <a name="debug_info_descriptors">Debug information descriptors</a>
</h3>

<div>

<p>In consideration of the complexity and volume of debug information, LLVM
   provides a specification for well formed debug descriptors. </p>

<p>Consumers of LLVM debug information expect the descriptors for program
   objects to start in a canonical format, but the descriptors can include
   additional information appended at the end that is source-language
   specific. All LLVM debugging information is versioned, allowing backwards
   compatibility in the case that the core structures need to change in some
   way.  Also, all debugging information objects start with a tag to indicate
   what type of object it is.  The source-language is allowed to define its own
   objects, by using unreserved tag numbers.  We recommend using with tags in
   the range 0x1000 through 0x2000 (there is a defined enum DW_TAG_user_base =
   0x1000.)</p>

<p>The fields of debug descriptors used internally by LLVM
   are restricted to only the simple data types <tt>i32</tt>, <tt>i1</tt>,
   <tt>float</tt>, <tt>double</tt>, <tt>mdstring</tt> and <tt>mdnode</tt>. </p>

<div class="doc_code">
<pre>
!1 = metadata !{
  i32,   ;; A tag
  ...
}
</pre>
</div>

<p><a name="LLVMDebugVersion">The first field of a descriptor is always an
   <tt>i32</tt> containing a tag value identifying the content of the
   descriptor.  The remaining fields are specific to the descriptor.  The values
   of tags are loosely bound to the tag values of DWARF information entries.
   However, that does not restrict the use of the information supplied to DWARF
   targets.  To facilitate versioning of debug information, the tag is augmented
   with the current debug version (LLVMDebugVersion = 8 &lt;&lt; 16 or
   0x80000 or 524288.)</a></p>

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

<!-- ======================================================================= -->
<h4>
  <a name="format_compile_units">Compile unit descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!0 = metadata !{
  i32,       ;; Tag = 17 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
             ;; (DW_TAG_compile_unit)
  i32,       ;; Unused field.
  i32,       ;; DWARF language identifier (ex. DW_LANG_C89)
  metadata,  ;; Source file name
  metadata,  ;; Source file directory (includes trailing slash)
  metadata   ;; Producer (ex. "4.0.1 LLVM (LLVM research group)")
  i1,        ;; True if this is a main compile unit.
  i1,        ;; True if this is optimized.
  metadata,  ;; Flags
  i32        ;; Runtime version
  metadata   ;; List of enums types
  metadata   ;; List of retained types
  metadata   ;; List of subprograms
  metadata   ;; List of global variables
}
</pre>
</div>

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

<p>Compile unit descriptors provide the root context for objects declared in a
   specific compilation unit. File descriptors are defined using this context.
   These descriptors are collected by a named metadata
   <tt>!llvm.dbg.cu</tt>. Compile unit descriptor keeps track of subprograms,
   global variables and type information.

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_files">File descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!0 = metadata !{
  i32,       ;; Tag = 41 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
             ;; (DW_TAG_file_type)
  metadata,  ;; Source file name
  metadata,  ;; Source file directory (includes trailing slash)
  metadata   ;; Unused
}
</pre>
</div>

<p>These descriptors contain information for a file. Global variables and top
   level functions would be defined using this context.k File descriptors also
   provide context for source line correspondence. </p>

<p>Each input file is encoded as a separate file descriptor in LLVM debugging
   information output. </p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_global_variables">Global variable descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!1 = metadata !{
  i32,      ;; Tag = 52 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
            ;; (DW_TAG_variable)
  i32,      ;; Unused field.
  metadata, ;; Reference to context descriptor
  metadata, ;; Name
  metadata, ;; Display name (fully qualified C++ name)
  metadata, ;; MIPS linkage name (for C++)
  metadata, ;; Reference to file where defined
  i32,      ;; Line number where defined
  metadata, ;; Reference to type descriptor
  i1,       ;; True if the global is local to compile unit (static)
  i1,       ;; True if the global is defined in the compile unit (not extern)
  {}*       ;; Reference to the global variable
}
</pre>
</div>

<p>These descriptors provide debug information about globals variables.  The
provide details such as name, type and where the variable is defined. All
global variables are collected inside the named metadata
<tt>!llvm.dbg.cu</tt>.</p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_subprograms">Subprogram descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32,      ;; Tag = 46 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
            ;; (DW_TAG_subprogram)
  i32,      ;; Unused field.
  metadata, ;; Reference to context descriptor
  metadata, ;; Name
  metadata, ;; Display name (fully qualified C++ name)
  metadata, ;; MIPS linkage name (for C++)
  metadata, ;; Reference to file where defined
  i32,      ;; Line number where defined
  metadata, ;; Reference to type descriptor
  i1,       ;; True if the global is local to compile unit (static)
  i1,       ;; True if the global is defined in the compile unit (not extern)
  i32,      ;; Line number where the scope of the subprogram begins
  i32,      ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual
  i32,      ;; Index into a virtual function
  metadata, ;; indicates which base type contains the vtable pointer for the
            ;; derived class
  i32,      ;; Flags - Artifical, Private, Protected, Explicit, Prototyped.
  i1,       ;; isOptimized
  Function *,;; Pointer to LLVM function
  metadata, ;; Lists function template parameters
  metadata  ;; Function declaration descriptor
  metadata  ;; List of function variables
}
</pre>
</div>

<p>These descriptors provide debug information about functions, methods and
   subprograms.  They provide details such as name, return types and the source
   location where the subprogram is defined.
</p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_blocks">Block descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!3 = metadata !{
  i32,     ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
  metadata,;; Reference to context descriptor
  i32,     ;; Line number
  i32,     ;; Column number
  metadata,;; Reference to source file
  i32      ;; Unique ID to identify blocks from a template function
}
</pre>
</div>

<p>This descriptor provides debug information about nested blocks within a
   subprogram. The line number and column numbers are used to dinstinguish
   two lexical blocks at same depth. </p>

<div class="doc_code">
<pre>
!3 = metadata !{
  i32,     ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
  metadata ;; Reference to the scope we're annotating with a file change
  metadata,;; Reference to the file the scope is enclosed in.
}
</pre>
</div>

<p>This descriptor provides a wrapper around a lexical scope to handle file
   changes in the middle of a lexical block.</p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_basic_type">Basic type descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!4 = metadata !{
  i32,      ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
            ;; (DW_TAG_base_type)
  metadata, ;; Reference to context
  metadata, ;; Name (may be "" for anonymous types)
  metadata, ;; Reference to file where defined (may be NULL)
  i32,      ;; Line number where defined (may be 0)
  i64,      ;; Size in bits
  i64,      ;; Alignment in bits
  i64,      ;; Offset in bits
  i32,      ;; Flags
  i32       ;; DWARF type encoding
}
</pre>
</div>

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

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

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

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_derived_type">Derived type descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!5 = metadata !{
  i32,      ;; Tag (see below)
  metadata, ;; Reference to context
  metadata, ;; Name (may be "" for anonymous types)
  metadata, ;; Reference to file where defined (may be NULL)
  i32,      ;; Line number where defined (may be 0)
  i64,      ;; Size in bits
  i64,      ;; Alignment in bits
  i64,      ;; Offset in bits
  i32,      ;; Flags to encode attributes, e.g. private
  metadata, ;; Reference to type derived from
  metadata, ;; (optional) Name of the Objective C property associated with
            ;; Objective-C an ivar
  metadata, ;; (optional) Name of the Objective C property getter selector.
  metadata, ;; (optional) Name of the Objective C property setter selector.
  i32       ;; (optional) Objective C property attributes.
}
</pre>
</div>

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

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

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

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

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

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

<p>Note that the <tt>void *</tt> type is expressed as a type derived from NULL.
</p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_composite_type">Composite type descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!6 = metadata !{
  i32,      ;; Tag (see below)
  metadata, ;; Reference to context
  metadata, ;; Name (may be "" for anonymous types)
  metadata, ;; Reference to file where defined (may be NULL)
  i32,      ;; Line number where defined (may be 0)
  i64,      ;; Size in bits
  i64,      ;; Alignment in bits
  i64,      ;; Offset in bits
  i32,      ;; Flags
  metadata, ;; Reference to type derived from
  metadata, ;; Reference to array of member descriptors
  i32       ;; Runtime languages
}
</pre>
</div>

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

<div class="doc_code">
<pre>
DW_TAG_array_type       = 1
DW_TAG_enumeration_type = 4
DW_TAG_structure_type   = 19
DW_TAG_union_type       = 23
DW_TAG_vector_type      = 259
DW_TAG_subroutine_type  = 21
DW_TAG_inheritance      = 28
</pre>
</div>

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

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

<p>The members of enumeration types (tag = <tt>DW_TAG_enumeration_type</tt>) are
   <a href="#format_enumeration">enumerator descriptors</a>, each representing
   the definition of enumeration value for the set. All enumeration type
   descriptors are collected inside the named metadata
   <tt>!llvm.dbg.cu</tt>.</p>

<p>The members of structure (tag = <tt>DW_TAG_structure_type</tt>) or union (tag
   = <tt>DW_TAG_union_type</tt>) types are any one of
   the <a href="#format_basic_type">basic</a>,
   <a href="#format_derived_type">derived</a>
   or <a href="#format_composite_type">composite</a> type descriptors, each
   representing a field member of the structure or union.</p>

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

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

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

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_subrange">Subrange descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!42 = metadata !{
  i32,    ;; Tag = 33 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subrange_type)
  i64,    ;; Low value
  i64     ;; High value
}
</pre>
</div>

<p>These descriptors are used to define ranges of array subscripts for an array
   <a href="#format_composite_type">composite type</a>.  The low value defines
   the lower bounds typically zero for C/C++.  The high value is the upper
   bounds.  Values are 64 bit.  High - low + 1 is the size of the array.  If low
   > high the array bounds are not included in generated debugging information.
</p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_enumeration">Enumerator descriptors</a>
</h4>

<div>

<div class="doc_code">
<pre>
!6 = metadata !{
  i32,      ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
            ;; (DW_TAG_enumerator)
  metadata, ;; Name
  i64       ;; Value
}
</pre>
</div>

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

</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_variables">Local variables</a>
</h4>

<div>

<div class="doc_code">
<pre>
!7 = metadata !{
  i32,      ;; Tag (see below)
  metadata, ;; Context
  metadata, ;; Name
  metadata, ;; Reference to file where defined
  i32,      ;; 24 bit - Line number where defined
            ;; 8 bit - Argument number. 1 indicates 1st argument.
  metadata, ;; Type descriptor
  i32,      ;; flags
  metadata  ;; (optional) Reference to inline location
}
</pre>
</div>

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

<div class="doc_code">
<pre>
DW_TAG_auto_variable   = 256
DW_TAG_arg_variable    = 257
DW_TAG_return_variable = 258
</pre>
</div>

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

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

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="format_common_intrinsics">Debugger intrinsic functions</a>
</h3>

<div>

<p>LLVM uses several intrinsic functions (name prefixed with "llvm.dbg") to
   provide debug information at various points in generated code.</p>

<!-- ======================================================================= -->
<h4>
  <a name="format_common_declare">llvm.dbg.declare</a>
</h4>

<div>
<pre>
  void %<a href="#format_common_declare">llvm.dbg.declare</a>(metadata, metadata)
</pre>

<p>This intrinsic provides information about a local element (e.g., variable). The
   first argument is metadata holding the alloca for the variable. The
   second argument is metadata containing a description of the variable.</p>
</div>

<!-- ======================================================================= -->
<h4>
  <a name="format_common_value">llvm.dbg.value</a>
</h4>

<div>
<pre>
  void %<a href="#format_common_value">llvm.dbg.value</a>(metadata, i64, metadata)
</pre>

<p>This intrinsic provides information when a user source variable is set to a
   new value.  The first argument is the new value (wrapped as metadata).  The
   second argument is the offset in the user source variable where the new value
   is written.  The third argument is metadata containing a description of the
   user source variable.</p>
</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="format_common_lifetime">Object lifetimes and scoping</a>
</h3>

<div>
<p>In many languages, the local variables in functions can have their lifetimes
   or scopes limited to a subset of a function.  In the C family of languages,
   for example, variables are only live (readable and writable) within the
   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 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 metadata attached to
   llvm instructions to encode line number and scoping information. Consider
   the following C fragment, for example:</p>

<div class="doc_code">
<pre>
1.  void foo() {
2.    int X = 21;
3.    int Y = 22;
4.    {
5.      int Z = 23;
6.      Z = X;
7.    }
8.    X = Y;
9.  }
</pre>
</div>

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

<div class="doc_code">
<pre>
define void @foo() nounwind ssp {
entry:
  %X = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
  %Y = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
  %Z = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=3]
  %0 = bitcast i32* %X to {}*                     ; &lt;{}*&gt; [#uses=1]
  call void @llvm.dbg.declare(metadata !{i32 * %X}, metadata !0), !dbg !7
  store i32 21, i32* %X, !dbg !8
  %1 = bitcast i32* %Y to {}*                     ; &lt;{}*&gt; [#uses=1]
  call void @llvm.dbg.declare(metadata !{i32 * %Y}, metadata !9), !dbg !10
  store i32 22, i32* %Y, !dbg !11
  %2 = bitcast i32* %Z to {}*                     ; &lt;{}*&gt; [#uses=1]
  call void @llvm.dbg.declare(metadata !{i32 * %Z}, metadata !12), !dbg !14
  store i32 23, i32* %Z, !dbg !15
  %tmp = load i32* %X, !dbg !16                   ; &lt;i32&gt; [#uses=1]
  %tmp1 = load i32* %Y, !dbg !16                  ; &lt;i32&gt; [#uses=1]
  %add = add nsw i32 %tmp, %tmp1, !dbg !16        ; &lt;i32&gt; [#uses=1]
  store i32 %add, i32* %Z, !dbg !16
  %tmp2 = load i32* %Y, !dbg !17                  ; &lt;i32&gt; [#uses=1]
  store i32 %tmp2, i32* %X, !dbg !17
  ret void, !dbg !18
}

declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone

!0 = metadata !{i32 459008, metadata !1, metadata !"X",
                metadata !3, i32 2, metadata !6}; [ DW_TAG_auto_variable ]
!1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
!2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", metadata !"foo",
               metadata !"foo", metadata !3, i32 1, metadata !4,
               i1 false, i1 true}; [DW_TAG_subprogram ]
!3 = metadata !{i32 458769, i32 0, i32 12, metadata !"foo.c",
                metadata !"/private/tmp", metadata !"clang 1.1", i1 true,
                i1 false, metadata !"", i32 0}; [DW_TAG_compile_unit ]
!4 = metadata !{i32 458773, metadata !3, metadata !"", null, i32 0, i64 0, i64 0,
                i64 0, i32 0, null, metadata !5, i32 0}; [DW_TAG_subroutine_type ]
!5 = metadata !{null}
!6 = metadata !{i32 458788, metadata !3, metadata !"int", metadata !3, i32 0,
                i64 32, i64 32, i64 0, i32 0, i32 5}; [DW_TAG_base_type ]
!7 = metadata !{i32 2, i32 7, metadata !1, null}
!8 = metadata !{i32 2, i32 3, metadata !1, null}
!9 = metadata !{i32 459008, metadata !1, metadata !"Y", metadata !3, i32 3,
                metadata !6}; [ DW_TAG_auto_variable ]
!10 = metadata !{i32 3, i32 7, metadata !1, null}
!11 = metadata !{i32 3, i32 3, metadata !1, null}
!12 = metadata !{i32 459008, metadata !13, metadata !"Z", metadata !3, i32 5,
                 metadata !6}; [ DW_TAG_auto_variable ]
!13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
!14 = metadata !{i32 5, i32 9, metadata !13, null}
!15 = metadata !{i32 5, i32 5, metadata !13, null}
!16 = metadata !{i32 6, i32 5, metadata !13, null}
!17 = metadata !{i32 8, i32 3, metadata !1, null}
!18 = metadata !{i32 9, i32 1, metadata !2, null}
</pre>
</div>

<p>This example illustrates a few important details about LLVM debugging
   information. In particular, it shows how the <tt>llvm.dbg.declare</tt>
   intrinsic and location information, which are attached to an instruction,
   are applied together to allow a debugger to analyze the relationship between
   statements, variable definitions, and the code used to implement the
   function.</p>

<div class="doc_code">
<pre>
call void @llvm.dbg.declare(metadata, metadata !0), !dbg !7
</pre>
</div>

<p>The first intrinsic
   <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
   encodes debugging information for the variable <tt>X</tt>. The metadata
   <tt>!dbg !7</tt> attached to the intrinsic provides scope information for the
   variable <tt>X</tt>.</p>

<div class="doc_code">
<pre>
!7 = metadata !{i32 2, i32 7, metadata !1, null}
!1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
!2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo",
                metadata !"foo", metadata !"foo", metadata !3, i32 1,
                metadata !4, i1 false, i1 true}; [DW_TAG_subprogram ]
</pre>
</div>

<p>Here <tt>!7</tt> is metadata providing location information. It has four
   fields: line number, column number, scope, and original scope. The original
   scope represents inline location if this instruction is inlined inside a
   caller, and is null otherwise. In this example, scope is encoded by
   <tt>!1</tt>. <tt>!1</tt> represents a lexical block inside the scope
   <tt>!2</tt>, where <tt>!2</tt> is a
   <a href="#format_subprograms">subprogram descriptor</a>. This way the
   location information attached to the intrinsics indicates that the
   variable <tt>X</tt> is declared at line number 2 at a function level scope in
   function <tt>foo</tt>.</p>

<p>Now lets take another example.</p>

<div class="doc_code">
<pre>
call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
</pre>
</div>

<p>The second intrinsic
   <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
   encodes debugging information for variable <tt>Z</tt>. The metadata
   <tt>!dbg !14</tt> attached to the intrinsic provides scope information for
   the variable <tt>Z</tt>.</p>

<div class="doc_code">
<pre>
!13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
!14 = metadata !{i32 5, i32 9, metadata !13, null}
</pre>
</div>

<p>Here <tt>!14</tt> indicates that <tt>Z</tt> is declared at line number 5 and
   column number 9 inside of lexical scope <tt>!13</tt>. The lexical scope
   itself resides inside of lexical scope <tt>!1</tt> described above.</p>

<p>The scope information attached with each instruction provides a
   straightforward way to find instructions covered by a scope.</p>

</div>

</div>

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

<div>

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

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

<p>The following sections provide examples of various C/C++ constructs and the
   debug information that would best describe those constructs.</p>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_compile_units">C/C++ source file information</a>
</h3>

<div>

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

<div class="doc_code">
<pre>
#include "MyHeader.h"

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

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

<div class="doc_code">
<pre>
...
;;
;; Define the compile unit for the main source file "/Users/mine/sources/MySource.cpp".
;;
!2 = metadata !{
  i32 524305,    ;; Tag
  i32 0,         ;; Unused
  i32 4,         ;; Language Id
  metadata !"MySource.cpp",
  metadata !"/Users/mine/sources",
  metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build 00)",
  i1 true,       ;; Main Compile Unit
  i1 false,      ;; Optimized compile unit
  metadata !"",  ;; Compiler flags
  i32 0}         ;; Runtime version

;;
;; Define the file for the file "/Users/mine/sources/MySource.cpp".
;;
!1 = metadata !{
  i32 524329,    ;; Tag
  metadata !"MySource.cpp",
  metadata !"/Users/mine/sources",
  metadata !2    ;; Compile unit
}

;;
;; Define the file for the file "/Users/mine/sources/Myheader.h"
;;
!3 = metadata !{
  i32 524329,    ;; Tag
  metadata !"Myheader.h"
  metadata !"/Users/mine/sources",
  metadata !2    ;; Compile unit
}

...
</pre>
</div>

<p>llvm::Instruction provides easy access to metadata attached with an
instruction. One can extract line number information encoded in LLVM IR
using <tt>Instruction::getMetadata()</tt> and
<tt>DILocation::getLineNumber()</tt>.
<pre>
 if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
   DILocation Loc(N);                      // DILocation is in DebugInfo.h
   unsigned Line = Loc.getLineNumber();
   StringRef File = Loc.getFilename();
   StringRef Dir = Loc.getDirectory();
 }
</pre>
</div>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_global_variable">C/C++ global variable information</a>
</h3>

<div>

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

<div class="doc_code">
<pre>
int MyGlobal = 100;
</pre>
</div>

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

<div class="doc_code">
<pre>
;;
;; Define the global itself.
;;
%MyGlobal = global int 100
...
;;
;; List of debug info of globals
;;
!llvm.dbg.cu = !{!0}

;; Define the compile unit.
!0 = metadata !{
  i32 786449,                       ;; Tag
  i32 0,                            ;; Context
  i32 4,                            ;; Language
  metadata !"foo.cpp",              ;; File
  metadata !"/Volumes/Data/tmp",    ;; Directory
  metadata !"clang version 3.1 ",   ;; Producer
  i1 true,                          ;; Deprecated field
  i1 false,                         ;; "isOptimized"?
  metadata !"",                     ;; Flags
  i32 0,                            ;; Runtime Version
  metadata !1,                      ;; Enum Types
  metadata !1,                      ;; Retained Types
  metadata !1,                      ;; Subprograms
  metadata !3                       ;; Global Variables
} ; [ DW_TAG_compile_unit ]

;; The Array of Global Variables
!3 = metadata !{
  metadata !4
}

!4 = metadata !{
  metadata !5
}

;;
;; Define the global variable itself.
;;
!5 = metadata !{
  i32 786484,                        ;; Tag
  i32 0,                             ;; Unused
  null,                              ;; Unused
  metadata !"MyGlobal",              ;; Name
  metadata !"MyGlobal",              ;; Display Name
  metadata !"",                      ;; Linkage Name
  metadata !6,                       ;; File
  i32 1,                             ;; Line
  metadata !7,                       ;; Type
  i32 0,                             ;; IsLocalToUnit
  i32 1,                             ;; IsDefinition
  i32* @MyGlobal                     ;; LLVM-IR Value
} ; [ DW_TAG_variable ]

;;
;; Define the file
;;
!6 = metadata !{
  i32 786473,                        ;; Tag
  metadata !"foo.cpp",               ;; File
  metadata !"/Volumes/Data/tmp",     ;; Directory
  null                               ;; Unused
} ; [ DW_TAG_file_type ]

;;
;; Define the type
;;
!7 = metadata !{
  i32 786468,                         ;; Tag
  null,                               ;; Unused
  metadata !"int",                    ;; Name
  null,                               ;; Unused
  i32 0,                              ;; Line
  i64 32,                             ;; Size in Bits
  i64 32,                             ;; Align in Bits
  i64 0,                              ;; Offset
  i32 0,                              ;; Flags
  i32 5                               ;; Encoding
} ; [ DW_TAG_base_type ]

</pre>
</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_subprogram">C/C++ function information</a>
</h3>

<div>

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

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

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

<div class="doc_code">
<pre>
;;
;; Define the anchor for subprograms.  Note that the second field of the
;; anchor is 46, which is the same as the tag for subprograms
;; (46 = DW_TAG_subprogram.)
;;
!6 = metadata !{
  i32 524334,        ;; Tag
  i32 0,             ;; Unused
  metadata !1,       ;; Context
  metadata !"main",  ;; Name
  metadata !"main",  ;; Display name
  metadata !"main",  ;; Linkage name
  metadata !1,       ;; File
  i32 1,             ;; Line number
  metadata !4,       ;; Type
  i1 false,          ;; Is local
  i1 true,           ;; Is definition
  i32 0,             ;; Virtuality attribute, e.g. pure virtual function
  i32 0,             ;; Index into virtual table for C++ methods
  i32 0,             ;; Type that holds virtual table.
  i32 0,             ;; Flags
  i1 false,          ;; True if this function is optimized
  Function *,        ;; Pointer to llvm::Function
  null               ;; Function template parameters
}
;;
;; Define the subprogram itself.
;;
define i32 @main(i32 %argc, i8** %argv) {
...
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_basic_types">C/C++ basic types</a>
</h3>

<div>

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

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_type_bool">bool</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"bool",  ;; Name
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 8,             ;; Size in Bits
  i64 8,             ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 2              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_char">char</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"char",  ;; Name
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 8,             ;; Size in Bits
  i64 8,             ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 6              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_unsigned_char">unsigned char</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"unsigned char",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 8,             ;; Size in Bits
  i64 8,             ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 8              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_short">short</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"short int",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 16,            ;; Size in Bits
  i64 16,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 5              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_unsigned_short">unsigned short</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"short unsigned int",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 16,            ;; Size in Bits
  i64 16,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 7              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_int">int</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"int",   ;; Name
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 32,            ;; Size in Bits
  i64 32,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 5              ;; Encoding
}
</pre></div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_unsigned_int">unsigned int</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"unsigned int",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 32,            ;; Size in Bits
  i64 32,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 7              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_long_long">long long</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"long long int",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 64,            ;; Size in Bits
  i64 64,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 5              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"long long unsigned int",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 64,            ;; Size in Bits
  i64 64,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 7              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_float">float</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"float",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 32,            ;; Size in Bits
  i64 32,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 4              ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="ccxx_basic_double">double</a>
</h4>

<div>

<div class="doc_code">
<pre>
!2 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"double",;; Name
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 64,            ;; Size in Bits
  i64 64,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 4              ;; Encoding
}
</pre>
</div>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_derived_types">C/C++ derived types</a>
</h3>

<div>

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

<div class="doc_code">
<pre>
typedef const int *IntPtr;
</pre>
</div>

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

<div class="doc_code">
<pre>
;;
;; Define the typedef "IntPtr".
;;
!2 = metadata !{
  i32 524310,          ;; Tag
  metadata !1,         ;; Context
  metadata !"IntPtr",  ;; Name
  metadata !3,         ;; File
  i32 0,               ;; Line number
  i64 0,               ;; Size in bits
  i64 0,               ;; Align in bits
  i64 0,               ;; Offset in bits
  i32 0,               ;; Flags
  metadata !4          ;; Derived From type
}

;;
;; Define the pointer type.
;;
!4 = metadata !{
  i32 524303,          ;; Tag
  metadata !1,         ;; Context
  metadata !"",        ;; Name
  metadata !1,         ;; File
  i32 0,               ;; Line number
  i64 64,              ;; Size in bits
  i64 64,              ;; Align in bits
  i64 0,               ;; Offset in bits
  i32 0,               ;; Flags
  metadata !5          ;; Derived From type
}
;;
;; Define the const type.
;;
!5 = metadata !{
  i32 524326,          ;; Tag
  metadata !1,         ;; Context
  metadata !"",        ;; Name
  metadata !1,         ;; File
  i32 0,               ;; Line number
  i64 32,              ;; Size in bits
  i64 32,              ;; Align in bits
  i64 0,               ;; Offset in bits
  i32 0,               ;; Flags
  metadata !6          ;; Derived From type
}
;;
;; Define the int type.
;;
!6 = metadata !{
  i32 524324,          ;; Tag
  metadata !1,         ;; Context
  metadata !"int",     ;; Name
  metadata !1,         ;; File
  i32 0,               ;; Line number
  i64 32,              ;; Size in bits
  i64 32,              ;; Align in bits
  i64 0,               ;; Offset in bits
  i32 0,               ;; Flags
  5                    ;; Encoding
}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_composite_types">C/C++ struct/union types</a>
</h3>

<div>

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

<div class="doc_code">
<pre>
struct Color {
  unsigned Red;
  unsigned Green;
  unsigned Blue;
};
</pre>
</div>

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

<div class="doc_code">
<pre>
;;
;; Define basic type for unsigned int.
;;
!5 = metadata !{
  i32 524324,        ;; Tag
  metadata !1,       ;; Context
  metadata !"unsigned int",
  metadata !1,       ;; File
  i32 0,             ;; Line number
  i64 32,            ;; Size in Bits
  i64 32,            ;; Align in Bits
  i64 0,             ;; Offset in Bits
  i32 0,             ;; Flags
  i32 7              ;; Encoding
}
;;
;; Define composite type for struct Color.
;;
!2 = metadata !{
  i32 524307,        ;; Tag
  metadata !1,       ;; Context
  metadata !"Color", ;; Name
  metadata !1,       ;; Compile unit
  i32 1,             ;; Line number
  i64 96,            ;; Size in bits
  i64 32,            ;; Align in bits
  i64 0,             ;; Offset in bits
  i32 0,             ;; Flags
  null,              ;; Derived From
  metadata !3,       ;; Elements
  i32 0              ;; Runtime Language
}

;;
;; Define the Red field.
;;
!4 = metadata !{
  i32 524301,        ;; Tag
  metadata !1,       ;; Context
  metadata !"Red",   ;; Name
  metadata !1,       ;; File
  i32 2,             ;; Line number
  i64 32,            ;; Size in bits
  i64 32,            ;; Align in bits
  i64 0,             ;; Offset in bits
  i32 0,             ;; Flags
  metadata !5        ;; Derived From type
}

;;
;; Define the Green field.
;;
!6 = metadata !{
  i32 524301,        ;; Tag
  metadata !1,       ;; Context
  metadata !"Green", ;; Name
  metadata !1,       ;; File
  i32 3,             ;; Line number
  i64 32,            ;; Size in bits
  i64 32,            ;; Align in bits
  i64 32,             ;; Offset in bits
  i32 0,             ;; Flags
  metadata !5        ;; Derived From type
}

;;
;; Define the Blue field.
;;
!7 = metadata !{
  i32 524301,        ;; Tag
  metadata !1,       ;; Context
  metadata !"Blue",  ;; Name
  metadata !1,       ;; File
  i32 4,             ;; Line number
  i64 32,            ;; Size in bits
  i64 32,            ;; Align in bits
  i64 64,             ;; Offset in bits
  i32 0,             ;; Flags
  metadata !5        ;; Derived From type
}

;;
;; Define the array of fields used by the composite type Color.
;;
!3 = metadata !{metadata !4, metadata !6, metadata !7}
</pre>
</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="ccxx_enumeration_types">C/C++ enumeration types</a>
</h3>

<div>

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

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

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

<div class="doc_code">
<pre>
;;
;; Define composite type for enum Trees
;;
!2 = metadata !{
  i32 524292,        ;; Tag
  metadata !1,       ;; Context
  metadata !"Trees", ;; Name
  metadata !1,       ;; File
  i32 1,             ;; Line number
  i64 32,            ;; Size in bits
  i64 32,            ;; Align in bits
  i64 0,             ;; Offset in bits
  i32 0,             ;; Flags
  null,              ;; Derived From type
  metadata !3,       ;; Elements
  i32 0              ;; Runtime language
}

;;
;; Define the array of enumerators used by composite type Trees.
;;
!3 = metadata !{metadata !4, metadata !5, metadata !6}

;;
;; Define Spruce enumerator.
;;
!4 = metadata !{i32 524328, metadata !"Spruce", i64 100}

;;
;; Define Oak enumerator.
;;
!5 = metadata !{i32 524328, metadata !"Oak", i64 200}

;;
;; Define Maple enumerator.
;;
!6 = metadata !{i32 524328, metadata !"Maple", i64 300}

</pre>
</div>

</div>

</div>


<!-- *********************************************************************** -->
<h2>
  <a name="llvmdwarfextension">Debugging information format</a>
</h2>
<!-- *********************************************************************** -->
<div>
<!-- ======================================================================= -->
<h3>
  <a name="objcproperty">Debugging Information Extension for Objective C Properties</a>
</h3>
<div>
<!-- *********************************************************************** -->
<h4>
  <a name="objcpropertyintroduction">Introduction</a>
</h4>
<!-- *********************************************************************** -->

<div>
<p>Objective C provides a simpler way to declare and define accessor methods
using declared properties. The language provides features to declare a
property and to let compiler synthesize accessor methods.
</p>

<p>The debugger lets developer inspect Objective C interfaces and their
instance variables and class variables. However, the debugger does not know
anything about the properties defined in Objective C interfaces. The debugger
consumes information generated by compiler in DWARF format. The format does
not support encoding of Objective C properties. This proposal describes DWARF
extensions to encode Objective C properties, which the debugger can use to let
developers inspect Objective C properties.
</p>

</div>


<!-- *********************************************************************** -->
<h4>
  <a name="objcpropertyproposal">Proposal</a>
</h4>
<!-- *********************************************************************** -->

<div>
<p>Objective C properties exist separately from class members. A property
can be defined only by &quot;setter&quot; and &quot;getter&quot; selectors, and
be calculated anew on each access.  Or a property can just be a direct access
to some declared ivar.  Finally it can have an ivar &quot;automatically
synthesized&quot; for it by the compiler, in which case the property can be
referred to in user code directly using the standard C dereference syntax as
well as through the property &quot;dot&quot; syntax, but there is no entry in
the @interface declaration corresponding to this ivar.
</p>
<p>
To facilitate debugging, these properties we will add a new DWARF TAG into the
DW_TAG_structure_type definition for the class to hold the description of a
given property, and a set of DWARF attributes that provide said description.
The property tag will also contain the name and declared type of the property.
</p>
<p>
If there is a related ivar, there will also be a DWARF property attribute placed
in the DW_TAG_member DIE for that ivar referring back to the property TAG for
that property. And in the case where the compiler synthesizes the ivar directly,
the compiler is expected to generate a DW_TAG_member for that ivar (with the
DW_AT_artificial set to 1), whose name will be the name used to access this
ivar directly in code, and with the property attribute pointing back to the
property it is backing.
</p>
<p>
The following examples will serve as illustration for our discussion:
</p>

<div class="doc_code">
<pre>
@interface I1 {
  int n2;
}

@property int p1;
@property int p2;
@end

@implementation I1
@synthesize p1;
@synthesize p2 = n2;
@end
</pre>
</div>

<p>
This produces the following DWARF (this is a &quot;pseudo dwarfdump&quot; output):
</p>
<div class="doc_code">
<pre>
0x00000100:  TAG_structure_type [7] *
               AT_APPLE_runtime_class( 0x10 )
               AT_name( "I1" )
               AT_decl_file( "Objc_Property.m" )
               AT_decl_line( 3 )

0x00000110    TAG_APPLE_property
                AT_name ( "p1" )
                AT_type ( {0x00000150} ( int ) )

0x00000120:   TAG_APPLE_property
                AT_name ( "p2" )
                AT_type ( {0x00000150} ( int ) )

0x00000130:   TAG_member [8]
                AT_name( "_p1" )
                AT_APPLE_property ( {0x00000110} "p1" )
                AT_type( {0x00000150} ( int ) )
                AT_artificial ( 0x1 )

0x00000140:    TAG_member [8]
                 AT_name( "n2" )
                 AT_APPLE_property ( {0x00000120} "p2" )
                 AT_type( {0x00000150} ( int ) )

0x00000150:  AT_type( ( int ) )
</pre>
</div>

<p> Note, the current convention is that the name of the ivar for an
auto-synthesized property is the name of the property from which it derives with
an underscore prepended, as is shown in the example.
But we actually don't need to know this convention, since we are given the name
of the ivar directly.
</p>

<p>
Also, it is common practice in ObjC to have different property declarations in
the @interface and @implementation - e.g. to provide a read-only property in
the interface,and a read-write interface in the implementation.  In that case,
the compiler should emit whichever property declaration will be in force in the
current translation unit.
</p>

<p> Developers can decorate a property with attributes which are encoded using
DW_AT_APPLE_property_attribute.
</p>

<div class="doc_code">
<pre>
@property (readonly, nonatomic) int pr;
</pre>
</div>
<p>
Which produces a property tag:
<p>
<div class="doc_code">
<pre>
TAG_APPLE_property [8]
  AT_name( "pr" )
  AT_type ( {0x00000147} (int) )
  AT_APPLE_property_attribute (DW_APPLE_PROPERTY_readonly, DW_APPLE_PROPERTY_nonatomic)
</pre>
</div>

<p> The setter and getter method names are attached to the property using
DW_AT_APPLE_property_setter and DW_AT_APPLE_property_getter attributes.
</p>
<div class="doc_code">
<pre>
@interface I1
@property (setter=myOwnP3Setter:) int p3;
-(void)myOwnP3Setter:(int)a;
@end

@implementation I1
@synthesize p3;
-(void)myOwnP3Setter:(int)a{ }
@end
</pre>
</div>

<p>
The DWARF for this would be:
</p>
<div class="doc_code">
<pre>
0x000003bd: TAG_structure_type [7] *
              AT_APPLE_runtime_class( 0x10 )
              AT_name( "I1" )
              AT_decl_file( "Objc_Property.m" )
              AT_decl_line( 3 )

0x000003cd      TAG_APPLE_property
                  AT_name ( "p3" )
                  AT_APPLE_property_setter ( "myOwnP3Setter:" )
                  AT_type( {0x00000147} ( int ) )

0x000003f3:     TAG_member [8]
                  AT_name( "_p3" )
                  AT_type ( {0x00000147} ( int ) )
                  AT_APPLE_property ( {0x000003cd} )
                  AT_artificial ( 0x1 )
</pre>
</div>

</div>

<!-- *********************************************************************** -->
<h4>
  <a name="objcpropertynewtags">New DWARF Tags</a>
</h4>
<!-- *********************************************************************** -->

<div>
<table border="1" cellspacing="0">
  <col width="200">
  <col width="200">
  <tr>
    <th>TAG</th>
    <th>Value</th>
  </tr>
  <tr>
    <td>DW_TAG_APPLE_property</td>
    <td>0x4200</td>
  </tr>
</table>

</div>

<!-- *********************************************************************** -->
<h4>
  <a name="objcpropertynewattributes">New DWARF Attributes</a>
</h4>
<!-- *********************************************************************** -->

<div>
<table border="1" cellspacing="0">
  <col width="200">
  <col width="200">
  <col width="200">
  <tr>
    <th>Attribute</th>
    <th>Value</th>
    <th>Classes</th>
  </tr>
  <tr>
    <td>DW_AT_APPLE_property</td>
    <td>0x3fed</td>
    <td>Reference</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_property_getter</td>
    <td>0x3fe9</td>
    <td>String</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_property_setter</td>
    <td>0x3fea</td>
    <td>String</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_property_attribute</td>
    <td>0x3feb</td>
    <td>Constant</td>
  </tr>
</table>

</div>

<!-- *********************************************************************** -->
<h4>
  <a name="objcpropertynewconstants">New DWARF Constants</a>
</h4>
<!-- *********************************************************************** -->

<div>
<table border="1" cellspacing="0">
  <col width="200">
  <col width="200">
  <tr>
    <th>Name</th>
    <th>Value</th>
  </tr>
  <tr>
    <td>DW_AT_APPLE_PROPERTY_readonly</td>
    <td>0x1</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_PROPERTY_readwrite</td>
    <td>0x2</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_PROPERTY_assign</td>
    <td>0x4</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_PROPERTY_retain</td>
    <td>0x8</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_PROPERTY_copy</td>
    <td>0x10</td>
  </tr>
  <tr>
    <td>DW_AT_APPLE_PROPERTY_nonatomic</td>
    <td>0x20</td>
  </tr>
</table>

</div>
</div>

<!-- ======================================================================= -->
<h3>
  <a name="acceltable">Name Accelerator Tables</a>
</h3>
<!-- ======================================================================= -->
<div>
<!-- ======================================================================= -->
<h4>
  <a name="acceltableintroduction">Introduction</a>
</h4>
<!-- ======================================================================= -->
<div>
<p>The .debug_pubnames and .debug_pubtypes formats are not what a debugger
  needs. The "pub" in the section name indicates that the entries in the
  table are publicly visible names only. This means no static or hidden
  functions show up in the .debug_pubnames. No static variables or private class
  variables are in the .debug_pubtypes. Many compilers add different things to
  these tables, so we can't rely upon the contents between gcc, icc, or clang.</p>

<p>The typical query given by users tends not to match up with the contents of
  these tables. For example, the DWARF spec states that "In the case of the
  name of a function member or static data member of a C++ structure, class or
  union, the name presented in the .debug_pubnames section is not the simple
  name given by the DW_AT_name attribute of the referenced debugging information
  entry, but rather the fully qualified name of the data or function member."
  So the only names in these tables for complex C++ entries is a fully
  qualified name.  Debugger users tend not to enter their search strings as
  "a::b::c(int,const Foo&) const", but rather as "c", "b::c" , or "a::b::c".  So
  the name entered in the name table must be demangled in order to chop it up
  appropriately and additional names must be manually entered into the table
  to make it effective as a name lookup table for debuggers to use.</p>

<p>All debuggers currently ignore the .debug_pubnames table as a result of
  its inconsistent and useless public-only name content making it a waste of
  space in the object file. These tables, when they are written to disk, are
  not sorted in any way, leaving every debugger to do its own parsing
  and sorting. These tables also include an inlined copy of the string values
  in the table itself making the tables much larger than they need to be on
  disk, especially for large C++ programs.</p>

<p>Can't we just fix the sections by adding all of the names we need to this
  table? No, because that is not what the tables are defined to contain and we
  won't know the difference between the old bad tables and the new good tables.
  At best we could make our own renamed sections that contain all of the data
  we need.</p>

<p>These tables are also insufficient for what a debugger like LLDB needs.
  LLDB uses clang for its expression parsing where LLDB acts as a PCH. LLDB is
  then often asked to look for type "foo" or namespace "bar", or list items in
  namespace "baz". Namespaces are not included in the pubnames or pubtypes
  tables. Since clang asks a lot of questions when it is parsing an expression,
  we need to be very fast when looking up names, as it happens a lot. Having new
  accelerator tables that are optimized for very quick lookups will benefit
  this type of debugging experience greatly.</p>

<p>We would like to generate name lookup tables that can be mapped into
  memory from disk, and used as is, with little or no up-front parsing. We would
  also be able to control the exact content of these different tables so they
  contain exactly what we need. The Name Accelerator Tables were designed
  to fix these issues. In order to solve these issues we need to:</p>

<ul>
  <li>Have a format that can be mapped into memory from disk and used as is</li>
  <li>Lookups should be very fast</li>
  <li>Extensible table format so these tables can be made by many producers</li>
  <li>Contain all of the names needed for typical lookups out of the box</li>
  <li>Strict rules for the contents of tables</li>
</ul>

<p>Table size is important and the accelerator table format should allow the
  reuse of strings from common string tables so the strings for the names are
  not duplicated. We also want to make sure the table is ready to be used as-is
  by simply mapping the table into memory with minimal header parsing.</p>

<p>The name lookups need to be fast and optimized for the kinds of lookups
  that debuggers tend to do. Optimally we would like to touch as few parts of
  the mapped table as possible when doing a name lookup and be able to quickly
  find the name entry we are looking for, or discover there are no matches. In
  the case of debuggers we optimized for lookups that fail most of the time.</p>

<p>Each table that is defined should have strict rules on exactly what is in
  the accelerator tables and documented so clients can rely on the content.</p>

</div>

<!-- ======================================================================= -->
<h4>
  <a name="acceltablehashes">Hash Tables</a>
</h4>
<!-- ======================================================================= -->

<div>
<h5>Standard Hash Tables</h5>

<p>Typical hash tables have a header, buckets, and each bucket points to the
bucket contents:
</p>

<div class="doc_code">
<pre>
.------------.
|  HEADER    |
|------------|
|  BUCKETS   |
|------------|
|  DATA      |
`------------'
</pre>
</div>

<p>The BUCKETS are an array of offsets to DATA for each hash:</p>

<div class="doc_code">
<pre>
.------------.
| 0x00001000 | BUCKETS[0]
| 0x00002000 | BUCKETS[1]
| 0x00002200 | BUCKETS[2]
| 0x000034f0 | BUCKETS[3]
|            | ...
| 0xXXXXXXXX | BUCKETS[n_buckets]
'------------'
</pre>
</div>

<p>So for bucket[3] in the example above, we have an offset into the table
  0x000034f0 which points to a chain of entries for the bucket. Each bucket
  must contain a next pointer, full 32 bit hash value, the string itself,
  and the data for the current string value.</p>

<div class="doc_code">
<pre>
            .------------.
0x000034f0: | 0x00003500 | next pointer
            | 0x12345678 | 32 bit hash
            | "erase"    | string value
            | data[n]    | HashData for this bucket
            |------------|
0x00003500: | 0x00003550 | next pointer
            | 0x29273623 | 32 bit hash
            | "dump"     | string value
            | data[n]    | HashData for this bucket
            |------------|
0x00003550: | 0x00000000 | next pointer
            | 0x82638293 | 32 bit hash
            | "main"     | string value
            | data[n]    | HashData for this bucket
            `------------'
</pre>
</div>

<p>The problem with this layout for debuggers is that we need to optimize for
  the negative lookup case where the symbol we're searching for is not present.
  So if we were to lookup "printf" in the table above, we would make a 32 hash
  for "printf", it might match bucket[3]. We would need to go to the offset
  0x000034f0 and start looking to see if our 32 bit hash matches. To do so, we
  need to read the next pointer, then read the hash, compare it, and skip to
  the next bucket. Each time we are skipping many bytes in memory and touching
  new cache pages just to do the compare on the full 32 bit hash. All of these
  accesses then tell us that we didn't have a match.</p>

<h5>Name Hash Tables</h5>

<p>To solve the issues mentioned above we have structured the hash tables
  a bit differently: a header, buckets, an array of all unique 32 bit hash
  values, followed by an array of hash value data offsets, one for each hash
  value, then the data for all hash values:</p>

<div class="doc_code">
<pre>
.-------------.
|  HEADER     |
|-------------|
|  BUCKETS    |
|-------------|
|  HASHES     |
|-------------|
|  OFFSETS    |
|-------------|
|  DATA       |
`-------------'
</pre>
</div>

<p>The BUCKETS in the name tables are an index into the HASHES array. By
  making all of the full 32 bit hash values contiguous in memory, we allow
  ourselves to efficiently check for a match while touching as little
  memory as possible. Most often checking the 32 bit hash values is as far as
  the lookup goes. If it does match, it usually is a match with no collisions.
  So for a table with "n_buckets" buckets, and "n_hashes" unique 32 bit hash
  values, we can clarify the contents of the BUCKETS, HASHES and OFFSETS as:</p>

<div class="doc_code">
<pre>
.-------------------------.
|  HEADER.magic           | uint32_t
|  HEADER.version         | uint16_t
|  HEADER.hash_function   | uint16_t
|  HEADER.bucket_count    | uint32_t
|  HEADER.hashes_count    | uint32_t
|  HEADER.header_data_len | uint32_t
|  HEADER_DATA            | HeaderData
|-------------------------|
|  BUCKETS                | uint32_t[n_buckets] // 32 bit hash indexes
|-------------------------|
|  HASHES                 | uint32_t[n_buckets] // 32 bit hash values
|-------------------------|
|  OFFSETS                | uint32_t[n_buckets] // 32 bit offsets to hash value data
|-------------------------|
|  ALL HASH DATA          |
`-------------------------'
</pre>
</div>

<p>So taking the exact same data from the standard hash example above we end up
  with:</p>

<div class="doc_code">
<pre>
            .------------.
            | HEADER     |
            |------------|
            |          0 | BUCKETS[0]
            |          2 | BUCKETS[1]
            |          5 | BUCKETS[2]
            |          6 | BUCKETS[3]
            |            | ...
            |        ... | BUCKETS[n_buckets]
            |------------|
            | 0x........ | HASHES[0]
            | 0x........ | HASHES[1]
            | 0x........ | HASHES[2]
            | 0x........ | HASHES[3]
            | 0x........ | HASHES[4]
            | 0x........ | HASHES[5]
            | 0x12345678 | HASHES[6]    hash for BUCKETS[3]
            | 0x29273623 | HASHES[7]    hash for BUCKETS[3]
            | 0x82638293 | HASHES[8]    hash for BUCKETS[3]
            | 0x........ | HASHES[9]
            | 0x........ | HASHES[10]
            | 0x........ | HASHES[11]
            | 0x........ | HASHES[12]
            | 0x........ | HASHES[13]
            | 0x........ | HASHES[n_hashes]
            |------------|
            | 0x........ | OFFSETS[0]
            | 0x........ | OFFSETS[1]
            | 0x........ | OFFSETS[2]
            | 0x........ | OFFSETS[3]
            | 0x........ | OFFSETS[4]
            | 0x........ | OFFSETS[5]
            | 0x000034f0 | OFFSETS[6]   offset for BUCKETS[3]
            | 0x00003500 | OFFSETS[7]   offset for BUCKETS[3]
            | 0x00003550 | OFFSETS[8]   offset for BUCKETS[3]
            | 0x........ | OFFSETS[9]
            | 0x........ | OFFSETS[10]
            | 0x........ | OFFSETS[11]
            | 0x........ | OFFSETS[12]
            | 0x........ | OFFSETS[13]
            | 0x........ | OFFSETS[n_hashes]
            |------------|
            |            |
            |            |
            |            |
            |            |
            |            |
            |------------|
0x000034f0: | 0x00001203 | .debug_str ("erase")
            | 0x00000004 | A 32 bit array count - number of HashData with name "erase"
            | 0x........ | HashData[0]
            | 0x........ | HashData[1]
            | 0x........ | HashData[2]
            | 0x........ | HashData[3]
            | 0x00000000 | String offset into .debug_str (terminate data for hash)
            |------------|
0x00003500: | 0x00001203 | String offset into .debug_str ("collision")
            | 0x00000002 | A 32 bit array count - number of HashData with name "collision"
            | 0x........ | HashData[0]
            | 0x........ | HashData[1]
            | 0x00001203 | String offset into .debug_str ("dump")
            | 0x00000003 | A 32 bit array count - number of HashData with name "dump"
            | 0x........ | HashData[0]
            | 0x........ | HashData[1]
            | 0x........ | HashData[2]
            | 0x00000000 | String offset into .debug_str (terminate data for hash)
            |------------|
0x00003550: | 0x00001203 | String offset into .debug_str ("main")
            | 0x00000009 | A 32 bit array count - number of HashData with name "main"
            | 0x........ | HashData[0]
            | 0x........ | HashData[1]
            | 0x........ | HashData[2]
            | 0x........ | HashData[3]
            | 0x........ | HashData[4]
            | 0x........ | HashData[5]
            | 0x........ | HashData[6]
            | 0x........ | HashData[7]
            | 0x........ | HashData[8]
            | 0x00000000 | String offset into .debug_str (terminate data for hash)
            `------------'
</pre>
</div>

<p>So we still have all of the same data, we just organize it more efficiently
  for debugger lookup. If we repeat the same "printf" lookup from above, we
  would hash "printf" and find it matches BUCKETS[3] by taking the 32 bit hash
  value and modulo it by n_buckets. BUCKETS[3] contains "6" which is the index
  into the HASHES table. We would then compare any consecutive 32 bit hashes
  values in the HASHES array as long as the hashes would be in BUCKETS[3]. We
  do this by verifying that each subsequent hash value modulo n_buckets is still
  3. In the case of a failed lookup we would access the memory for BUCKETS[3], and
  then compare a few consecutive 32 bit hashes before we know that we have no match.
  We don't end up marching through multiple words of memory and we really keep the
  number of processor data cache lines being accessed as small as possible.</p>

<p>The string hash that is used for these lookup tables is the Daniel J.
  Bernstein hash which is also used in the ELF GNU_HASH sections. It is a very
  good hash for all kinds of names in programs with very few hash collisions.</p>

<p>Empty buckets are designated by using an invalid hash index of UINT32_MAX.</p>
</div>

<!-- ======================================================================= -->
<h4>
  <a name="acceltabledetails">Details</a>
</h4>
<!-- ======================================================================= -->
<div>
<p>These name hash tables are designed to be generic where specializations of
  the table get to define additional data that goes into the header
  ("HeaderData"), how the string value is stored ("KeyType") and the content
  of the data for each hash value.</p>

<h5>Header Layout</h5>
<p>The header has a fixed part, and the specialized part. The exact format of
  the header is:</p>
<div class="doc_code">
<pre>
struct Header
{
  uint32_t   magic;           // 'HASH' magic value to allow endian detection
  uint16_t   version;         // Version number
  uint16_t   hash_function;   // The hash function enumeration that was used
  uint32_t   bucket_count;    // The number of buckets in this hash table
  uint32_t   hashes_count;    // The total number of unique hash values and hash data offsets in this table
  uint32_t   header_data_len; // The bytes to skip to get to the hash indexes (buckets) for correct alignment
                              // Specifically the length of the following HeaderData field - this does not
                              // include the size of the preceding fields
  HeaderData header_data;     // Implementation specific header data
};
</pre>
</div>
<p>The header starts with a 32 bit "magic" value which must be 'HASH' encoded as
  an ASCII integer. This allows the detection of the start of the hash table and
  also allows the table's byte order to be determined so the table can be
  correctly extracted. The "magic" value is followed by a 16 bit version number
  which allows the table to be revised and modified in the future. The current
  version number is 1. "hash_function" is a uint16_t enumeration that specifies
  which hash function was used to produce this table. The current values for the
  hash function enumerations include:</p>
<div class="doc_code">
<pre>
enum HashFunctionType
{
  eHashFunctionDJB = 0u, // Daniel J Bernstein hash function
};
</pre>
</div>
<p>"bucket_count" is a 32 bit unsigned integer that represents how many buckets
  are in the BUCKETS array. "hashes_count" is the number of unique 32 bit hash
  values that are in the HASHES array, and is the same number of offsets are
  contained in the OFFSETS array. "header_data_len" specifies the size in
  bytes of the HeaderData that is filled in by specialized versions of this
  table.</p>

<h5>Fixed Lookup</h5>
<p>The header is followed by the buckets, hashes, offsets, and hash value
  data.
<div class="doc_code">
<pre>
struct FixedTable
{
  uint32_t buckets[Header.bucket_count];  // An array of hash indexes into the "hashes[]" array below
  uint32_t hashes [Header.hashes_count];  // Every unique 32 bit hash for the entire table is in this table
  uint32_t offsets[Header.hashes_count];  // An offset that corresponds to each item in the "hashes[]" array above
};
</pre>
</div>
<p>"buckets" is an array of 32 bit indexes into the "hashes" array. The
  "hashes" array contains all of the 32 bit hash values for all names in the
  hash table. Each hash in the "hashes" table has an offset in the "offsets"
  array that points to the data for the hash value.</p>

<p>This table setup makes it very easy to repurpose these tables to contain
  different data, while keeping the lookup mechanism the same for all tables.
  This layout also makes it possible to save the table to disk and map it in
  later and do very efficient name lookups with little or no parsing.</p>

<p>DWARF lookup tables can be implemented in a variety of ways and can store
  a lot of information for each name. We want to make the DWARF tables
  extensible and able to store the data efficiently so we have used some of the
  DWARF features that enable efficient data storage to define exactly what kind
  of data we store for each name.</p>

<p>The "HeaderData" contains a definition of the contents of each HashData
  chunk. We might want to store an offset to all of the debug information
  entries (DIEs) for each name. To keep things extensible, we create a list of
  items, or Atoms, that are contained in the data for each name. First comes the
  type of the data in each atom:</p>
<div class="doc_code">
<pre>
enum AtomType
{
  eAtomTypeNULL       = 0u,
  eAtomTypeDIEOffset  = 1u,   // DIE offset, check form for encoding
  eAtomTypeCUOffset   = 2u,   // DIE offset of the compiler unit header that contains the item in question
  eAtomTypeTag        = 3u,   // DW_TAG_xxx value, should be encoded as DW_FORM_data1 (if no tags exceed 255) or DW_FORM_data2
  eAtomTypeNameFlags  = 4u,   // Flags from enum NameFlags
  eAtomTypeTypeFlags  = 5u,   // Flags from enum TypeFlags
};
</pre>
</div>
<p>The enumeration values and their meanings are:</p>
<div class="doc_code">
<pre>
  eAtomTypeNULL       - a termination atom that specifies the end of the atom list
  eAtomTypeDIEOffset  - an offset into the .debug_info section for the DWARF DIE for this name
  eAtomTypeCUOffset   - an offset into the .debug_info section for the CU that contains the DIE
  eAtomTypeDIETag     - The DW_TAG_XXX enumeration value so you don't have to parse the DWARF to see what it is
  eAtomTypeNameFlags  - Flags for functions and global variables (isFunction, isInlined, isExternal...)
  eAtomTypeTypeFlags  - Flags for types (isCXXClass, isObjCClass, ...)
</pre>
</div>
<p>Then we allow each atom type to define the atom type and how the data for
  each atom type data is encoded:</p>
<div class="doc_code">
<pre>
struct Atom
{
  uint16_t type;  // AtomType enum value
  uint16_t form;  // DWARF DW_FORM_XXX defines
};
</pre>
</div>
<p>The "form" type above is from the DWARF specification and defines the
  exact encoding of the data for the Atom type. See the DWARF specification for
  the DW_FORM_ definitions.</p>
<div class="doc_code">
<pre>
struct HeaderData
{
  uint32_t die_offset_base;
  uint32_t atom_count;
  Atoms    atoms[atom_count0];
};
</pre>
</div>
<p>"HeaderData" defines the base DIE offset that should be added to any atoms
  that are encoded using the DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4,
  DW_FORM_ref8 or DW_FORM_ref_udata. It also defines what is contained in
  each "HashData" object -- Atom.form tells us how large each field will be in
  the HashData and the Atom.type tells us how this data should be interpreted.</p>

<p>For the current implementations of the ".apple_names" (all functions + globals),
  the ".apple_types" (names of all types that are defined), and the
  ".apple_namespaces" (all namespaces), we currently set the Atom array to be:</p>
<div class="doc_code">
<pre>
HeaderData.atom_count = 1;
HeaderData.atoms[0].type = eAtomTypeDIEOffset;
HeaderData.atoms[0].form = DW_FORM_data4;
</pre>
</div>
<p>This defines the contents to be the DIE offset (eAtomTypeDIEOffset) that is
  encoded as a 32 bit value (DW_FORM_data4). This allows a single name to have
  multiple matching DIEs in a single file, which could come up with an inlined
  function for instance. Future tables could include more information about the
  DIE such as flags indicating if the DIE is a function, method, block,
  or inlined.</p>

<p>The KeyType for the DWARF table is a 32 bit string table offset into the
  ".debug_str" table. The ".debug_str" is the string table for the DWARF which
  may already contain copies of all of the strings. This helps make sure, with
  help from the compiler, that we reuse the strings between all of the DWARF
  sections and keeps the hash table size down. Another benefit to having the
  compiler generate all strings as DW_FORM_strp in the debug info, is that
  DWARF parsing can be made much faster.</p>

<p>After a lookup is made, we get an offset into the hash data. The hash data
  needs to be able to deal with 32 bit hash collisions, so the chunk of data
  at the offset in the hash data consists of a triple:</p>
<div class="doc_code">
<pre>
uint32_t str_offset
uint32_t hash_data_count
HashData[hash_data_count]
</pre>
</div>
<p>If "str_offset" is zero, then the bucket contents are done. 99.9% of the
  hash data chunks contain a single item (no 32 bit hash collision):</p>
<div class="doc_code">
<pre>
.------------.
| 0x00001023 | uint32_t KeyType (.debug_str[0x0001023] => "main")
| 0x00000004 | uint32_t HashData count
| 0x........ | uint32_t HashData[0] DIE offset
| 0x........ | uint32_t HashData[1] DIE offset
| 0x........ | uint32_t HashData[2] DIE offset
| 0x........ | uint32_t HashData[3] DIE offset
| 0x00000000 | uint32_t KeyType (end of hash chain)
`------------'
</pre>
</div>
<p>If there are collisions, you will have multiple valid string offsets:</p>
<div class="doc_code">
<pre>
.------------.
| 0x00001023 | uint32_t KeyType (.debug_str[0x0001023] => "main")
| 0x00000004 | uint32_t HashData count
| 0x........ | uint32_t HashData[0] DIE offset
| 0x........ | uint32_t HashData[1] DIE offset
| 0x........ | uint32_t HashData[2] DIE offset
| 0x........ | uint32_t HashData[3] DIE offset
| 0x00002023 | uint32_t KeyType (.debug_str[0x0002023] => "print")
| 0x00000002 | uint32_t HashData count
| 0x........ | uint32_t HashData[0] DIE offset
| 0x........ | uint32_t HashData[1] DIE offset
| 0x00000000 | uint32_t KeyType (end of hash chain)
`------------'
</pre>
</div>
<p>Current testing with real world C++ binaries has shown that there is around 1
  32 bit hash collision per 100,000 name entries.</p>
</div>
<!-- ======================================================================= -->
<h4>
  <a name="acceltablecontents">Contents</a>
</h4>
<!-- ======================================================================= -->
<div>
<p>As we said, we want to strictly define exactly what is included in the
  different tables. For DWARF, we have 3 tables: ".apple_names", ".apple_types",
  and ".apple_namespaces".</p>

<p>".apple_names" sections should contain an entry for each DWARF DIE whose
  DW_TAG is a DW_TAG_label, DW_TAG_inlined_subroutine, or DW_TAG_subprogram that
  has address attributes: DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges or
  DW_AT_entry_pc. It also contains DW_TAG_variable DIEs that have a DW_OP_addr
  in the location (global and static variables). All global and static variables
  should be included, including those scoped withing functions and classes. For
  example using the following code:</p>
<div class="doc_code">
<pre>
static int var = 0;

void f ()
{
  static int var = 0;
}
</pre>
</div>
<p>Both of the static "var" variables would be included in the table. All
  functions should emit both their full names and their basenames. For C or C++,
  the full name is the mangled name (if available) which is usually in the
  DW_AT_MIPS_linkage_name attribute, and the DW_AT_name contains the function
  basename. If global or static variables have a mangled name in a
  DW_AT_MIPS_linkage_name attribute, this should be emitted along with the
  simple name found in the DW_AT_name attribute.</p>

<p>".apple_types" sections should contain an entry for each DWARF DIE whose
  tag is one of:</p>
<ul>
  <li>DW_TAG_array_type</li>
  <li>DW_TAG_class_type</li>
  <li>DW_TAG_enumeration_type</li>
  <li>DW_TAG_pointer_type</li>
  <li>DW_TAG_reference_type</li>
  <li>DW_TAG_string_type</li>
  <li>DW_TAG_structure_type</li>
  <li>DW_TAG_subroutine_type</li>
  <li>DW_TAG_typedef</li>
  <li>DW_TAG_union_type</li>
  <li>DW_TAG_ptr_to_member_type</li>
  <li>DW_TAG_set_type</li>
  <li>DW_TAG_subrange_type</li>
  <li>DW_TAG_base_type</li>
  <li>DW_TAG_const_type</li>
  <li>DW_TAG_constant</li>
  <li>DW_TAG_file_type</li>
  <li>DW_TAG_namelist</li>
  <li>DW_TAG_packed_type</li>
  <li>DW_TAG_volatile_type</li>
  <li>DW_TAG_restrict_type</li>
  <li>DW_TAG_interface_type</li>
  <li>DW_TAG_unspecified_type</li>
  <li>DW_TAG_shared_type</li>
</ul>
<p>Only entries with a DW_AT_name attribute are included, and the entry must
  not be a forward declaration (DW_AT_declaration attribute with a non-zero value).
  For example, using the following code:</p>
<div class="doc_code">
<pre>
int main ()
{
  int *b = 0;
  return *b;
}
</pre>
</div>
<p>We get a few type DIEs:</p>
<div class="doc_code">
<pre>
0x00000067:     TAG_base_type [5]
                AT_encoding( DW_ATE_signed )
                AT_name( "int" )
                AT_byte_size( 0x04 )

0x0000006e:     TAG_pointer_type [6]
                AT_type( {0x00000067} ( int ) )
                AT_byte_size( 0x08 )
</pre>
</div>
<p>The DW_TAG_pointer_type is not included because it does not have a DW_AT_name.</p>

<p>".apple_namespaces" section should contain all DW_TAG_namespace DIEs. If
  we run into a namespace that has no name this is an anonymous namespace,
  and the name should be output as "(anonymous namespace)" (without the quotes).
  Why? This matches the output of the abi::cxa_demangle() that is in the standard
  C++ library that demangles mangled names.</p>
</div>

<!-- ======================================================================= -->
<h4>
  <a name="acceltableextensions">Language Extensions and File Format Changes</a>
</h4>
<!-- ======================================================================= -->
<div>
<h5>Objective-C Extensions</h5>
<p>".apple_objc" section should contain all DW_TAG_subprogram DIEs for an
  Objective-C class. The name used in the hash table is the name of the
  Objective-C class itself. If the Objective-C class has a category, then an
  entry is made for both the class name without the category, and for the class
  name with the category. So if we have a DIE at offset 0x1234 with a name
  of method "-[NSString(my_additions) stringWithSpecialString:]", we would add
  an entry for "NSString" that points to DIE 0x1234, and an entry for
  "NSString(my_additions)" that points to 0x1234. This allows us to quickly
  track down all Objective-C methods for an Objective-C class when doing
  expressions. It is needed because of the dynamic nature of Objective-C where
  anyone can add methods to a class. The DWARF for Objective-C methods is also
  emitted differently from C++ classes where the methods are not usually
  contained in the class definition, they are scattered about across one or more
  compile units. Categories can also be defined in different shared libraries.
  So we need to be able to quickly find all of the methods and class functions
  given the Objective-C class name, or quickly find all methods and class
  functions for a class + category name. This table does not contain any selector
  names, it just maps Objective-C class names (or class names + category) to all
  of the methods and class functions. The selectors are added as function
  basenames in the .debug_names section.</p>

<p>In the ".apple_names" section for Objective-C functions, the full name is the
  entire function name with the brackets ("-[NSString stringWithCString:]") and the
  basename is the selector only ("stringWithCString:").</p>

<h5>Mach-O Changes</h5>
<p>The sections names for the apple hash tables are for non mach-o files. For
  mach-o files, the sections should be contained in the "__DWARF" segment with
  names as follows:</p>
<ul>
  <li>".apple_names" -> "__apple_names"</li>
  <li>".apple_types" -> "__apple_types"</li>
  <li>".apple_namespaces" -> "__apple_namespac" (16 character limit)</li>
  <li> ".apple_objc" -> "__apple_objc"</li>
</ul>
</div>
</div>
</div>

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

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
