test commit redux
[oota-llvm.git] / docs / SourceLevelDebugging.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2                       "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6   <title>Source Level Debugging with LLVM</title>
7   <link rel="stylesheet" href="llvm.css" type="text/css">
8 </head>
9 <body>
10
11 <h1>Source Level Debugging with LLVM</h1>
12
13 <table class="layout" style="width:100%">
14   <tr class="layout">
15     <td class="left">
16 <ul>
17   <li><a href="#introduction">Introduction</a>
18   <ol>
19     <li><a href="#phil">Philosophy behind LLVM debugging information</a></li>
20     <li><a href="#consumers">Debug information consumers</a></li>
21     <li><a href="#debugopt">Debugging optimized code</a></li>
22   </ol></li>
23   <li><a href="#format">Debugging information format</a>
24   <ol>
25     <li><a href="#debug_info_descriptors">Debug information descriptors</a>
26     <ul>
27       <li><a href="#format_compile_units">Compile unit descriptors</a></li>
28       <li><a href="#format_files">File descriptors</a></li>
29       <li><a href="#format_global_variables">Global variable descriptors</a></li>
30       <li><a href="#format_subprograms">Subprogram descriptors</a></li>
31       <li><a href="#format_blocks">Block descriptors</a></li>
32       <li><a href="#format_basic_type">Basic type descriptors</a></li>
33       <li><a href="#format_derived_type">Derived type descriptors</a></li>
34       <li><a href="#format_composite_type">Composite type descriptors</a></li>
35       <li><a href="#format_subrange">Subrange descriptors</a></li>
36       <li><a href="#format_enumeration">Enumerator descriptors</a></li>
37       <li><a href="#format_variables">Local variables</a></li>
38     </ul></li>
39     <li><a href="#format_common_intrinsics">Debugger intrinsic functions</a>
40       <ul>
41       <li><a href="#format_common_declare">llvm.dbg.declare</a></li>
42       <li><a href="#format_common_value">llvm.dbg.value</a></li>
43     </ul></li>
44   </ol></li>
45   <li><a href="#format_common_lifetime">Object lifetimes and scoping</a></li>
46   <li><a href="#ccxx_frontend">C/C++ front-end specific debug information</a>
47   <ol>
48     <li><a href="#ccxx_compile_units">C/C++ source file information</a></li>
49     <li><a href="#ccxx_global_variable">C/C++ global variable information</a></li>
50     <li><a href="#ccxx_subprogram">C/C++ function information</a></li>
51     <li><a href="#ccxx_basic_types">C/C++ basic types</a></li>
52     <li><a href="#ccxx_derived_types">C/C++ derived types</a></li>
53     <li><a href="#ccxx_composite_types">C/C++ struct/union types</a></li>
54     <li><a href="#ccxx_enumeration_types">C/C++ enumeration types</a></li>
55   </ol></li>
56 </ul>
57 </td>
58 <td class="right">
59 <img src="img/venusflytrap.jpg" alt="A leafy and green bug eater" width="247"
60 height="369">
61 </td>
62 </tr></table>
63
64 <div class="doc_author">
65   <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
66             and <a href="mailto:jlaskey@mac.com">Jim Laskey</a></p>
67 </div>
68
69
70 <!-- *********************************************************************** -->
71 <h2><a name="introduction">Introduction</a></h2>
72 <!-- *********************************************************************** -->
73
74 <div>
75
76 <p>This document is the central repository for all information pertaining to
77    debug information in LLVM.  It describes the <a href="#format">actual format
78    that the LLVM debug information</a> takes, which is useful for those
79    interested in creating front-ends or dealing directly with the information.
80    Further, this document provides specific examples of what debug information
81    for C/C++ looks like.</p>
82
83 <!-- ======================================================================= -->
84 <h3>
85   <a name="phil">Philosophy behind LLVM debugging information</a>
86 </h3>
87
88 <div>
89
90 <p>The idea of the LLVM debugging information is to capture how the important
91    pieces of the source-language's Abstract Syntax Tree map onto LLVM code.
92    Several design aspects have shaped the solution that appears here.  The
93    important ones are:</p>
94
95 <ul>
96   <li>Debugging information should have very little impact on the rest of the
97       compiler.  No transformations, analyses, or code generators should need to
98       be modified because of debugging information.</li>
99
100   <li>LLVM optimizations should interact in <a href="#debugopt">well-defined and
101       easily described ways</a> with the debugging information.</li>
102
103   <li>Because LLVM is designed to support arbitrary programming languages,
104       LLVM-to-LLVM tools should not need to know anything about the semantics of
105       the source-level-language.</li>
106
107   <li>Source-level languages are often <b>widely</b> different from one another.
108       LLVM should not put any restrictions of the flavor of the source-language,
109       and the debugging information should work with any language.</li>
110
111   <li>With code generator support, it should be possible to use an LLVM compiler
112       to compile a program to native machine code and standard debugging
113       formats.  This allows compatibility with traditional machine-code level
114       debuggers, like GDB or DBX.</li>
115 </ul>
116
117 <p>The approach used by the LLVM implementation is to use a small set
118    of <a href="#format_common_intrinsics">intrinsic functions</a> to define a
119    mapping between LLVM program objects and the source-level objects.  The
120    description of the source-level program is maintained in LLVM metadata
121    in an <a href="#ccxx_frontend">implementation-defined format</a>
122    (the C/C++ front-end currently uses working draft 7 of
123    the <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3
124    standard</a>).</p>
125
126 <p>When a program is being debugged, a debugger interacts with the user and
127    turns the stored debug information into source-language specific information.
128    As such, a debugger must be aware of the source-language, and is thus tied to
129    a specific language or family of languages.</p>
130
131 </div>
132
133 <!-- ======================================================================= -->
134 <h3>
135   <a name="consumers">Debug information consumers</a>
136 </h3>
137
138 <div>
139
140 <p>The role of debug information is to provide meta information normally
141    stripped away during the compilation process.  This meta information provides
142    an LLVM user a relationship between generated code and the original program
143    source code.</p>
144
145 <p>Currently, debug information is consumed by DwarfDebug to produce dwarf
146    information used by the gdb debugger.  Other targets could use the same
147    information to produce stabs or other debug forms.</p>
148
149 <p>It would also be reasonable to use debug information to feed profiling tools
150    for analysis of generated code, or, tools for reconstructing the original
151    source from generated code.</p>
152
153 <p>TODO - expound a bit more.</p>
154
155 </div>
156
157 <!-- ======================================================================= -->
158 <h3>
159   <a name="debugopt">Debugging optimized code</a>
160 </h3>
161
162 <div>
163
164 <p>An extremely high priority of LLVM debugging information is to make it
165    interact well with optimizations and analysis.  In particular, the LLVM debug
166    information provides the following guarantees:</p>
167
168 <ul>
169   <li>LLVM debug information <b>always provides information to accurately read
170       the source-level state of the program</b>, regardless of which LLVM
171       optimizations have been run, and without any modification to the
172       optimizations themselves.  However, some optimizations may impact the
173       ability to modify the current state of the program with a debugger, such
174       as setting program variables, or calling functions that have been
175       deleted.</li>
176
177   <li>As desired, LLVM optimizations can be upgraded to be aware of the LLVM
178       debugging information, allowing them to update the debugging information
179       as they perform aggressive optimizations.  This means that, with effort,
180       the LLVM optimizers could optimize debug code just as well as non-debug
181       code.</li>
182
183   <li>LLVM debug information does not prevent optimizations from
184       happening (for example inlining, basic block reordering/merging/cleanup,
185       tail duplication, etc).</li>
186
187   <li>LLVM debug information is automatically optimized along with the rest of
188       the program, using existing facilities.  For example, duplicate
189       information is automatically merged by the linker, and unused information
190       is automatically removed.</li>
191 </ul>
192
193 <p>Basically, the debug information allows you to compile a program with
194    "<tt>-O0 -g</tt>" and get full debug information, allowing you to arbitrarily
195    modify the program as it executes from a debugger.  Compiling a program with
196    "<tt>-O3 -g</tt>" gives you full debug information that is always available
197    and accurate for reading (e.g., you get accurate stack traces despite tail
198    call elimination and inlining), but you might lose the ability to modify the
199    program and call functions where were optimized out of the program, or
200    inlined away completely.</p>
201
202 <p><a href="TestingGuide.html#quicktestsuite">LLVM test suite</a> provides a
203    framework to test optimizer's handling of debugging information. It can be
204    run like this:</p>
205
206 <div class="doc_code">
207 <pre>
208 % cd llvm/projects/test-suite/MultiSource/Benchmarks  # or some other level
209 % make TEST=dbgopt
210 </pre>
211 </div>
212
213 <p>This will test impact of debugging information on optimization passes. If
214    debugging information influences optimization passes then it will be reported
215    as a failure. See <a href="TestingGuide.html">TestingGuide</a> for more
216    information on LLVM test infrastructure and how to run various tests.</p>
217
218 </div>
219
220 </div>
221
222 <!-- *********************************************************************** -->
223 <h2>
224   <a name="format">Debugging information format</a>
225 </h2>
226 <!-- *********************************************************************** -->
227
228 <div>
229
230 <p>LLVM debugging information has been carefully designed to make it possible
231    for the optimizer to optimize the program and debugging information without
232    necessarily having to know anything about debugging information.  In
233    particular, the use of metadata avoids duplicated debugging information from
234    the beginning, and the global dead code elimination pass automatically 
235    deletes debugging information for a function if it decides to delete the 
236    function. </p>
237
238 <p>To do this, most of the debugging information (descriptors for types,
239    variables, functions, source files, etc) is inserted by the language
240    front-end in the form of LLVM metadata. </p>
241
242 <p>Debug information is designed to be agnostic about the target debugger and
243    debugging information representation (e.g. DWARF/Stabs/etc).  It uses a
244    generic pass to decode the information that represents variables, types, 
245    functions, namespaces, etc: this allows for arbitrary source-language 
246    semantics and type-systems to be used, as long as there is a module 
247    written for the target debugger to interpret the information. </p>
248
249 <p>To provide basic functionality, the LLVM debugger does have to make some
250    assumptions about the source-level language being debugged, though it keeps
251    these to a minimum.  The only common features that the LLVM debugger assumes
252    exist are <a href="#format_files">source files</a>,
253    and <a href="#format_global_variables">program objects</a>.  These abstract
254    objects are used by a debugger to form stack traces, show information about
255    local variables, etc.</p>
256
257 <p>This section of the documentation first describes the representation aspects
258    common to any source-language.  The <a href="#ccxx_frontend">next section</a>
259    describes the data layout conventions used by the C and C++ front-ends.</p>
260
261 <!-- ======================================================================= -->
262 <h3>
263   <a name="debug_info_descriptors">Debug information descriptors</a>
264 </h3>
265
266 <div>
267
268 <p>In consideration of the complexity and volume of debug information, LLVM
269    provides a specification for well formed debug descriptors. </p>
270
271 <p>Consumers of LLVM debug information expect the descriptors for program
272    objects to start in a canonical format, but the descriptors can include
273    additional information appended at the end that is source-language
274    specific. All LLVM debugging information is versioned, allowing backwards
275    compatibility in the case that the core structures need to change in some
276    way.  Also, all debugging information objects start with a tag to indicate
277    what type of object it is.  The source-language is allowed to define its own
278    objects, by using unreserved tag numbers.  We recommend using with tags in
279    the range 0x1000 through 0x2000 (there is a defined enum DW_TAG_user_base =
280    0x1000.)</p>
281
282 <p>The fields of debug descriptors used internally by LLVM 
283    are restricted to only the simple data types <tt>i32</tt>, <tt>i1</tt>,
284    <tt>float</tt>, <tt>double</tt>, <tt>mdstring</tt> and <tt>mdnode</tt>. </p>
285
286 <div class="doc_code">
287 <pre>
288 !1 = metadata !{
289   i32,   ;; A tag
290   ...
291 }
292 </pre>
293 </div>
294
295 <p><a name="LLVMDebugVersion">The first field of a descriptor is always an
296    <tt>i32</tt> containing a tag value identifying the content of the
297    descriptor.  The remaining fields are specific to the descriptor.  The values
298    of tags are loosely bound to the tag values of DWARF information entries.
299    However, that does not restrict the use of the information supplied to DWARF
300    targets.  To facilitate versioning of debug information, the tag is augmented
301    with the current debug version (LLVMDebugVersion = 8 &lt;&lt; 16 or
302    0x80000 or 524288.)</a></p>
303
304 <p>The details of the various descriptors follow.</p>  
305
306 <!-- ======================================================================= -->
307 <h4>
308   <a name="format_compile_units">Compile unit descriptors</a>
309 </h4>
310
311 <div>
312
313 <div class="doc_code">
314 <pre>
315 !0 = metadata !{
316   i32,       ;; Tag = 17 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
317              ;; (DW_TAG_compile_unit)
318   i32,       ;; Unused field. 
319   i32,       ;; DWARF language identifier (ex. DW_LANG_C89) 
320   metadata,  ;; Source file name
321   metadata,  ;; Source file directory (includes trailing slash)
322   metadata   ;; Producer (ex. "4.0.1 LLVM (LLVM research group)")
323   i1,        ;; True if this is a main compile unit. 
324   i1,        ;; True if this is optimized.
325   metadata,  ;; Flags
326   i32        ;; Runtime version
327   metadata   ;; List of enums types
328   metadata   ;; List of retained types
329   metadata   ;; List of subprograms
330   metadata   ;; List of global variables
331 }
332 </pre>
333 </div>
334
335 <p>These descriptors contain a source language ID for the file (we use the DWARF
336    3.0 ID numbers, such as <tt>DW_LANG_C89</tt>, <tt>DW_LANG_C_plus_plus</tt>,
337    <tt>DW_LANG_Cobol74</tt>, etc), three strings describing the filename,
338    working directory of the compiler, and an identifier string for the compiler
339    that produced it.</p>
340
341 <p>Compile unit descriptors provide the root context for objects declared in a
342    specific compilation unit. File descriptors are defined using this context.
343    These descriptors are collected by a named metadata 
344    <tt>!llvm.dbg.cu</tt>. Compile unit descriptor keeps track of subprograms,
345    global variables and type information.
346
347 </div>
348
349 <!-- ======================================================================= -->
350 <h4>
351   <a name="format_files">File descriptors</a>
352 </h4>
353
354 <div>
355
356 <div class="doc_code">
357 <pre>
358 !0 = metadata !{
359   i32,       ;; Tag = 41 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
360              ;; (DW_TAG_file_type)
361   metadata,  ;; Source file name
362   metadata,  ;; Source file directory (includes trailing slash)
363   metadata   ;; Unused
364 }
365 </pre>
366 </div>
367
368 <p>These descriptors contain information for a file. Global variables and top
369    level functions would be defined using this context.k File descriptors also
370    provide context for source line correspondence. </p>
371
372 <p>Each input file is encoded as a separate file descriptor in LLVM debugging
373    information output. </p>
374
375 </div>
376
377 <!-- ======================================================================= -->
378 <h4>
379   <a name="format_global_variables">Global variable descriptors</a>
380 </h4>
381
382 <div>
383
384 <div class="doc_code">
385 <pre>
386 !1 = metadata !{
387   i32,      ;; Tag = 52 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
388             ;; (DW_TAG_variable)
389   i32,      ;; Unused field.
390   metadata, ;; Reference to context descriptor
391   metadata, ;; Name
392   metadata, ;; Display name (fully qualified C++ name)
393   metadata, ;; MIPS linkage name (for C++)
394   metadata, ;; Reference to file where defined
395   i32,      ;; Line number where defined
396   metadata, ;; Reference to type descriptor
397   i1,       ;; True if the global is local to compile unit (static)
398   i1,       ;; True if the global is defined in the compile unit (not extern)
399   {}*       ;; Reference to the global variable
400 }
401 </pre>
402 </div>
403
404 <p>These descriptors provide debug information about globals variables.  The
405 provide details such as name, type and where the variable is defined. All
406 global variables are collected by named metadata <tt>!llvm.dbg.gv</tt>.</p>
407
408 </div>
409
410 <!-- ======================================================================= -->
411 <h4>
412   <a name="format_subprograms">Subprogram descriptors</a>
413 </h4>
414
415 <div>
416
417 <div class="doc_code">
418 <pre>
419 !2 = metadata !{
420   i32,      ;; Tag = 46 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
421             ;; (DW_TAG_subprogram)
422   i32,      ;; Unused field.
423   metadata, ;; Reference to context descriptor
424   metadata, ;; Name
425   metadata, ;; Display name (fully qualified C++ name)
426   metadata, ;; MIPS linkage name (for C++)
427   metadata, ;; Reference to file where defined
428   i32,      ;; Line number where defined
429   metadata, ;; Reference to type descriptor
430   i1,       ;; True if the global is local to compile unit (static)
431   i1,       ;; True if the global is defined in the compile unit (not extern)
432   i32,      ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual
433   i32,      ;; Index into a virtual function
434   metadata, ;; indicates which base type contains the vtable pointer for the 
435             ;; derived class
436   i1,       ;; isArtificial
437   i1,       ;; isOptimized
438   Function *,;; Pointer to LLVM function
439   metadata, ;; Lists function template parameters
440   metadata  ;; Function declaration descriptor
441   metadata  ;; List of function variables
442 }
443 </pre>
444 </div>
445
446 <p>These descriptors provide debug information about functions, methods and
447    subprograms.  They provide details such as name, return types and the source
448    location where the subprogram is defined.
449    All subprogram descriptors are collected by a named metadata 
450    <tt>!llvm.dbg.sp</tt>.
451 </p>
452
453 </div>
454
455 <!-- ======================================================================= -->
456 <h4>
457   <a name="format_blocks">Block descriptors</a>
458 </h4>
459
460 <div>
461
462 <div class="doc_code">
463 <pre>
464 !3 = metadata !{
465   i32,     ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
466   metadata,;; Reference to context descriptor
467   i32,     ;; Line number
468   i32,     ;; Column number
469   metadata,;; Reference to source file
470   i32      ;; Unique ID to identify blocks from a template function
471 }
472 </pre>
473 </div>
474
475 <p>This descriptor provides debug information about nested blocks within a
476    subprogram. The line number and column numbers are used to dinstinguish
477    two lexical blocks at same depth. </p>
478
479 <div class="doc_code">
480 <pre>
481 !3 = metadata !{
482   i32,     ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
483   metadata ;; Reference to the scope we're annotating with a file change
484   metadata,;; Reference to the file the scope is enclosed in.
485 }
486 </pre>
487 </div>
488
489 <p>This descriptor provides a wrapper around a lexical scope to handle file
490    changes in the middle of a lexical block.</p>
491
492 </div>
493
494 <!-- ======================================================================= -->
495 <h4>
496   <a name="format_basic_type">Basic type descriptors</a>
497 </h4>
498
499 <div>
500
501 <div class="doc_code">
502 <pre>
503 !4 = metadata !{
504   i32,      ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
505             ;; (DW_TAG_base_type)
506   metadata, ;; Reference to context 
507   metadata, ;; Name (may be "" for anonymous types)
508   metadata, ;; Reference to file where defined (may be NULL)
509   i32,      ;; Line number where defined (may be 0)
510   i64,      ;; Size in bits
511   i64,      ;; Alignment in bits
512   i64,      ;; Offset in bits
513   i32,      ;; Flags
514   i32       ;; DWARF type encoding
515 }
516 </pre>
517 </div>
518
519 <p>These descriptors define primitive types used in the code. Example int, bool
520    and float.  The context provides the scope of the type, which is usually the
521    top level.  Since basic types are not usually user defined the context
522    and line number can be left as NULL and 0.  The size, alignment and offset
523    are expressed in bits and can be 64 bit values.  The alignment is used to
524    round the offset when embedded in a
525    <a href="#format_composite_type">composite type</a> (example to keep float
526    doubles on 64 bit boundaries.) The offset is the bit offset if embedded in
527    a <a href="#format_composite_type">composite type</a>.</p>
528
529 <p>The type encoding provides the details of the type.  The values are typically
530    one of the following:</p>
531
532 <div class="doc_code">
533 <pre>
534 DW_ATE_address       = 1
535 DW_ATE_boolean       = 2
536 DW_ATE_float         = 4
537 DW_ATE_signed        = 5
538 DW_ATE_signed_char   = 6
539 DW_ATE_unsigned      = 7
540 DW_ATE_unsigned_char = 8
541 </pre>
542 </div>
543
544 </div>
545
546 <!-- ======================================================================= -->
547 <h4>
548   <a name="format_derived_type">Derived type descriptors</a>
549 </h4>
550
551 <div>
552
553 <div class="doc_code">
554 <pre>
555 !5 = metadata !{
556   i32,      ;; Tag (see below)
557   metadata, ;; Reference to context
558   metadata, ;; Name (may be "" for anonymous types)
559   metadata, ;; Reference to file where defined (may be NULL)
560   i32,      ;; Line number where defined (may be 0)
561   i64,      ;; Size in bits
562   i64,      ;; Alignment in bits
563   i64,      ;; Offset in bits
564   metadata, ;; Reference to type derived from
565   metadata, ;; (optional) Name of the Objective C property assoicated with 
566             ;; Objective-C an ivar 
567   metadata, ;; (optional) Name of the Objective C property getter selector.
568   metadata, ;; (optional) Name of the Objective C property setter selector.
569   i32       ;; (optional) Objective C property attributes.
570 }
571 </pre>
572 </div>
573
574 <p>These descriptors are used to define types derived from other types.  The
575 value of the tag varies depending on the meaning.  The following are possible
576 tag values:</p>
577
578 <div class="doc_code">
579 <pre>
580 DW_TAG_formal_parameter = 5
581 DW_TAG_member           = 13
582 DW_TAG_pointer_type     = 15
583 DW_TAG_reference_type   = 16
584 DW_TAG_typedef          = 22
585 DW_TAG_const_type       = 38
586 DW_TAG_volatile_type    = 53
587 DW_TAG_restrict_type    = 55
588 </pre>
589 </div>
590
591 <p><tt>DW_TAG_member</tt> is used to define a member of
592    a <a href="#format_composite_type">composite type</a>
593    or <a href="#format_subprograms">subprogram</a>.  The type of the member is
594    the <a href="#format_derived_type">derived
595    type</a>. <tt>DW_TAG_formal_parameter</tt> is used to define a member which
596    is a formal argument of a subprogram.</p>
597
598 <p><tt>DW_TAG_typedef</tt> is used to provide a name for the derived type.</p>
599
600 <p><tt>DW_TAG_pointer_type</tt>,<tt>DW_TAG_reference_type</tt>,
601    <tt>DW_TAG_const_type</tt>, <tt>DW_TAG_volatile_type</tt>
602    and <tt>DW_TAG_restrict_type</tt> are used to qualify
603    the <a href="#format_derived_type">derived type</a>. </p>
604
605 <p><a href="#format_derived_type">Derived type</a> location can be determined
606    from the context and line number.  The size, alignment and offset are
607    expressed in bits and can be 64 bit values.  The alignment is used to round
608    the offset when embedded in a <a href="#format_composite_type">composite
609    type</a> (example to keep float doubles on 64 bit boundaries.) The offset is
610    the bit offset if embedded in a <a href="#format_composite_type">composite
611    type</a>.</p>
612
613 <p>Note that the <tt>void *</tt> type is expressed as a type derived from NULL.
614 </p>
615
616 </div>
617
618 <!-- ======================================================================= -->
619 <h4>
620   <a name="format_composite_type">Composite type descriptors</a>
621 </h4>
622
623 <div>
624
625 <div class="doc_code">
626 <pre>
627 !6 = metadata !{
628   i32,      ;; Tag (see below)
629   metadata, ;; Reference to context
630   metadata, ;; Name (may be "" for anonymous types)
631   metadata, ;; Reference to file where defined (may be NULL)
632   i32,      ;; Line number where defined (may be 0)
633   i64,      ;; Size in bits
634   i64,      ;; Alignment in bits
635   i64,      ;; Offset in bits
636   i32,      ;; Flags
637   metadata, ;; Reference to type derived from
638   metadata, ;; Reference to array of member descriptors
639   i32       ;; Runtime languages
640 }
641 </pre>
642 </div>
643
644 <p>These descriptors are used to define types that are composed of 0 or more
645 elements.  The value of the tag varies depending on the meaning.  The following
646 are possible tag values:</p>
647
648 <div class="doc_code">
649 <pre>
650 DW_TAG_array_type       = 1
651 DW_TAG_enumeration_type = 4
652 DW_TAG_structure_type   = 19
653 DW_TAG_union_type       = 23
654 DW_TAG_vector_type      = 259
655 DW_TAG_subroutine_type  = 21
656 DW_TAG_inheritance      = 28
657 </pre>
658 </div>
659
660 <p>The vector flag indicates that an array type is a native packed vector.</p>
661
662 <p>The members of array types (tag = <tt>DW_TAG_array_type</tt>) or vector types
663    (tag = <tt>DW_TAG_vector_type</tt>) are <a href="#format_subrange">subrange
664    descriptors</a>, each representing the range of subscripts at that level of
665    indexing.</p>
666
667 <p>The members of enumeration types (tag = <tt>DW_TAG_enumeration_type</tt>) are
668    <a href="#format_enumeration">enumerator descriptors</a>, each representing
669    the definition of enumeration value for the set. All enumeration type
670    descriptors are collected by named metadata <tt>!llvm.dbg.enum</tt>.</p>
671
672 <p>The members of structure (tag = <tt>DW_TAG_structure_type</tt>) or union (tag
673    = <tt>DW_TAG_union_type</tt>) types are any one of
674    the <a href="#format_basic_type">basic</a>,
675    <a href="#format_derived_type">derived</a>
676    or <a href="#format_composite_type">composite</a> type descriptors, each
677    representing a field member of the structure or union.</p>
678
679 <p>For C++ classes (tag = <tt>DW_TAG_structure_type</tt>), member descriptors
680    provide information about base classes, static members and member
681    functions. If a member is a <a href="#format_derived_type">derived type
682    descriptor</a> and has a tag of <tt>DW_TAG_inheritance</tt>, then the type
683    represents a base class. If the member of is
684    a <a href="#format_global_variables">global variable descriptor</a> then it
685    represents a static member.  And, if the member is
686    a <a href="#format_subprograms">subprogram descriptor</a> then it represents
687    a member function.  For static members and member
688    functions, <tt>getName()</tt> returns the members link or the C++ mangled
689    name.  <tt>getDisplayName()</tt> the simplied version of the name.</p>
690
691 <p>The first member of subroutine (tag = <tt>DW_TAG_subroutine_type</tt>) type
692    elements is the return type for the subroutine.  The remaining elements are
693    the formal arguments to the subroutine.</p>
694
695 <p><a href="#format_composite_type">Composite type</a> location can be
696    determined from the context and line number.  The size, alignment and
697    offset are expressed in bits and can be 64 bit values.  The alignment is used
698    to round the offset when embedded in
699    a <a href="#format_composite_type">composite type</a> (as an example, to keep
700    float doubles on 64 bit boundaries.) The offset is the bit offset if embedded
701    in a <a href="#format_composite_type">composite type</a>.</p>
702
703 </div>
704
705 <!-- ======================================================================= -->
706 <h4>
707   <a name="format_subrange">Subrange descriptors</a>
708 </h4>
709
710 <div>
711
712 <div class="doc_code">
713 <pre>
714 !42 = metadata !{
715   i32,    ;; Tag = 33 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subrange_type)
716   i64,    ;; Low value
717   i64     ;; High value
718 }
719 </pre>
720 </div>
721
722 <p>These descriptors are used to define ranges of array subscripts for an array
723    <a href="#format_composite_type">composite type</a>.  The low value defines
724    the lower bounds typically zero for C/C++.  The high value is the upper
725    bounds.  Values are 64 bit.  High - low + 1 is the size of the array.  If low
726    > high the array bounds are not included in generated debugging information.
727 </p>
728
729 </div>
730
731 <!-- ======================================================================= -->
732 <h4>
733   <a name="format_enumeration">Enumerator descriptors</a>
734 </h4>
735
736 <div>
737
738 <div class="doc_code">
739 <pre>
740 !6 = metadata !{
741   i32,      ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
742             ;; (DW_TAG_enumerator)
743   metadata, ;; Name
744   i64       ;; Value
745 }
746 </pre>
747 </div>
748
749 <p>These descriptors are used to define members of an
750    enumeration <a href="#format_composite_type">composite type</a>, it
751    associates the name to the value.</p>
752
753 </div>
754
755 <!-- ======================================================================= -->
756 <h4>
757   <a name="format_variables">Local variables</a>
758 </h4>
759
760 <div>
761
762 <div class="doc_code">
763 <pre>
764 !7 = metadata !{
765   i32,      ;; Tag (see below)
766   metadata, ;; Context
767   metadata, ;; Name
768   metadata, ;; Reference to file where defined
769   i32,      ;; 24 bit - Line number where defined
770             ;; 8 bit - Argument number. 1 indicates 1st argument.
771   metadata, ;; Type descriptor
772   i32,      ;; flags
773   metadata  ;; (optional) Reference to inline location
774 }
775 </pre>
776 </div>
777
778 <p>These descriptors are used to define variables local to a sub program.  The
779    value of the tag depends on the usage of the variable:</p>
780
781 <div class="doc_code">
782 <pre>
783 DW_TAG_auto_variable   = 256
784 DW_TAG_arg_variable    = 257
785 DW_TAG_return_variable = 258
786 </pre>
787 </div>
788
789 <p>An auto variable is any variable declared in the body of the function.  An
790    argument variable is any variable that appears as a formal argument to the
791    function.  A return variable is used to track the result of a function and
792    has no source correspondent.</p>
793
794 <p>The context is either the subprogram or block where the variable is defined.
795    Name the source variable name.  Context and line indicate where the
796    variable was defined. Type descriptor defines the declared type of the
797    variable.</p>
798
799 </div>
800
801 </div>
802
803 <!-- ======================================================================= -->
804 <h3>
805   <a name="format_common_intrinsics">Debugger intrinsic functions</a>
806 </h3>
807
808 <div>
809
810 <p>LLVM uses several intrinsic functions (name prefixed with "llvm.dbg") to
811    provide debug information at various points in generated code.</p>
812
813 <!-- ======================================================================= -->
814 <h4>
815   <a name="format_common_declare">llvm.dbg.declare</a>
816 </h4>
817
818 <div>
819 <pre>
820   void %<a href="#format_common_declare">llvm.dbg.declare</a>(metadata, metadata)
821 </pre>
822
823 <p>This intrinsic provides information about a local element (ex. variable.) The
824    first argument is metadata holding alloca for the variable. The
825    second argument is metadata containing description of the variable. </p>
826 </div>
827
828 <!-- ======================================================================= -->
829 <h4>
830   <a name="format_common_value">llvm.dbg.value</a>
831 </h4>
832
833 <div>
834 <pre>
835   void %<a href="#format_common_value">llvm.dbg.value</a>(metadata, i64, metadata)
836 </pre>
837
838 <p>This intrinsic provides information when a user source variable is set to a
839    new value.  The first argument is the new value (wrapped as metadata).  The
840    second argument is the offset in the user source variable where the new value
841    is written.  The third argument is metadata containing description of the
842    user source variable. </p>
843 </div>
844
845 </div>
846
847 <!-- ======================================================================= -->
848 <h3>
849   <a name="format_common_lifetime">Object lifetimes and scoping</a>
850 </h3>
851
852 <div>
853 <p>In many languages, the local variables in functions can have their lifetimes
854    or scopes limited to a subset of a function.  In the C family of languages,
855    for example, variables are only live (readable and writable) within the
856    source block that they are defined in.  In functional languages, values are
857    only readable after they have been defined.  Though this is a very obvious
858    concept, it is non-trivial to model in LLVM, because it has no notion of
859    scoping in this sense, and does not want to be tied to a language's scoping
860    rules.</p>
861
862 <p>In order to handle this, the LLVM debug format uses the metadata attached to
863    llvm instructions to encode line number and scoping information. Consider
864    the following C fragment, for example:</p>
865
866 <div class="doc_code">
867 <pre>
868 1.  void foo() {
869 2.    int X = 21;
870 3.    int Y = 22;
871 4.    {
872 5.      int Z = 23;
873 6.      Z = X;
874 7.    }
875 8.    X = Y;
876 9.  }
877 </pre>
878 </div>
879
880 <p>Compiled to LLVM, this function would be represented like this:</p>
881
882 <div class="doc_code">
883 <pre>
884 define void @foo() nounwind ssp {
885 entry:
886   %X = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
887   %Y = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
888   %Z = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=3]
889   %0 = bitcast i32* %X to {}*                     ; &lt;{}*&gt; [#uses=1]
890   call void @llvm.dbg.declare(metadata !{i32 * %X}, metadata !0), !dbg !7
891   store i32 21, i32* %X, !dbg !8
892   %1 = bitcast i32* %Y to {}*                     ; &lt;{}*&gt; [#uses=1]
893   call void @llvm.dbg.declare(metadata !{i32 * %Y}, metadata !9), !dbg !10
894   store i32 22, i32* %Y, !dbg !11
895   %2 = bitcast i32* %Z to {}*                     ; &lt;{}*&gt; [#uses=1]
896   call void @llvm.dbg.declare(metadata !{i32 * %Z}, metadata !12), !dbg !14
897   store i32 23, i32* %Z, !dbg !15
898   %tmp = load i32* %X, !dbg !16                   ; &lt;i32&gt; [#uses=1]
899   %tmp1 = load i32* %Y, !dbg !16                  ; &lt;i32&gt; [#uses=1]
900   %add = add nsw i32 %tmp, %tmp1, !dbg !16        ; &lt;i32&gt; [#uses=1]
901   store i32 %add, i32* %Z, !dbg !16
902   %tmp2 = load i32* %Y, !dbg !17                  ; &lt;i32&gt; [#uses=1]
903   store i32 %tmp2, i32* %X, !dbg !17
904   ret void, !dbg !18
905 }
906
907 declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
908
909 !0 = metadata !{i32 459008, metadata !1, metadata !"X", 
910                 metadata !3, i32 2, metadata !6}; [ DW_TAG_auto_variable ]
911 !1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
912 !2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", metadata !"foo", 
913                metadata !"foo", metadata !3, i32 1, metadata !4, 
914                i1 false, i1 true}; [DW_TAG_subprogram ]
915 !3 = metadata !{i32 458769, i32 0, i32 12, metadata !"foo.c", 
916                 metadata !"/private/tmp", metadata !"clang 1.1", i1 true, 
917                 i1 false, metadata !"", i32 0}; [DW_TAG_compile_unit ]
918 !4 = metadata !{i32 458773, metadata !3, metadata !"", null, i32 0, i64 0, i64 0, 
919                 i64 0, i32 0, null, metadata !5, i32 0}; [DW_TAG_subroutine_type ]
920 !5 = metadata !{null}
921 !6 = metadata !{i32 458788, metadata !3, metadata !"int", metadata !3, i32 0, 
922                 i64 32, i64 32, i64 0, i32 0, i32 5}; [DW_TAG_base_type ]
923 !7 = metadata !{i32 2, i32 7, metadata !1, null}
924 !8 = metadata !{i32 2, i32 3, metadata !1, null}
925 !9 = metadata !{i32 459008, metadata !1, metadata !"Y", metadata !3, i32 3, 
926                 metadata !6}; [ DW_TAG_auto_variable ]
927 !10 = metadata !{i32 3, i32 7, metadata !1, null}
928 !11 = metadata !{i32 3, i32 3, metadata !1, null}
929 !12 = metadata !{i32 459008, metadata !13, metadata !"Z", metadata !3, i32 5, 
930                  metadata !6}; [ DW_TAG_auto_variable ]
931 !13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
932 !14 = metadata !{i32 5, i32 9, metadata !13, null}
933 !15 = metadata !{i32 5, i32 5, metadata !13, null}
934 !16 = metadata !{i32 6, i32 5, metadata !13, null}
935 !17 = metadata !{i32 8, i32 3, metadata !1, null}
936 !18 = metadata !{i32 9, i32 1, metadata !2, null}
937 </pre>
938 </div>
939
940 <p>This example illustrates a few important details about LLVM debugging
941    information. In particular, it shows how the <tt>llvm.dbg.declare</tt>
942    intrinsic and location information, which are attached to an instruction,
943    are applied together to allow a debugger to analyze the relationship between
944    statements, variable definitions, and the code used to implement the
945    function.</p>
946
947 <div class="doc_code">
948 <pre>
949 call void @llvm.dbg.declare(metadata, metadata !0), !dbg !7   
950 </pre>
951 </div>
952
953 <p>The first intrinsic
954    <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
955    encodes debugging information for the variable <tt>X</tt>. The metadata
956    <tt>!dbg !7</tt> attached to the intrinsic provides scope information for the
957    variable <tt>X</tt>.</p>
958
959 <div class="doc_code">
960 <pre>
961 !7 = metadata !{i32 2, i32 7, metadata !1, null}
962 !1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
963 !2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", 
964                 metadata !"foo", metadata !"foo", metadata !3, i32 1, 
965                 metadata !4, i1 false, i1 true}; [DW_TAG_subprogram ]   
966 </pre>
967 </div>
968
969 <p>Here <tt>!7</tt> is metadata providing location information. It has four
970    fields: line number, column number, scope, and original scope. The original
971    scope represents inline location if this instruction is inlined inside a
972    caller, and is null otherwise. In this example, scope is encoded by
973    <tt>!1</tt>. <tt>!1</tt> represents a lexical block inside the scope
974    <tt>!2</tt>, where <tt>!2</tt> is a
975    <a href="#format_subprograms">subprogram descriptor</a>. This way the
976    location information attached to the intrinsics indicates that the
977    variable <tt>X</tt> is declared at line number 2 at a function level scope in
978    function <tt>foo</tt>.</p>
979
980 <p>Now lets take another example.</p>
981
982 <div class="doc_code">
983 <pre>
984 call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
985 </pre>
986 </div>
987
988 <p>The second intrinsic
989    <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
990    encodes debugging information for variable <tt>Z</tt>. The metadata 
991    <tt>!dbg !14</tt> attached to the intrinsic provides scope information for
992    the variable <tt>Z</tt>.</p>
993
994 <div class="doc_code">
995 <pre>
996 !13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
997 !14 = metadata !{i32 5, i32 9, metadata !13, null}
998 </pre>
999 </div>
1000
1001 <p>Here <tt>!14</tt> indicates that <tt>Z</tt> is declared at line number 5 and
1002    column number 9 inside of lexical scope <tt>!13</tt>. The lexical scope
1003    itself resides inside of lexical scope <tt>!1</tt> described above.</p>
1004
1005 <p>The scope information attached with each instruction provides a
1006    straightforward way to find instructions covered by a scope.</p>
1007
1008 </div>
1009
1010 </div>
1011
1012 <!-- *********************************************************************** -->
1013 <h2>
1014   <a name="ccxx_frontend">C/C++ front-end specific debug information</a>
1015 </h2>
1016 <!-- *********************************************************************** -->
1017
1018 <div>
1019
1020 <p>The C and C++ front-ends represent information about the program in a format
1021    that is effectively identical
1022    to <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3.0</a> in
1023    terms of information content.  This allows code generators to trivially
1024    support native debuggers by generating standard dwarf information, and
1025    contains enough information for non-dwarf targets to translate it as
1026    needed.</p>
1027
1028 <p>This section describes the forms used to represent C and C++ programs. Other
1029    languages could pattern themselves after this (which itself is tuned to
1030    representing programs in the same way that DWARF 3 does), or they could
1031    choose to provide completely different forms if they don't fit into the DWARF
1032    model.  As support for debugging information gets added to the various LLVM
1033    source-language front-ends, the information used should be documented
1034    here.</p>
1035
1036 <p>The following sections provide examples of various C/C++ constructs and the
1037    debug information that would best describe those constructs.</p>
1038
1039 <!-- ======================================================================= -->
1040 <h3>
1041   <a name="ccxx_compile_units">C/C++ source file information</a>
1042 </h3>
1043
1044 <div>
1045
1046 <p>Given the source files <tt>MySource.cpp</tt> and <tt>MyHeader.h</tt> located
1047    in the directory <tt>/Users/mine/sources</tt>, the following code:</p>
1048
1049 <div class="doc_code">
1050 <pre>
1051 #include "MyHeader.h"
1052
1053 int main(int argc, char *argv[]) {
1054   return 0;
1055 }
1056 </pre>
1057 </div>
1058
1059 <p>a C/C++ front-end would generate the following descriptors:</p>
1060
1061 <div class="doc_code">
1062 <pre>
1063 ...
1064 ;;
1065 ;; Define the compile unit for the main source file "/Users/mine/sources/MySource.cpp".
1066 ;;
1067 !2 = metadata !{
1068   i32 524305,    ;; Tag
1069   i32 0,         ;; Unused
1070   i32 4,         ;; Language Id
1071   metadata !"MySource.cpp", 
1072   metadata !"/Users/mine/sources", 
1073   metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build 00)", 
1074   i1 true,       ;; Main Compile Unit
1075   i1 false,      ;; Optimized compile unit
1076   metadata !"",  ;; Compiler flags
1077   i32 0}         ;; Runtime version
1078
1079 ;;
1080 ;; Define the file for the file "/Users/mine/sources/MySource.cpp".
1081 ;;
1082 !1 = metadata !{
1083   i32 524329,    ;; Tag
1084   metadata !"MySource.cpp", 
1085   metadata !"/Users/mine/sources", 
1086   metadata !2    ;; Compile unit
1087 }
1088
1089 ;;
1090 ;; Define the file for the file "/Users/mine/sources/Myheader.h"
1091 ;;
1092 !3 = metadata !{
1093   i32 524329,    ;; Tag
1094   metadata !"Myheader.h"
1095   metadata !"/Users/mine/sources", 
1096   metadata !2    ;; Compile unit
1097 }
1098
1099 ...
1100 </pre>
1101 </div>
1102
1103 <p>llvm::Instruction provides easy access to metadata attached with an 
1104 instruction. One can extract line number information encoded in LLVM IR
1105 using <tt>Instruction::getMetadata()</tt> and 
1106 <tt>DILocation::getLineNumber()</tt>.
1107 <pre>
1108  if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
1109    DILocation Loc(N);                      // DILocation is in DebugInfo.h
1110    unsigned Line = Loc.getLineNumber();
1111    StringRef File = Loc.getFilename();
1112    StringRef Dir = Loc.getDirectory();
1113  }
1114 </pre>
1115 </div>
1116
1117 <!-- ======================================================================= -->
1118 <h3>
1119   <a name="ccxx_global_variable">C/C++ global variable information</a>
1120 </h3>
1121
1122 <div>
1123
1124 <p>Given an integer global variable declared as follows:</p>
1125
1126 <div class="doc_code">
1127 <pre>
1128 int MyGlobal = 100;
1129 </pre>
1130 </div>
1131
1132 <p>a C/C++ front-end would generate the following descriptors:</p>
1133
1134 <div class="doc_code">
1135 <pre>
1136 ;;
1137 ;; Define the global itself.
1138 ;;
1139 %MyGlobal = global int 100
1140 ...
1141 ;;
1142 ;; List of debug info of globals
1143 ;;
1144 !llvm.dbg.gv = !{!0}
1145
1146 ;;
1147 ;; Define the global variable descriptor.  Note the reference to the global
1148 ;; variable anchor and the global variable itself.
1149 ;;
1150 !0 = metadata !{
1151   i32 524340,              ;; Tag
1152   i32 0,                   ;; Unused
1153   metadata !1,             ;; Context
1154   metadata !"MyGlobal",    ;; Name
1155   metadata !"MyGlobal",    ;; Display Name
1156   metadata !"MyGlobal",    ;; Linkage Name
1157   metadata !3,             ;; Compile Unit
1158   i32 1,                   ;; Line Number
1159   metadata !4,             ;; Type
1160   i1 false,                ;; Is a local variable
1161   i1 true,                 ;; Is this a definition
1162   i32* @MyGlobal           ;; The global variable
1163 }
1164
1165 ;;
1166 ;; Define the basic type of 32 bit signed integer.  Note that since int is an
1167 ;; intrinsic type the source file is NULL and line 0.
1168 ;;    
1169 !4 = metadata !{
1170   i32 524324,              ;; Tag
1171   metadata !1,             ;; Context
1172   metadata !"int",         ;; Name
1173   metadata !1,             ;; File
1174   i32 0,                   ;; Line number
1175   i64 32,                  ;; Size in Bits
1176   i64 32,                  ;; Align in Bits
1177   i64 0,                   ;; Offset in Bits
1178   i32 0,                   ;; Flags
1179   i32 5                    ;; Encoding
1180 }
1181
1182 </pre>
1183 </div>
1184
1185 </div>
1186
1187 <!-- ======================================================================= -->
1188 <h3>
1189   <a name="ccxx_subprogram">C/C++ function information</a>
1190 </h3>
1191
1192 <div>
1193
1194 <p>Given a function declared as follows:</p>
1195
1196 <div class="doc_code">
1197 <pre>
1198 int main(int argc, char *argv[]) {
1199   return 0;
1200 }
1201 </pre>
1202 </div>
1203
1204 <p>a C/C++ front-end would generate the following descriptors:</p>
1205
1206 <div class="doc_code">
1207 <pre>
1208 ;;
1209 ;; Define the anchor for subprograms.  Note that the second field of the
1210 ;; anchor is 46, which is the same as the tag for subprograms
1211 ;; (46 = DW_TAG_subprogram.)
1212 ;;
1213 !6 = metadata !{
1214   i32 524334,        ;; Tag
1215   i32 0,             ;; Unused
1216   metadata !1,       ;; Context
1217   metadata !"main",  ;; Name
1218   metadata !"main",  ;; Display name
1219   metadata !"main",  ;; Linkage name
1220   metadata !1,       ;; File
1221   i32 1,             ;; Line number
1222   metadata !4,       ;; Type
1223   i1 false,          ;; Is local 
1224   i1 true,           ;; Is definition
1225   i32 0,             ;; Virtuality attribute, e.g. pure virtual function
1226   i32 0,             ;; Index into virtual table for C++ methods
1227   i32 0,             ;; Type that holds virtual table.
1228   i32 0,             ;; Flags
1229   i1 false,          ;; True if this function is optimized
1230   Function *,        ;; Pointer to llvm::Function
1231   null               ;; Function template parameters
1232 }
1233 ;;
1234 ;; Define the subprogram itself.
1235 ;;
1236 define i32 @main(i32 %argc, i8** %argv) {
1237 ...
1238 }
1239 </pre>
1240 </div>
1241
1242 </div>
1243
1244 <!-- ======================================================================= -->
1245 <h3>
1246   <a name="ccxx_basic_types">C/C++ basic types</a>
1247 </h3>
1248
1249 <div>
1250
1251 <p>The following are the basic type descriptors for C/C++ core types:</p>
1252
1253 <!-- ======================================================================= -->
1254 <h4>
1255   <a name="ccxx_basic_type_bool">bool</a>
1256 </h4>
1257
1258 <div>
1259
1260 <div class="doc_code">
1261 <pre>
1262 !2 = metadata !{
1263   i32 524324,        ;; Tag
1264   metadata !1,       ;; Context
1265   metadata !"bool",  ;; Name
1266   metadata !1,       ;; File
1267   i32 0,             ;; Line number
1268   i64 8,             ;; Size in Bits
1269   i64 8,             ;; Align in Bits
1270   i64 0,             ;; Offset in Bits
1271   i32 0,             ;; Flags
1272   i32 2              ;; Encoding
1273 }
1274 </pre>
1275 </div>
1276
1277 </div>
1278
1279 <!-- ======================================================================= -->
1280 <h4>
1281   <a name="ccxx_basic_char">char</a>
1282 </h4>
1283
1284 <div>
1285
1286 <div class="doc_code">
1287 <pre>
1288 !2 = metadata !{
1289   i32 524324,        ;; Tag
1290   metadata !1,       ;; Context
1291   metadata !"char",  ;; Name
1292   metadata !1,       ;; File
1293   i32 0,             ;; Line number
1294   i64 8,             ;; Size in Bits
1295   i64 8,             ;; Align in Bits
1296   i64 0,             ;; Offset in Bits
1297   i32 0,             ;; Flags
1298   i32 6              ;; Encoding
1299 }
1300 </pre>
1301 </div>
1302
1303 </div>
1304
1305 <!-- ======================================================================= -->
1306 <h4>
1307   <a name="ccxx_basic_unsigned_char">unsigned char</a>
1308 </h4>
1309
1310 <div>
1311
1312 <div class="doc_code">
1313 <pre>
1314 !2 = metadata !{
1315   i32 524324,        ;; Tag
1316   metadata !1,       ;; Context
1317   metadata !"unsigned char", 
1318   metadata !1,       ;; File
1319   i32 0,             ;; Line number
1320   i64 8,             ;; Size in Bits
1321   i64 8,             ;; Align in Bits
1322   i64 0,             ;; Offset in Bits
1323   i32 0,             ;; Flags
1324   i32 8              ;; Encoding
1325 }
1326 </pre>
1327 </div>
1328
1329 </div>
1330
1331 <!-- ======================================================================= -->
1332 <h4>
1333   <a name="ccxx_basic_short">short</a>
1334 </h4>
1335
1336 <div>
1337
1338 <div class="doc_code">
1339 <pre>
1340 !2 = metadata !{
1341   i32 524324,        ;; Tag
1342   metadata !1,       ;; Context
1343   metadata !"short int",
1344   metadata !1,       ;; File
1345   i32 0,             ;; Line number
1346   i64 16,            ;; Size in Bits
1347   i64 16,            ;; Align in Bits
1348   i64 0,             ;; Offset in Bits
1349   i32 0,             ;; Flags
1350   i32 5              ;; Encoding
1351 }
1352 </pre>
1353 </div>
1354
1355 </div>
1356
1357 <!-- ======================================================================= -->
1358 <h4>
1359   <a name="ccxx_basic_unsigned_short">unsigned short</a>
1360 </h4>
1361
1362 <div>
1363
1364 <div class="doc_code">
1365 <pre>
1366 !2 = metadata !{
1367   i32 524324,        ;; Tag
1368   metadata !1,       ;; Context
1369   metadata !"short unsigned int",
1370   metadata !1,       ;; File
1371   i32 0,             ;; Line number
1372   i64 16,            ;; Size in Bits
1373   i64 16,            ;; Align in Bits
1374   i64 0,             ;; Offset in Bits
1375   i32 0,             ;; Flags
1376   i32 7              ;; Encoding
1377 }
1378 </pre>
1379 </div>
1380
1381 </div>
1382
1383 <!-- ======================================================================= -->
1384 <h4>
1385   <a name="ccxx_basic_int">int</a>
1386 </h4>
1387
1388 <div>
1389
1390 <div class="doc_code">
1391 <pre>
1392 !2 = metadata !{
1393   i32 524324,        ;; Tag
1394   metadata !1,       ;; Context
1395   metadata !"int",   ;; Name
1396   metadata !1,       ;; File
1397   i32 0,             ;; Line number
1398   i64 32,            ;; Size in Bits
1399   i64 32,            ;; Align in Bits
1400   i64 0,             ;; Offset in Bits
1401   i32 0,             ;; Flags
1402   i32 5              ;; Encoding
1403 }
1404 </pre></div>
1405
1406 </div>
1407
1408 <!-- ======================================================================= -->
1409 <h4>
1410   <a name="ccxx_basic_unsigned_int">unsigned int</a>
1411 </h4>
1412
1413 <div>
1414
1415 <div class="doc_code">
1416 <pre>
1417 !2 = metadata !{
1418   i32 524324,        ;; Tag
1419   metadata !1,       ;; Context
1420   metadata !"unsigned int",
1421   metadata !1,       ;; File
1422   i32 0,             ;; Line number
1423   i64 32,            ;; Size in Bits
1424   i64 32,            ;; Align in Bits
1425   i64 0,             ;; Offset in Bits
1426   i32 0,             ;; Flags
1427   i32 7              ;; Encoding
1428 }
1429 </pre>
1430 </div>
1431
1432 </div>
1433
1434 <!-- ======================================================================= -->
1435 <h4>
1436   <a name="ccxx_basic_long_long">long long</a>
1437 </h4>
1438
1439 <div>
1440
1441 <div class="doc_code">
1442 <pre>
1443 !2 = metadata !{
1444   i32 524324,        ;; Tag
1445   metadata !1,       ;; Context
1446   metadata !"long long int",
1447   metadata !1,       ;; File
1448   i32 0,             ;; Line number
1449   i64 64,            ;; Size in Bits
1450   i64 64,            ;; Align in Bits
1451   i64 0,             ;; Offset in Bits
1452   i32 0,             ;; Flags
1453   i32 5              ;; Encoding
1454 }
1455 </pre>
1456 </div>
1457
1458 </div>
1459
1460 <!-- ======================================================================= -->
1461 <h4>
1462   <a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
1463 </h4>
1464
1465 <div>
1466
1467 <div class="doc_code">
1468 <pre>
1469 !2 = metadata !{
1470   i32 524324,        ;; Tag
1471   metadata !1,       ;; Context
1472   metadata !"long long unsigned int",
1473   metadata !1,       ;; File
1474   i32 0,             ;; Line number
1475   i64 64,            ;; Size in Bits
1476   i64 64,            ;; Align in Bits
1477   i64 0,             ;; Offset in Bits
1478   i32 0,             ;; Flags
1479   i32 7              ;; Encoding
1480 }
1481 </pre>
1482 </div>
1483
1484 </div>
1485
1486 <!-- ======================================================================= -->
1487 <h4>
1488   <a name="ccxx_basic_float">float</a>
1489 </h4>
1490
1491 <div>
1492
1493 <div class="doc_code">
1494 <pre>
1495 !2 = metadata !{
1496   i32 524324,        ;; Tag
1497   metadata !1,       ;; Context
1498   metadata !"float",
1499   metadata !1,       ;; File
1500   i32 0,             ;; Line number
1501   i64 32,            ;; Size in Bits
1502   i64 32,            ;; Align in Bits
1503   i64 0,             ;; Offset in Bits
1504   i32 0,             ;; Flags
1505   i32 4              ;; Encoding
1506 }
1507 </pre>
1508 </div>
1509
1510 </div>
1511
1512 <!-- ======================================================================= -->
1513 <h4>
1514   <a name="ccxx_basic_double">double</a>
1515 </h4>
1516
1517 <div>
1518
1519 <div class="doc_code">
1520 <pre>
1521 !2 = metadata !{
1522   i32 524324,        ;; Tag
1523   metadata !1,       ;; Context
1524   metadata !"double",;; Name
1525   metadata !1,       ;; File
1526   i32 0,             ;; Line number
1527   i64 64,            ;; Size in Bits
1528   i64 64,            ;; Align in Bits
1529   i64 0,             ;; Offset in Bits
1530   i32 0,             ;; Flags
1531   i32 4              ;; Encoding
1532 }
1533 </pre>
1534 </div>
1535
1536 </div>
1537
1538 </div>
1539
1540 <!-- ======================================================================= -->
1541 <h3>
1542   <a name="ccxx_derived_types">C/C++ derived types</a>
1543 </h3>
1544
1545 <div>
1546
1547 <p>Given the following as an example of C/C++ derived type:</p>
1548
1549 <div class="doc_code">
1550 <pre>
1551 typedef const int *IntPtr;
1552 </pre>
1553 </div>
1554
1555 <p>a C/C++ front-end would generate the following descriptors:</p>
1556
1557 <div class="doc_code">
1558 <pre>
1559 ;;
1560 ;; Define the typedef "IntPtr".
1561 ;;
1562 !2 = metadata !{
1563   i32 524310,          ;; Tag
1564   metadata !1,         ;; Context
1565   metadata !"IntPtr",  ;; Name
1566   metadata !3,         ;; File
1567   i32 0,               ;; Line number
1568   i64 0,               ;; Size in bits
1569   i64 0,               ;; Align in bits
1570   i64 0,               ;; Offset in bits
1571   i32 0,               ;; Flags
1572   metadata !4          ;; Derived From type
1573 }
1574
1575 ;;
1576 ;; Define the pointer type.
1577 ;;
1578 !4 = metadata !{
1579   i32 524303,          ;; Tag
1580   metadata !1,         ;; Context
1581   metadata !"",        ;; Name
1582   metadata !1,         ;; File
1583   i32 0,               ;; Line number
1584   i64 64,              ;; Size in bits
1585   i64 64,              ;; Align in bits
1586   i64 0,               ;; Offset in bits
1587   i32 0,               ;; Flags
1588   metadata !5          ;; Derived From type
1589 }
1590 ;;
1591 ;; Define the const type.
1592 ;;
1593 !5 = metadata !{
1594   i32 524326,          ;; Tag
1595   metadata !1,         ;; Context
1596   metadata !"",        ;; Name
1597   metadata !1,         ;; File
1598   i32 0,               ;; Line number
1599   i64 32,              ;; Size in bits
1600   i64 32,              ;; Align in bits
1601   i64 0,               ;; Offset in bits
1602   i32 0,               ;; Flags
1603   metadata !6          ;; Derived From type
1604 }
1605 ;;
1606 ;; Define the int type.
1607 ;;
1608 !6 = metadata !{
1609   i32 524324,          ;; Tag
1610   metadata !1,         ;; Context
1611   metadata !"int",     ;; Name
1612   metadata !1,         ;; File
1613   i32 0,               ;; Line number
1614   i64 32,              ;; Size in bits
1615   i64 32,              ;; Align in bits
1616   i64 0,               ;; Offset in bits
1617   i32 0,               ;; Flags
1618   5                    ;; Encoding
1619 }
1620 </pre>
1621 </div>
1622
1623 </div>
1624
1625 <!-- ======================================================================= -->
1626 <h3>
1627   <a name="ccxx_composite_types">C/C++ struct/union types</a>
1628 </h3>
1629
1630 <div>
1631
1632 <p>Given the following as an example of C/C++ struct type:</p>
1633
1634 <div class="doc_code">
1635 <pre>
1636 struct Color {
1637   unsigned Red;
1638   unsigned Green;
1639   unsigned Blue;
1640 };
1641 </pre>
1642 </div>
1643
1644 <p>a C/C++ front-end would generate the following descriptors:</p>
1645
1646 <div class="doc_code">
1647 <pre>
1648 ;;
1649 ;; Define basic type for unsigned int.
1650 ;;
1651 !5 = metadata !{
1652   i32 524324,        ;; Tag
1653   metadata !1,       ;; Context
1654   metadata !"unsigned int",
1655   metadata !1,       ;; File
1656   i32 0,             ;; Line number
1657   i64 32,            ;; Size in Bits
1658   i64 32,            ;; Align in Bits
1659   i64 0,             ;; Offset in Bits
1660   i32 0,             ;; Flags
1661   i32 7              ;; Encoding
1662 }
1663 ;;
1664 ;; Define composite type for struct Color.
1665 ;;
1666 !2 = metadata !{
1667   i32 524307,        ;; Tag
1668   metadata !1,       ;; Context
1669   metadata !"Color", ;; Name
1670   metadata !1,       ;; Compile unit
1671   i32 1,             ;; Line number
1672   i64 96,            ;; Size in bits
1673   i64 32,            ;; Align in bits
1674   i64 0,             ;; Offset in bits
1675   i32 0,             ;; Flags
1676   null,              ;; Derived From
1677   metadata !3,       ;; Elements
1678   i32 0              ;; Runtime Language
1679 }
1680
1681 ;;
1682 ;; Define the Red field.
1683 ;;
1684 !4 = metadata !{
1685   i32 524301,        ;; Tag
1686   metadata !1,       ;; Context
1687   metadata !"Red",   ;; Name
1688   metadata !1,       ;; File
1689   i32 2,             ;; Line number
1690   i64 32,            ;; Size in bits
1691   i64 32,            ;; Align in bits
1692   i64 0,             ;; Offset in bits
1693   i32 0,             ;; Flags
1694   metadata !5        ;; Derived From type
1695 }
1696
1697 ;;
1698 ;; Define the Green field.
1699 ;;
1700 !6 = metadata !{
1701   i32 524301,        ;; Tag
1702   metadata !1,       ;; Context
1703   metadata !"Green", ;; Name
1704   metadata !1,       ;; File
1705   i32 3,             ;; Line number
1706   i64 32,            ;; Size in bits
1707   i64 32,            ;; Align in bits
1708   i64 32,             ;; Offset in bits
1709   i32 0,             ;; Flags
1710   metadata !5        ;; Derived From type
1711 }
1712
1713 ;;
1714 ;; Define the Blue field.
1715 ;;
1716 !7 = metadata !{
1717   i32 524301,        ;; Tag
1718   metadata !1,       ;; Context
1719   metadata !"Blue",  ;; Name
1720   metadata !1,       ;; File
1721   i32 4,             ;; Line number
1722   i64 32,            ;; Size in bits
1723   i64 32,            ;; Align in bits
1724   i64 64,             ;; Offset in bits
1725   i32 0,             ;; Flags
1726   metadata !5        ;; Derived From type
1727 }
1728
1729 ;;
1730 ;; Define the array of fields used by the composite type Color.
1731 ;;
1732 !3 = metadata !{metadata !4, metadata !6, metadata !7}
1733 </pre>
1734 </div>
1735
1736 </div>
1737
1738 <!-- ======================================================================= -->
1739 <h3>
1740   <a name="ccxx_enumeration_types">C/C++ enumeration types</a>
1741 </h3>
1742
1743 <div>
1744
1745 <p>Given the following as an example of C/C++ enumeration type:</p>
1746
1747 <div class="doc_code">
1748 <pre>
1749 enum Trees {
1750   Spruce = 100,
1751   Oak = 200,
1752   Maple = 300
1753 };
1754 </pre>
1755 </div>
1756
1757 <p>a C/C++ front-end would generate the following descriptors:</p>
1758
1759 <div class="doc_code">
1760 <pre>
1761 ;;
1762 ;; Define composite type for enum Trees
1763 ;;
1764 !2 = metadata !{
1765   i32 524292,        ;; Tag
1766   metadata !1,       ;; Context
1767   metadata !"Trees", ;; Name
1768   metadata !1,       ;; File
1769   i32 1,             ;; Line number
1770   i64 32,            ;; Size in bits
1771   i64 32,            ;; Align in bits
1772   i64 0,             ;; Offset in bits
1773   i32 0,             ;; Flags
1774   null,              ;; Derived From type
1775   metadata !3,       ;; Elements
1776   i32 0              ;; Runtime language
1777 }
1778
1779 ;;
1780 ;; Define the array of enumerators used by composite type Trees.
1781 ;;
1782 !3 = metadata !{metadata !4, metadata !5, metadata !6}
1783
1784 ;;
1785 ;; Define Spruce enumerator.
1786 ;;
1787 !4 = metadata !{i32 524328, metadata !"Spruce", i64 100}
1788
1789 ;;
1790 ;; Define Oak enumerator.
1791 ;;
1792 !5 = metadata !{i32 524328, metadata !"Oak", i64 200}
1793
1794 ;;
1795 ;; Define Maple enumerator.
1796 ;;
1797 !6 = metadata !{i32 524328, metadata !"Maple", i64 300}
1798
1799 </pre>
1800 </div>
1801
1802 </div>
1803
1804 </div>
1805
1806 <!-- *********************************************************************** -->
1807
1808 <hr>
1809 <address>
1810   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
1811   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
1812   <a href="http://validator.w3.org/check/referer"><img
1813   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
1814
1815   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
1816   <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
1817   Last modified: $Date$
1818 </address>
1819
1820 </body>
1821 </html>