65d32992d341ef49b6cd9857e53c5df173821271
[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 }
328 </pre>
329 </div>
330
331 <p>These descriptors contain a source language ID for the file (we use the DWARF
332    3.0 ID numbers, such as <tt>DW_LANG_C89</tt>, <tt>DW_LANG_C_plus_plus</tt>,
333    <tt>DW_LANG_Cobol74</tt>, etc), three strings describing the filename,
334    working directory of the compiler, and an identifier string for the compiler
335    that produced it.</p>
336
337 <p>Compile unit descriptors provide the root context for objects declared in a
338    specific compilation unit. File descriptors are defined using this context.
339    These descriptors are collected by a named metadata 
340    <tt>!llvm.dbg.cu</tt>.
341
342 </div>
343
344 <!-- ======================================================================= -->
345 <h4>
346   <a name="format_files">File descriptors</a>
347 </h4>
348
349 <div>
350
351 <div class="doc_code">
352 <pre>
353 !0 = metadata !{
354   i32,       ;; Tag = 41 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
355              ;; (DW_TAG_file_type)
356   metadata,  ;; Source file name
357   metadata,  ;; Source file directory (includes trailing slash)
358   metadata   ;; Reference to compile unit where defined
359 }
360 </pre>
361 </div>
362
363 <p>These descriptors contain information for a file. Global variables and top
364    level functions would be defined using this context.k File descriptors also
365    provide context for source line correspondence. </p>
366
367 <p>Each input file is encoded as a separate file descriptor in LLVM debugging
368    information output. Each file descriptor would be defined using a 
369    compile unit. </p>
370
371 </div>
372
373 <!-- ======================================================================= -->
374 <h4>
375   <a name="format_global_variables">Global variable descriptors</a>
376 </h4>
377
378 <div>
379
380 <div class="doc_code">
381 <pre>
382 !1 = metadata !{
383   i32,      ;; Tag = 52 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
384             ;; (DW_TAG_variable)
385   i32,      ;; Unused field.
386   metadata, ;; Reference to context descriptor
387   metadata, ;; Name
388   metadata, ;; Display name (fully qualified C++ name)
389   metadata, ;; MIPS linkage name (for C++)
390   metadata, ;; Reference to file where defined
391   i32,      ;; Line number where defined
392   metadata, ;; Reference to type descriptor
393   i1,       ;; True if the global is local to compile unit (static)
394   i1,       ;; True if the global is defined in the compile unit (not extern)
395   {}*       ;; Reference to the global variable
396 }
397 </pre>
398 </div>
399
400 <p>These descriptors provide debug information about globals variables.  The
401 provide details such as name, type and where the variable is defined. All
402 global variables are collected by named metadata <tt>!llvm.dbg.gv</tt>.</p>
403
404 </div>
405
406 <!-- ======================================================================= -->
407 <h4>
408   <a name="format_subprograms">Subprogram descriptors</a>
409 </h4>
410
411 <div>
412
413 <div class="doc_code">
414 <pre>
415 !2 = metadata !{
416   i32,      ;; Tag = 46 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
417             ;; (DW_TAG_subprogram)
418   i32,      ;; Unused field.
419   metadata, ;; Reference to context descriptor
420   metadata, ;; Name
421   metadata, ;; Display name (fully qualified C++ name)
422   metadata, ;; MIPS linkage name (for C++)
423   metadata, ;; Reference to file where defined
424   i32,      ;; Line number where defined
425   metadata, ;; Reference to type descriptor
426   i1,       ;; True if the global is local to compile unit (static)
427   i1,       ;; True if the global is defined in the compile unit (not extern)
428   i32,      ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual
429   i32,      ;; Index into a virtual function
430   metadata, ;; indicates which base type contains the vtable pointer for the 
431             ;; derived class
432   i1,       ;; isArtificial
433   i1,       ;; isOptimized
434   Function *,;; Pointer to LLVM function
435   metadata, ;; Lists function template parameters
436   metadata  ;; Function declaration descriptor
437 }
438 </pre>
439 </div>
440
441 <p>These descriptors provide debug information about functions, methods and
442    subprograms.  They provide details such as name, return types and the source
443    location where the subprogram is defined.
444    All subprogram descriptors are collected by a named metadata 
445    <tt>!llvm.dbg.sp</tt>.
446 </p>
447
448 </div>
449
450 <!-- ======================================================================= -->
451 <h4>
452   <a name="format_blocks">Block descriptors</a>
453 </h4>
454
455 <div>
456
457 <div class="doc_code">
458 <pre>
459 !3 = metadata !{
460   i32,     ;; Tag = 11 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
461   metadata,;; Reference to context descriptor
462   i32,     ;; Line number
463   i32,     ;; Column number
464   metadata,;; Reference to source file
465   i32      ;; Unique ID to identify blocks from a template function
466 }
467 </pre>
468 </div>
469
470 <p>These descriptors provide debug information about nested blocks within a
471    subprogram. The line number and column numbers are used to dinstinguish
472    two lexical blocks at same depth. </p>
473
474 </div>
475
476 <!-- ======================================================================= -->
477 <h4>
478   <a name="format_basic_type">Basic type descriptors</a>
479 </h4>
480
481 <div>
482
483 <div class="doc_code">
484 <pre>
485 !4 = metadata !{
486   i32,      ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
487             ;; (DW_TAG_base_type)
488   metadata, ;; Reference to context (typically a compile unit)
489   metadata, ;; Name (may be "" for anonymous types)
490   metadata, ;; Reference to file where defined (may be NULL)
491   i32,      ;; Line number where defined (may be 0)
492   i64,      ;; Size in bits
493   i64,      ;; Alignment in bits
494   i64,      ;; Offset in bits
495   i32,      ;; Flags
496   i32       ;; DWARF type encoding
497 }
498 </pre>
499 </div>
500
501 <p>These descriptors define primitive types used in the code. Example int, bool
502    and float.  The context provides the scope of the type, which is usually the
503    top level.  Since basic types are not usually user defined the compile unit
504    and line number can be left as NULL and 0.  The size, alignment and offset
505    are expressed in bits and can be 64 bit values.  The alignment is used to
506    round the offset when embedded in a
507    <a href="#format_composite_type">composite type</a> (example to keep float
508    doubles on 64 bit boundaries.) The offset is the bit offset if embedded in
509    a <a href="#format_composite_type">composite type</a>.</p>
510
511 <p>The type encoding provides the details of the type.  The values are typically
512    one of the following:</p>
513
514 <div class="doc_code">
515 <pre>
516 DW_ATE_address       = 1
517 DW_ATE_boolean       = 2
518 DW_ATE_float         = 4
519 DW_ATE_signed        = 5
520 DW_ATE_signed_char   = 6
521 DW_ATE_unsigned      = 7
522 DW_ATE_unsigned_char = 8
523 </pre>
524 </div>
525
526 </div>
527
528 <!-- ======================================================================= -->
529 <h4>
530   <a name="format_derived_type">Derived type descriptors</a>
531 </h4>
532
533 <div>
534
535 <div class="doc_code">
536 <pre>
537 !5 = metadata !{
538   i32,      ;; Tag (see below)
539   metadata, ;; Reference to context
540   metadata, ;; Name (may be "" for anonymous types)
541   metadata, ;; Reference to file where defined (may be NULL)
542   i32,      ;; Line number where defined (may be 0)
543   i64,      ;; Size in bits
544   i64,      ;; Alignment in bits
545   i64,      ;; Offset in bits
546   metadata, ;; Reference to type derived from
547   metadata, ;; (optional) Name of the Objective C property assoicated with 
548             ;; Objective-C an ivar 
549   metadata, ;; (optional) Name of the Objective C property getter selector.
550   metadata, ;; (optional) Name of the Objective C property setter selector.
551   i32       ;; (optional) Objective C property attributes.
552 }
553 </pre>
554 </div>
555
556 <p>These descriptors are used to define types derived from other types.  The
557 value of the tag varies depending on the meaning.  The following are possible
558 tag values:</p>
559
560 <div class="doc_code">
561 <pre>
562 DW_TAG_formal_parameter = 5
563 DW_TAG_member           = 13
564 DW_TAG_pointer_type     = 15
565 DW_TAG_reference_type   = 16
566 DW_TAG_typedef          = 22
567 DW_TAG_const_type       = 38
568 DW_TAG_volatile_type    = 53
569 DW_TAG_restrict_type    = 55
570 </pre>
571 </div>
572
573 <p><tt>DW_TAG_member</tt> is used to define a member of
574    a <a href="#format_composite_type">composite type</a>
575    or <a href="#format_subprograms">subprogram</a>.  The type of the member is
576    the <a href="#format_derived_type">derived
577    type</a>. <tt>DW_TAG_formal_parameter</tt> is used to define a member which
578    is a formal argument of a subprogram.</p>
579
580 <p><tt>DW_TAG_typedef</tt> is used to provide a name for the derived type.</p>
581
582 <p><tt>DW_TAG_pointer_type</tt>,<tt>DW_TAG_reference_type</tt>,
583    <tt>DW_TAG_const_type</tt>, <tt>DW_TAG_volatile_type</tt>
584    and <tt>DW_TAG_restrict_type</tt> are used to qualify
585    the <a href="#format_derived_type">derived type</a>. </p>
586
587 <p><a href="#format_derived_type">Derived type</a> location can be determined
588    from the compile unit and line number.  The size, alignment and offset are
589    expressed in bits and can be 64 bit values.  The alignment is used to round
590    the offset when embedded in a <a href="#format_composite_type">composite
591    type</a> (example to keep float doubles on 64 bit boundaries.) The offset is
592    the bit offset if embedded in a <a href="#format_composite_type">composite
593    type</a>.</p>
594
595 <p>Note that the <tt>void *</tt> type is expressed as a type derived from NULL.
596 </p>
597
598 </div>
599
600 <!-- ======================================================================= -->
601 <h4>
602   <a name="format_composite_type">Composite type descriptors</a>
603 </h4>
604
605 <div>
606
607 <div class="doc_code">
608 <pre>
609 !6 = metadata !{
610   i32,      ;; Tag (see below)
611   metadata, ;; Reference to context
612   metadata, ;; Name (may be "" for anonymous types)
613   metadata, ;; Reference to file where defined (may be NULL)
614   i32,      ;; Line number where defined (may be 0)
615   i64,      ;; Size in bits
616   i64,      ;; Alignment in bits
617   i64,      ;; Offset in bits
618   i32,      ;; Flags
619   metadata, ;; Reference to type derived from
620   metadata, ;; Reference to array of member descriptors
621   i32       ;; Runtime languages
622 }
623 </pre>
624 </div>
625
626 <p>These descriptors are used to define types that are composed of 0 or more
627 elements.  The value of the tag varies depending on the meaning.  The following
628 are possible tag values:</p>
629
630 <div class="doc_code">
631 <pre>
632 DW_TAG_array_type       = 1
633 DW_TAG_enumeration_type = 4
634 DW_TAG_structure_type   = 19
635 DW_TAG_union_type       = 23
636 DW_TAG_vector_type      = 259
637 DW_TAG_subroutine_type  = 21
638 DW_TAG_inheritance      = 28
639 </pre>
640 </div>
641
642 <p>The vector flag indicates that an array type is a native packed vector.</p>
643
644 <p>The members of array types (tag = <tt>DW_TAG_array_type</tt>) or vector types
645    (tag = <tt>DW_TAG_vector_type</tt>) are <a href="#format_subrange">subrange
646    descriptors</a>, each representing the range of subscripts at that level of
647    indexing.</p>
648
649 <p>The members of enumeration types (tag = <tt>DW_TAG_enumeration_type</tt>) are
650    <a href="#format_enumeration">enumerator descriptors</a>, each representing
651    the definition of enumeration value for the set. All enumeration type
652    descriptors are collected by named metadata <tt>!llvm.dbg.enum</tt>.</p>
653
654 <p>The members of structure (tag = <tt>DW_TAG_structure_type</tt>) or union (tag
655    = <tt>DW_TAG_union_type</tt>) types are any one of
656    the <a href="#format_basic_type">basic</a>,
657    <a href="#format_derived_type">derived</a>
658    or <a href="#format_composite_type">composite</a> type descriptors, each
659    representing a field member of the structure or union.</p>
660
661 <p>For C++ classes (tag = <tt>DW_TAG_structure_type</tt>), member descriptors
662    provide information about base classes, static members and member
663    functions. If a member is a <a href="#format_derived_type">derived type
664    descriptor</a> and has a tag of <tt>DW_TAG_inheritance</tt>, then the type
665    represents a base class. If the member of is
666    a <a href="#format_global_variables">global variable descriptor</a> then it
667    represents a static member.  And, if the member is
668    a <a href="#format_subprograms">subprogram descriptor</a> then it represents
669    a member function.  For static members and member
670    functions, <tt>getName()</tt> returns the members link or the C++ mangled
671    name.  <tt>getDisplayName()</tt> the simplied version of the name.</p>
672
673 <p>The first member of subroutine (tag = <tt>DW_TAG_subroutine_type</tt>) type
674    elements is the return type for the subroutine.  The remaining elements are
675    the formal arguments to the subroutine.</p>
676
677 <p><a href="#format_composite_type">Composite type</a> location can be
678    determined from the compile unit and line number.  The size, alignment and
679    offset are expressed in bits and can be 64 bit values.  The alignment is used
680    to round the offset when embedded in
681    a <a href="#format_composite_type">composite type</a> (as an example, to keep
682    float doubles on 64 bit boundaries.) The offset is the bit offset if embedded
683    in a <a href="#format_composite_type">composite type</a>.</p>
684
685 </div>
686
687 <!-- ======================================================================= -->
688 <h4>
689   <a name="format_subrange">Subrange descriptors</a>
690 </h4>
691
692 <div>
693
694 <div class="doc_code">
695 <pre>
696 !42 = metadata !{
697   i32,    ;; Tag = 33 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subrange_type)
698   i64,    ;; Low value
699   i64     ;; High value
700 }
701 </pre>
702 </div>
703
704 <p>These descriptors are used to define ranges of array subscripts for an array
705    <a href="#format_composite_type">composite type</a>.  The low value defines
706    the lower bounds typically zero for C/C++.  The high value is the upper
707    bounds.  Values are 64 bit.  High - low + 1 is the size of the array.  If low
708    > high the array bounds are not included in generated debugging information.
709 </p>
710
711 </div>
712
713 <!-- ======================================================================= -->
714 <h4>
715   <a name="format_enumeration">Enumerator descriptors</a>
716 </h4>
717
718 <div>
719
720 <div class="doc_code">
721 <pre>
722 !6 = metadata !{
723   i32,      ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> 
724             ;; (DW_TAG_enumerator)
725   metadata, ;; Name
726   i64       ;; Value
727 }
728 </pre>
729 </div>
730
731 <p>These descriptors are used to define members of an
732    enumeration <a href="#format_composite_type">composite type</a>, it
733    associates the name to the value.</p>
734
735 </div>
736
737 <!-- ======================================================================= -->
738 <h4>
739   <a name="format_variables">Local variables</a>
740 </h4>
741
742 <div>
743
744 <div class="doc_code">
745 <pre>
746 !7 = metadata !{
747   i32,      ;; Tag (see below)
748   metadata, ;; Context
749   metadata, ;; Name
750   metadata, ;; Reference to file where defined
751   i32,      ;; 24 bit - Line number where defined
752             ;; 8 bit - Argument number. 1 indicates 1st argument.
753   metadata  ;; Type descriptor
754 }
755 </pre>
756 </div>
757
758 <p>These descriptors are used to define variables local to a sub program.  The
759    value of the tag depends on the usage of the variable:</p>
760
761 <div class="doc_code">
762 <pre>
763 DW_TAG_auto_variable   = 256
764 DW_TAG_arg_variable    = 257
765 DW_TAG_return_variable = 258
766 </pre>
767 </div>
768
769 <p>An auto variable is any variable declared in the body of the function.  An
770    argument variable is any variable that appears as a formal argument to the
771    function.  A return variable is used to track the result of a function and
772    has no source correspondent.</p>
773
774 <p>The context is either the subprogram or block where the variable is defined.
775    Name the source variable name.  Compile unit and line indicate where the
776    variable was defined. Type descriptor defines the declared type of the
777    variable.</p>
778
779 </div>
780
781 </div>
782
783 <!-- ======================================================================= -->
784 <h3>
785   <a name="format_common_intrinsics">Debugger intrinsic functions</a>
786 </h3>
787
788 <div>
789
790 <p>LLVM uses several intrinsic functions (name prefixed with "llvm.dbg") to
791    provide debug information at various points in generated code.</p>
792
793 <!-- ======================================================================= -->
794 <h4>
795   <a name="format_common_declare">llvm.dbg.declare</a>
796 </h4>
797
798 <div>
799 <pre>
800   void %<a href="#format_common_declare">llvm.dbg.declare</a>(metadata, metadata)
801 </pre>
802
803 <p>This intrinsic provides information about a local element (ex. variable.) The
804    first argument is metadata holding alloca for the variable. The
805    second argument is metadata containing description of the variable. </p>
806 </div>
807
808 <!-- ======================================================================= -->
809 <h4>
810   <a name="format_common_value">llvm.dbg.value</a>
811 </h4>
812
813 <div>
814 <pre>
815   void %<a href="#format_common_value">llvm.dbg.value</a>(metadata, i64, metadata)
816 </pre>
817
818 <p>This intrinsic provides information when a user source variable is set to a
819    new value.  The first argument is the new value (wrapped as metadata).  The
820    second argument is the offset in the user source variable where the new value
821    is written.  The third argument is metadata containing description of the
822    user source variable. </p>
823 </div>
824
825 </div>
826
827 <!-- ======================================================================= -->
828 <h3>
829   <a name="format_common_lifetime">Object lifetimes and scoping</a>
830 </h3>
831
832 <div>
833 <p>In many languages, the local variables in functions can have their lifetimes
834    or scopes limited to a subset of a function.  In the C family of languages,
835    for example, variables are only live (readable and writable) within the
836    source block that they are defined in.  In functional languages, values are
837    only readable after they have been defined.  Though this is a very obvious
838    concept, it is non-trivial to model in LLVM, because it has no notion of
839    scoping in this sense, and does not want to be tied to a language's scoping
840    rules.</p>
841
842 <p>In order to handle this, the LLVM debug format uses the metadata attached to
843    llvm instructions to encode line number and scoping information. Consider
844    the following C fragment, for example:</p>
845
846 <div class="doc_code">
847 <pre>
848 1.  void foo() {
849 2.    int X = 21;
850 3.    int Y = 22;
851 4.    {
852 5.      int Z = 23;
853 6.      Z = X;
854 7.    }
855 8.    X = Y;
856 9.  }
857 </pre>
858 </div>
859
860 <p>Compiled to LLVM, this function would be represented like this:</p>
861
862 <div class="doc_code">
863 <pre>
864 define void @foo() nounwind ssp {
865 entry:
866   %X = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
867   %Y = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
868   %Z = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=3]
869   %0 = bitcast i32* %X to {}*                     ; &lt;{}*&gt; [#uses=1]
870   call void @llvm.dbg.declare(metadata !{i32 * %X}, metadata !0), !dbg !7
871   store i32 21, i32* %X, !dbg !8
872   %1 = bitcast i32* %Y to {}*                     ; &lt;{}*&gt; [#uses=1]
873   call void @llvm.dbg.declare(metadata !{i32 * %Y}, metadata !9), !dbg !10
874   store i32 22, i32* %Y, !dbg !11
875   %2 = bitcast i32* %Z to {}*                     ; &lt;{}*&gt; [#uses=1]
876   call void @llvm.dbg.declare(metadata !{i32 * %Z}, metadata !12), !dbg !14
877   store i32 23, i32* %Z, !dbg !15
878   %tmp = load i32* %X, !dbg !16                   ; &lt;i32&gt; [#uses=1]
879   %tmp1 = load i32* %Y, !dbg !16                  ; &lt;i32&gt; [#uses=1]
880   %add = add nsw i32 %tmp, %tmp1, !dbg !16        ; &lt;i32&gt; [#uses=1]
881   store i32 %add, i32* %Z, !dbg !16
882   %tmp2 = load i32* %Y, !dbg !17                  ; &lt;i32&gt; [#uses=1]
883   store i32 %tmp2, i32* %X, !dbg !17
884   ret void, !dbg !18
885 }
886
887 declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
888
889 !0 = metadata !{i32 459008, metadata !1, metadata !"X", 
890                 metadata !3, i32 2, metadata !6}; [ DW_TAG_auto_variable ]
891 !1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
892 !2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", metadata !"foo", 
893                metadata !"foo", metadata !3, i32 1, metadata !4, 
894                i1 false, i1 true}; [DW_TAG_subprogram ]
895 !3 = metadata !{i32 458769, i32 0, i32 12, metadata !"foo.c", 
896                 metadata !"/private/tmp", metadata !"clang 1.1", i1 true, 
897                 i1 false, metadata !"", i32 0}; [DW_TAG_compile_unit ]
898 !4 = metadata !{i32 458773, metadata !3, metadata !"", null, i32 0, i64 0, i64 0, 
899                 i64 0, i32 0, null, metadata !5, i32 0}; [DW_TAG_subroutine_type ]
900 !5 = metadata !{null}
901 !6 = metadata !{i32 458788, metadata !3, metadata !"int", metadata !3, i32 0, 
902                 i64 32, i64 32, i64 0, i32 0, i32 5}; [DW_TAG_base_type ]
903 !7 = metadata !{i32 2, i32 7, metadata !1, null}
904 !8 = metadata !{i32 2, i32 3, metadata !1, null}
905 !9 = metadata !{i32 459008, metadata !1, metadata !"Y", metadata !3, i32 3, 
906                 metadata !6}; [ DW_TAG_auto_variable ]
907 !10 = metadata !{i32 3, i32 7, metadata !1, null}
908 !11 = metadata !{i32 3, i32 3, metadata !1, null}
909 !12 = metadata !{i32 459008, metadata !13, metadata !"Z", metadata !3, i32 5, 
910                  metadata !6}; [ DW_TAG_auto_variable ]
911 !13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
912 !14 = metadata !{i32 5, i32 9, metadata !13, null}
913 !15 = metadata !{i32 5, i32 5, metadata !13, null}
914 !16 = metadata !{i32 6, i32 5, metadata !13, null}
915 !17 = metadata !{i32 8, i32 3, metadata !1, null}
916 !18 = metadata !{i32 9, i32 1, metadata !2, null}
917 </pre>
918 </div>
919
920 <p>This example illustrates a few important details about LLVM debugging
921    information. In particular, it shows how the <tt>llvm.dbg.declare</tt>
922    intrinsic and location information, which are attached to an instruction,
923    are applied together to allow a debugger to analyze the relationship between
924    statements, variable definitions, and the code used to implement the
925    function.</p>
926
927 <div class="doc_code">
928 <pre>
929 call void @llvm.dbg.declare(metadata, metadata !0), !dbg !7   
930 </pre>
931 </div>
932
933 <p>The first intrinsic
934    <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
935    encodes debugging information for the variable <tt>X</tt>. The metadata
936    <tt>!dbg !7</tt> attached to the intrinsic provides scope information for the
937    variable <tt>X</tt>.</p>
938
939 <div class="doc_code">
940 <pre>
941 !7 = metadata !{i32 2, i32 7, metadata !1, null}
942 !1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
943 !2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", 
944                 metadata !"foo", metadata !"foo", metadata !3, i32 1, 
945                 metadata !4, i1 false, i1 true}; [DW_TAG_subprogram ]   
946 </pre>
947 </div>
948
949 <p>Here <tt>!7</tt> is metadata providing location information. It has four
950    fields: line number, column number, scope, and original scope. The original
951    scope represents inline location if this instruction is inlined inside a
952    caller, and is null otherwise. In this example, scope is encoded by
953    <tt>!1</tt>. <tt>!1</tt> represents a lexical block inside the scope
954    <tt>!2</tt>, where <tt>!2</tt> is a
955    <a href="#format_subprograms">subprogram descriptor</a>. This way the
956    location information attached to the intrinsics indicates that the
957    variable <tt>X</tt> is declared at line number 2 at a function level scope in
958    function <tt>foo</tt>.</p>
959
960 <p>Now lets take another example.</p>
961
962 <div class="doc_code">
963 <pre>
964 call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
965 </pre>
966 </div>
967
968 <p>The second intrinsic
969    <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
970    encodes debugging information for variable <tt>Z</tt>. The metadata 
971    <tt>!dbg !14</tt> attached to the intrinsic provides scope information for
972    the variable <tt>Z</tt>.</p>
973
974 <div class="doc_code">
975 <pre>
976 !13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
977 !14 = metadata !{i32 5, i32 9, metadata !13, null}
978 </pre>
979 </div>
980
981 <p>Here <tt>!14</tt> indicates that <tt>Z</tt> is declared at line number 5 and
982    column number 9 inside of lexical scope <tt>!13</tt>. The lexical scope
983    itself resides inside of lexical scope <tt>!1</tt> described above.</p>
984
985 <p>The scope information attached with each instruction provides a
986    straightforward way to find instructions covered by a scope.</p>
987
988 </div>
989
990 </div>
991
992 <!-- *********************************************************************** -->
993 <h2>
994   <a name="ccxx_frontend">C/C++ front-end specific debug information</a>
995 </h2>
996 <!-- *********************************************************************** -->
997
998 <div>
999
1000 <p>The C and C++ front-ends represent information about the program in a format
1001    that is effectively identical
1002    to <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3.0</a> in
1003    terms of information content.  This allows code generators to trivially
1004    support native debuggers by generating standard dwarf information, and
1005    contains enough information for non-dwarf targets to translate it as
1006    needed.</p>
1007
1008 <p>This section describes the forms used to represent C and C++ programs. Other
1009    languages could pattern themselves after this (which itself is tuned to
1010    representing programs in the same way that DWARF 3 does), or they could
1011    choose to provide completely different forms if they don't fit into the DWARF
1012    model.  As support for debugging information gets added to the various LLVM
1013    source-language front-ends, the information used should be documented
1014    here.</p>
1015
1016 <p>The following sections provide examples of various C/C++ constructs and the
1017    debug information that would best describe those constructs.</p>
1018
1019 <!-- ======================================================================= -->
1020 <h3>
1021   <a name="ccxx_compile_units">C/C++ source file information</a>
1022 </h3>
1023
1024 <div>
1025
1026 <p>Given the source files <tt>MySource.cpp</tt> and <tt>MyHeader.h</tt> located
1027    in the directory <tt>/Users/mine/sources</tt>, the following code:</p>
1028
1029 <div class="doc_code">
1030 <pre>
1031 #include "MyHeader.h"
1032
1033 int main(int argc, char *argv[]) {
1034   return 0;
1035 }
1036 </pre>
1037 </div>
1038
1039 <p>a C/C++ front-end would generate the following descriptors:</p>
1040
1041 <div class="doc_code">
1042 <pre>
1043 ...
1044 ;;
1045 ;; Define the compile unit for the main source file "/Users/mine/sources/MySource.cpp".
1046 ;;
1047 !2 = metadata !{
1048   i32 524305,    ;; Tag
1049   i32 0,         ;; Unused
1050   i32 4,         ;; Language Id
1051   metadata !"MySource.cpp", 
1052   metadata !"/Users/mine/sources", 
1053   metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build 00)", 
1054   i1 true,       ;; Main Compile Unit
1055   i1 false,      ;; Optimized compile unit
1056   metadata !"",  ;; Compiler flags
1057   i32 0}         ;; Runtime version
1058
1059 ;;
1060 ;; Define the file for the file "/Users/mine/sources/MySource.cpp".
1061 ;;
1062 !1 = metadata !{
1063   i32 524329,    ;; Tag
1064   metadata !"MySource.cpp", 
1065   metadata !"/Users/mine/sources", 
1066   metadata !2    ;; Compile unit
1067 }
1068
1069 ;;
1070 ;; Define the file for the file "/Users/mine/sources/Myheader.h"
1071 ;;
1072 !3 = metadata !{
1073   i32 524329,    ;; Tag
1074   metadata !"Myheader.h"
1075   metadata !"/Users/mine/sources", 
1076   metadata !2    ;; Compile unit
1077 }
1078
1079 ...
1080 </pre>
1081 </div>
1082
1083 <p>llvm::Instruction provides easy access to metadata attached with an 
1084 instruction. One can extract line number information encoded in LLVM IR
1085 using <tt>Instruction::getMetadata()</tt> and 
1086 <tt>DILocation::getLineNumber()</tt>.
1087 <pre>
1088  if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
1089    DILocation Loc(N);                      // DILocation is in DebugInfo.h
1090    unsigned Line = Loc.getLineNumber();
1091    StringRef File = Loc.getFilename();
1092    StringRef Dir = Loc.getDirectory();
1093  }
1094 </pre>
1095 </div>
1096
1097 <!-- ======================================================================= -->
1098 <h3>
1099   <a name="ccxx_global_variable">C/C++ global variable information</a>
1100 </h3>
1101
1102 <div>
1103
1104 <p>Given an integer global variable declared as follows:</p>
1105
1106 <div class="doc_code">
1107 <pre>
1108 int MyGlobal = 100;
1109 </pre>
1110 </div>
1111
1112 <p>a C/C++ front-end would generate the following descriptors:</p>
1113
1114 <div class="doc_code">
1115 <pre>
1116 ;;
1117 ;; Define the global itself.
1118 ;;
1119 %MyGlobal = global int 100
1120 ...
1121 ;;
1122 ;; List of debug info of globals
1123 ;;
1124 !llvm.dbg.gv = !{!0}
1125
1126 ;;
1127 ;; Define the global variable descriptor.  Note the reference to the global
1128 ;; variable anchor and the global variable itself.
1129 ;;
1130 !0 = metadata !{
1131   i32 524340,              ;; Tag
1132   i32 0,                   ;; Unused
1133   metadata !1,             ;; Context
1134   metadata !"MyGlobal",    ;; Name
1135   metadata !"MyGlobal",    ;; Display Name
1136   metadata !"MyGlobal",    ;; Linkage Name
1137   metadata !3,             ;; Compile Unit
1138   i32 1,                   ;; Line Number
1139   metadata !4,             ;; Type
1140   i1 false,                ;; Is a local variable
1141   i1 true,                 ;; Is this a definition
1142   i32* @MyGlobal           ;; The global variable
1143 }
1144
1145 ;;
1146 ;; Define the basic type of 32 bit signed integer.  Note that since int is an
1147 ;; intrinsic type the source file is NULL and line 0.
1148 ;;    
1149 !4 = metadata !{
1150   i32 524324,              ;; Tag
1151   metadata !1,             ;; Context
1152   metadata !"int",         ;; Name
1153   metadata !1,             ;; File
1154   i32 0,                   ;; Line number
1155   i64 32,                  ;; Size in Bits
1156   i64 32,                  ;; Align in Bits
1157   i64 0,                   ;; Offset in Bits
1158   i32 0,                   ;; Flags
1159   i32 5                    ;; Encoding
1160 }
1161
1162 </pre>
1163 </div>
1164
1165 </div>
1166
1167 <!-- ======================================================================= -->
1168 <h3>
1169   <a name="ccxx_subprogram">C/C++ function information</a>
1170 </h3>
1171
1172 <div>
1173
1174 <p>Given a function declared as follows:</p>
1175
1176 <div class="doc_code">
1177 <pre>
1178 int main(int argc, char *argv[]) {
1179   return 0;
1180 }
1181 </pre>
1182 </div>
1183
1184 <p>a C/C++ front-end would generate the following descriptors:</p>
1185
1186 <div class="doc_code">
1187 <pre>
1188 ;;
1189 ;; Define the anchor for subprograms.  Note that the second field of the
1190 ;; anchor is 46, which is the same as the tag for subprograms
1191 ;; (46 = DW_TAG_subprogram.)
1192 ;;
1193 !6 = metadata !{
1194   i32 524334,        ;; Tag
1195   i32 0,             ;; Unused
1196   metadata !1,       ;; Context
1197   metadata !"main",  ;; Name
1198   metadata !"main",  ;; Display name
1199   metadata !"main",  ;; Linkage name
1200   metadata !1,       ;; File
1201   i32 1,             ;; Line number
1202   metadata !4,       ;; Type
1203   i1 false,          ;; Is local 
1204   i1 true,           ;; Is definition
1205   i32 0,             ;; Virtuality attribute, e.g. pure virtual function
1206   i32 0,             ;; Index into virtual table for C++ methods
1207   i32 0,             ;; Type that holds virtual table.
1208   i32 0,             ;; Flags
1209   i1 false,          ;; True if this function is optimized
1210   Function *,        ;; Pointer to llvm::Function
1211   null               ;; Function template parameters
1212 }
1213 ;;
1214 ;; Define the subprogram itself.
1215 ;;
1216 define i32 @main(i32 %argc, i8** %argv) {
1217 ...
1218 }
1219 </pre>
1220 </div>
1221
1222 </div>
1223
1224 <!-- ======================================================================= -->
1225 <h3>
1226   <a name="ccxx_basic_types">C/C++ basic types</a>
1227 </h3>
1228
1229 <div>
1230
1231 <p>The following are the basic type descriptors for C/C++ core types:</p>
1232
1233 <!-- ======================================================================= -->
1234 <h4>
1235   <a name="ccxx_basic_type_bool">bool</a>
1236 </h4>
1237
1238 <div>
1239
1240 <div class="doc_code">
1241 <pre>
1242 !2 = metadata !{
1243   i32 524324,        ;; Tag
1244   metadata !1,       ;; Context
1245   metadata !"bool",  ;; Name
1246   metadata !1,       ;; File
1247   i32 0,             ;; Line number
1248   i64 8,             ;; Size in Bits
1249   i64 8,             ;; Align in Bits
1250   i64 0,             ;; Offset in Bits
1251   i32 0,             ;; Flags
1252   i32 2              ;; Encoding
1253 }
1254 </pre>
1255 </div>
1256
1257 </div>
1258
1259 <!-- ======================================================================= -->
1260 <h4>
1261   <a name="ccxx_basic_char">char</a>
1262 </h4>
1263
1264 <div>
1265
1266 <div class="doc_code">
1267 <pre>
1268 !2 = metadata !{
1269   i32 524324,        ;; Tag
1270   metadata !1,       ;; Context
1271   metadata !"char",  ;; Name
1272   metadata !1,       ;; File
1273   i32 0,             ;; Line number
1274   i64 8,             ;; Size in Bits
1275   i64 8,             ;; Align in Bits
1276   i64 0,             ;; Offset in Bits
1277   i32 0,             ;; Flags
1278   i32 6              ;; Encoding
1279 }
1280 </pre>
1281 </div>
1282
1283 </div>
1284
1285 <!-- ======================================================================= -->
1286 <h4>
1287   <a name="ccxx_basic_unsigned_char">unsigned char</a>
1288 </h4>
1289
1290 <div>
1291
1292 <div class="doc_code">
1293 <pre>
1294 !2 = metadata !{
1295   i32 524324,        ;; Tag
1296   metadata !1,       ;; Context
1297   metadata !"unsigned char", 
1298   metadata !1,       ;; File
1299   i32 0,             ;; Line number
1300   i64 8,             ;; Size in Bits
1301   i64 8,             ;; Align in Bits
1302   i64 0,             ;; Offset in Bits
1303   i32 0,             ;; Flags
1304   i32 8              ;; Encoding
1305 }
1306 </pre>
1307 </div>
1308
1309 </div>
1310
1311 <!-- ======================================================================= -->
1312 <h4>
1313   <a name="ccxx_basic_short">short</a>
1314 </h4>
1315
1316 <div>
1317
1318 <div class="doc_code">
1319 <pre>
1320 !2 = metadata !{
1321   i32 524324,        ;; Tag
1322   metadata !1,       ;; Context
1323   metadata !"short int",
1324   metadata !1,       ;; File
1325   i32 0,             ;; Line number
1326   i64 16,            ;; Size in Bits
1327   i64 16,            ;; Align in Bits
1328   i64 0,             ;; Offset in Bits
1329   i32 0,             ;; Flags
1330   i32 5              ;; Encoding
1331 }
1332 </pre>
1333 </div>
1334
1335 </div>
1336
1337 <!-- ======================================================================= -->
1338 <h4>
1339   <a name="ccxx_basic_unsigned_short">unsigned short</a>
1340 </h4>
1341
1342 <div>
1343
1344 <div class="doc_code">
1345 <pre>
1346 !2 = metadata !{
1347   i32 524324,        ;; Tag
1348   metadata !1,       ;; Context
1349   metadata !"short unsigned int",
1350   metadata !1,       ;; File
1351   i32 0,             ;; Line number
1352   i64 16,            ;; Size in Bits
1353   i64 16,            ;; Align in Bits
1354   i64 0,             ;; Offset in Bits
1355   i32 0,             ;; Flags
1356   i32 7              ;; Encoding
1357 }
1358 </pre>
1359 </div>
1360
1361 </div>
1362
1363 <!-- ======================================================================= -->
1364 <h4>
1365   <a name="ccxx_basic_int">int</a>
1366 </h4>
1367
1368 <div>
1369
1370 <div class="doc_code">
1371 <pre>
1372 !2 = metadata !{
1373   i32 524324,        ;; Tag
1374   metadata !1,       ;; Context
1375   metadata !"int",   ;; Name
1376   metadata !1,       ;; File
1377   i32 0,             ;; Line number
1378   i64 32,            ;; Size in Bits
1379   i64 32,            ;; Align in Bits
1380   i64 0,             ;; Offset in Bits
1381   i32 0,             ;; Flags
1382   i32 5              ;; Encoding
1383 }
1384 </pre></div>
1385
1386 </div>
1387
1388 <!-- ======================================================================= -->
1389 <h4>
1390   <a name="ccxx_basic_unsigned_int">unsigned int</a>
1391 </h4>
1392
1393 <div>
1394
1395 <div class="doc_code">
1396 <pre>
1397 !2 = metadata !{
1398   i32 524324,        ;; Tag
1399   metadata !1,       ;; Context
1400   metadata !"unsigned int",
1401   metadata !1,       ;; File
1402   i32 0,             ;; Line number
1403   i64 32,            ;; Size in Bits
1404   i64 32,            ;; Align in Bits
1405   i64 0,             ;; Offset in Bits
1406   i32 0,             ;; Flags
1407   i32 7              ;; Encoding
1408 }
1409 </pre>
1410 </div>
1411
1412 </div>
1413
1414 <!-- ======================================================================= -->
1415 <h4>
1416   <a name="ccxx_basic_long_long">long long</a>
1417 </h4>
1418
1419 <div>
1420
1421 <div class="doc_code">
1422 <pre>
1423 !2 = metadata !{
1424   i32 524324,        ;; Tag
1425   metadata !1,       ;; Context
1426   metadata !"long long int",
1427   metadata !1,       ;; File
1428   i32 0,             ;; Line number
1429   i64 64,            ;; Size in Bits
1430   i64 64,            ;; Align in Bits
1431   i64 0,             ;; Offset in Bits
1432   i32 0,             ;; Flags
1433   i32 5              ;; Encoding
1434 }
1435 </pre>
1436 </div>
1437
1438 </div>
1439
1440 <!-- ======================================================================= -->
1441 <h4>
1442   <a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
1443 </h4>
1444
1445 <div>
1446
1447 <div class="doc_code">
1448 <pre>
1449 !2 = metadata !{
1450   i32 524324,        ;; Tag
1451   metadata !1,       ;; Context
1452   metadata !"long long unsigned int",
1453   metadata !1,       ;; File
1454   i32 0,             ;; Line number
1455   i64 64,            ;; Size in Bits
1456   i64 64,            ;; Align in Bits
1457   i64 0,             ;; Offset in Bits
1458   i32 0,             ;; Flags
1459   i32 7              ;; Encoding
1460 }
1461 </pre>
1462 </div>
1463
1464 </div>
1465
1466 <!-- ======================================================================= -->
1467 <h4>
1468   <a name="ccxx_basic_float">float</a>
1469 </h4>
1470
1471 <div>
1472
1473 <div class="doc_code">
1474 <pre>
1475 !2 = metadata !{
1476   i32 524324,        ;; Tag
1477   metadata !1,       ;; Context
1478   metadata !"float",
1479   metadata !1,       ;; File
1480   i32 0,             ;; Line number
1481   i64 32,            ;; Size in Bits
1482   i64 32,            ;; Align in Bits
1483   i64 0,             ;; Offset in Bits
1484   i32 0,             ;; Flags
1485   i32 4              ;; Encoding
1486 }
1487 </pre>
1488 </div>
1489
1490 </div>
1491
1492 <!-- ======================================================================= -->
1493 <h4>
1494   <a name="ccxx_basic_double">double</a>
1495 </h4>
1496
1497 <div>
1498
1499 <div class="doc_code">
1500 <pre>
1501 !2 = metadata !{
1502   i32 524324,        ;; Tag
1503   metadata !1,       ;; Context
1504   metadata !"double",;; Name
1505   metadata !1,       ;; File
1506   i32 0,             ;; Line number
1507   i64 64,            ;; Size in Bits
1508   i64 64,            ;; Align in Bits
1509   i64 0,             ;; Offset in Bits
1510   i32 0,             ;; Flags
1511   i32 4              ;; Encoding
1512 }
1513 </pre>
1514 </div>
1515
1516 </div>
1517
1518 </div>
1519
1520 <!-- ======================================================================= -->
1521 <h3>
1522   <a name="ccxx_derived_types">C/C++ derived types</a>
1523 </h3>
1524
1525 <div>
1526
1527 <p>Given the following as an example of C/C++ derived type:</p>
1528
1529 <div class="doc_code">
1530 <pre>
1531 typedef const int *IntPtr;
1532 </pre>
1533 </div>
1534
1535 <p>a C/C++ front-end would generate the following descriptors:</p>
1536
1537 <div class="doc_code">
1538 <pre>
1539 ;;
1540 ;; Define the typedef "IntPtr".
1541 ;;
1542 !2 = metadata !{
1543   i32 524310,          ;; Tag
1544   metadata !1,         ;; Context
1545   metadata !"IntPtr",  ;; Name
1546   metadata !3,         ;; File
1547   i32 0,               ;; Line number
1548   i64 0,               ;; Size in bits
1549   i64 0,               ;; Align in bits
1550   i64 0,               ;; Offset in bits
1551   i32 0,               ;; Flags
1552   metadata !4          ;; Derived From type
1553 }
1554
1555 ;;
1556 ;; Define the pointer type.
1557 ;;
1558 !4 = metadata !{
1559   i32 524303,          ;; Tag
1560   metadata !1,         ;; Context
1561   metadata !"",        ;; Name
1562   metadata !1,         ;; File
1563   i32 0,               ;; Line number
1564   i64 64,              ;; Size in bits
1565   i64 64,              ;; Align in bits
1566   i64 0,               ;; Offset in bits
1567   i32 0,               ;; Flags
1568   metadata !5          ;; Derived From type
1569 }
1570 ;;
1571 ;; Define the const type.
1572 ;;
1573 !5 = metadata !{
1574   i32 524326,          ;; Tag
1575   metadata !1,         ;; Context
1576   metadata !"",        ;; Name
1577   metadata !1,         ;; File
1578   i32 0,               ;; Line number
1579   i64 32,              ;; Size in bits
1580   i64 32,              ;; Align in bits
1581   i64 0,               ;; Offset in bits
1582   i32 0,               ;; Flags
1583   metadata !6          ;; Derived From type
1584 }
1585 ;;
1586 ;; Define the int type.
1587 ;;
1588 !6 = metadata !{
1589   i32 524324,          ;; Tag
1590   metadata !1,         ;; Context
1591   metadata !"int",     ;; Name
1592   metadata !1,         ;; File
1593   i32 0,               ;; Line number
1594   i64 32,              ;; Size in bits
1595   i64 32,              ;; Align in bits
1596   i64 0,               ;; Offset in bits
1597   i32 0,               ;; Flags
1598   5                    ;; Encoding
1599 }
1600 </pre>
1601 </div>
1602
1603 </div>
1604
1605 <!-- ======================================================================= -->
1606 <h3>
1607   <a name="ccxx_composite_types">C/C++ struct/union types</a>
1608 </h3>
1609
1610 <div>
1611
1612 <p>Given the following as an example of C/C++ struct type:</p>
1613
1614 <div class="doc_code">
1615 <pre>
1616 struct Color {
1617   unsigned Red;
1618   unsigned Green;
1619   unsigned Blue;
1620 };
1621 </pre>
1622 </div>
1623
1624 <p>a C/C++ front-end would generate the following descriptors:</p>
1625
1626 <div class="doc_code">
1627 <pre>
1628 ;;
1629 ;; Define basic type for unsigned int.
1630 ;;
1631 !5 = metadata !{
1632   i32 524324,        ;; Tag
1633   metadata !1,       ;; Context
1634   metadata !"unsigned int",
1635   metadata !1,       ;; File
1636   i32 0,             ;; Line number
1637   i64 32,            ;; Size in Bits
1638   i64 32,            ;; Align in Bits
1639   i64 0,             ;; Offset in Bits
1640   i32 0,             ;; Flags
1641   i32 7              ;; Encoding
1642 }
1643 ;;
1644 ;; Define composite type for struct Color.
1645 ;;
1646 !2 = metadata !{
1647   i32 524307,        ;; Tag
1648   metadata !1,       ;; Context
1649   metadata !"Color", ;; Name
1650   metadata !1,       ;; Compile unit
1651   i32 1,             ;; Line number
1652   i64 96,            ;; Size in bits
1653   i64 32,            ;; Align in bits
1654   i64 0,             ;; Offset in bits
1655   i32 0,             ;; Flags
1656   null,              ;; Derived From
1657   metadata !3,       ;; Elements
1658   i32 0              ;; Runtime Language
1659 }
1660
1661 ;;
1662 ;; Define the Red field.
1663 ;;
1664 !4 = metadata !{
1665   i32 524301,        ;; Tag
1666   metadata !1,       ;; Context
1667   metadata !"Red",   ;; Name
1668   metadata !1,       ;; File
1669   i32 2,             ;; Line number
1670   i64 32,            ;; Size in bits
1671   i64 32,            ;; Align in bits
1672   i64 0,             ;; Offset in bits
1673   i32 0,             ;; Flags
1674   metadata !5        ;; Derived From type
1675 }
1676
1677 ;;
1678 ;; Define the Green field.
1679 ;;
1680 !6 = metadata !{
1681   i32 524301,        ;; Tag
1682   metadata !1,       ;; Context
1683   metadata !"Green", ;; Name
1684   metadata !1,       ;; File
1685   i32 3,             ;; Line number
1686   i64 32,            ;; Size in bits
1687   i64 32,            ;; Align in bits
1688   i64 32,             ;; Offset in bits
1689   i32 0,             ;; Flags
1690   metadata !5        ;; Derived From type
1691 }
1692
1693 ;;
1694 ;; Define the Blue field.
1695 ;;
1696 !7 = metadata !{
1697   i32 524301,        ;; Tag
1698   metadata !1,       ;; Context
1699   metadata !"Blue",  ;; Name
1700   metadata !1,       ;; File
1701   i32 4,             ;; Line number
1702   i64 32,            ;; Size in bits
1703   i64 32,            ;; Align in bits
1704   i64 64,             ;; Offset in bits
1705   i32 0,             ;; Flags
1706   metadata !5        ;; Derived From type
1707 }
1708
1709 ;;
1710 ;; Define the array of fields used by the composite type Color.
1711 ;;
1712 !3 = metadata !{metadata !4, metadata !6, metadata !7}
1713 </pre>
1714 </div>
1715
1716 </div>
1717
1718 <!-- ======================================================================= -->
1719 <h3>
1720   <a name="ccxx_enumeration_types">C/C++ enumeration types</a>
1721 </h3>
1722
1723 <div>
1724
1725 <p>Given the following as an example of C/C++ enumeration type:</p>
1726
1727 <div class="doc_code">
1728 <pre>
1729 enum Trees {
1730   Spruce = 100,
1731   Oak = 200,
1732   Maple = 300
1733 };
1734 </pre>
1735 </div>
1736
1737 <p>a C/C++ front-end would generate the following descriptors:</p>
1738
1739 <div class="doc_code">
1740 <pre>
1741 ;;
1742 ;; Define composite type for enum Trees
1743 ;;
1744 !2 = metadata !{
1745   i32 524292,        ;; Tag
1746   metadata !1,       ;; Context
1747   metadata !"Trees", ;; Name
1748   metadata !1,       ;; File
1749   i32 1,             ;; Line number
1750   i64 32,            ;; Size in bits
1751   i64 32,            ;; Align in bits
1752   i64 0,             ;; Offset in bits
1753   i32 0,             ;; Flags
1754   null,              ;; Derived From type
1755   metadata !3,       ;; Elements
1756   i32 0              ;; Runtime language
1757 }
1758
1759 ;;
1760 ;; Define the array of enumerators used by composite type Trees.
1761 ;;
1762 !3 = metadata !{metadata !4, metadata !5, metadata !6}
1763
1764 ;;
1765 ;; Define Spruce enumerator.
1766 ;;
1767 !4 = metadata !{i32 524328, metadata !"Spruce", i64 100}
1768
1769 ;;
1770 ;; Define Oak enumerator.
1771 ;;
1772 !5 = metadata !{i32 524328, metadata !"Oak", i64 200}
1773
1774 ;;
1775 ;; Define Maple enumerator.
1776 ;;
1777 !6 = metadata !{i32 524328, metadata !"Maple", i64 300}
1778
1779 </pre>
1780 </div>
1781
1782 </div>
1783
1784 </div>
1785
1786 <!-- *********************************************************************** -->
1787
1788 <hr>
1789 <address>
1790   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
1791   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
1792   <a href="http://validator.w3.org/check/referer"><img
1793   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
1794
1795   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
1796   <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
1797   Last modified: $Date$
1798 </address>
1799
1800 </body>
1801 </html>