Some reorganization of atomic docs. Added explicit section for NonAtomic. Added...
[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   i32,      ;; flags
755   metadata  ;; (optional) Reference to inline location
756 }
757 </pre>
758 </div>
759
760 <p>These descriptors are used to define variables local to a sub program.  The
761    value of the tag depends on the usage of the variable:</p>
762
763 <div class="doc_code">
764 <pre>
765 DW_TAG_auto_variable   = 256
766 DW_TAG_arg_variable    = 257
767 DW_TAG_return_variable = 258
768 </pre>
769 </div>
770
771 <p>An auto variable is any variable declared in the body of the function.  An
772    argument variable is any variable that appears as a formal argument to the
773    function.  A return variable is used to track the result of a function and
774    has no source correspondent.</p>
775
776 <p>The context is either the subprogram or block where the variable is defined.
777    Name the source variable name.  Compile unit and line indicate where the
778    variable was defined. Type descriptor defines the declared type of the
779    variable.</p>
780
781 </div>
782
783 </div>
784
785 <!-- ======================================================================= -->
786 <h3>
787   <a name="format_common_intrinsics">Debugger intrinsic functions</a>
788 </h3>
789
790 <div>
791
792 <p>LLVM uses several intrinsic functions (name prefixed with "llvm.dbg") to
793    provide debug information at various points in generated code.</p>
794
795 <!-- ======================================================================= -->
796 <h4>
797   <a name="format_common_declare">llvm.dbg.declare</a>
798 </h4>
799
800 <div>
801 <pre>
802   void %<a href="#format_common_declare">llvm.dbg.declare</a>(metadata, metadata)
803 </pre>
804
805 <p>This intrinsic provides information about a local element (ex. variable.) The
806    first argument is metadata holding alloca for the variable. The
807    second argument is metadata containing description of the variable. </p>
808 </div>
809
810 <!-- ======================================================================= -->
811 <h4>
812   <a name="format_common_value">llvm.dbg.value</a>
813 </h4>
814
815 <div>
816 <pre>
817   void %<a href="#format_common_value">llvm.dbg.value</a>(metadata, i64, metadata)
818 </pre>
819
820 <p>This intrinsic provides information when a user source variable is set to a
821    new value.  The first argument is the new value (wrapped as metadata).  The
822    second argument is the offset in the user source variable where the new value
823    is written.  The third argument is metadata containing description of the
824    user source variable. </p>
825 </div>
826
827 </div>
828
829 <!-- ======================================================================= -->
830 <h3>
831   <a name="format_common_lifetime">Object lifetimes and scoping</a>
832 </h3>
833
834 <div>
835 <p>In many languages, the local variables in functions can have their lifetimes
836    or scopes limited to a subset of a function.  In the C family of languages,
837    for example, variables are only live (readable and writable) within the
838    source block that they are defined in.  In functional languages, values are
839    only readable after they have been defined.  Though this is a very obvious
840    concept, it is non-trivial to model in LLVM, because it has no notion of
841    scoping in this sense, and does not want to be tied to a language's scoping
842    rules.</p>
843
844 <p>In order to handle this, the LLVM debug format uses the metadata attached to
845    llvm instructions to encode line number and scoping information. Consider
846    the following C fragment, for example:</p>
847
848 <div class="doc_code">
849 <pre>
850 1.  void foo() {
851 2.    int X = 21;
852 3.    int Y = 22;
853 4.    {
854 5.      int Z = 23;
855 6.      Z = X;
856 7.    }
857 8.    X = Y;
858 9.  }
859 </pre>
860 </div>
861
862 <p>Compiled to LLVM, this function would be represented like this:</p>
863
864 <div class="doc_code">
865 <pre>
866 define void @foo() nounwind ssp {
867 entry:
868   %X = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
869   %Y = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=4]
870   %Z = alloca i32, align 4                        ; &lt;i32*&gt; [#uses=3]
871   %0 = bitcast i32* %X to {}*                     ; &lt;{}*&gt; [#uses=1]
872   call void @llvm.dbg.declare(metadata !{i32 * %X}, metadata !0), !dbg !7
873   store i32 21, i32* %X, !dbg !8
874   %1 = bitcast i32* %Y to {}*                     ; &lt;{}*&gt; [#uses=1]
875   call void @llvm.dbg.declare(metadata !{i32 * %Y}, metadata !9), !dbg !10
876   store i32 22, i32* %Y, !dbg !11
877   %2 = bitcast i32* %Z to {}*                     ; &lt;{}*&gt; [#uses=1]
878   call void @llvm.dbg.declare(metadata !{i32 * %Z}, metadata !12), !dbg !14
879   store i32 23, i32* %Z, !dbg !15
880   %tmp = load i32* %X, !dbg !16                   ; &lt;i32&gt; [#uses=1]
881   %tmp1 = load i32* %Y, !dbg !16                  ; &lt;i32&gt; [#uses=1]
882   %add = add nsw i32 %tmp, %tmp1, !dbg !16        ; &lt;i32&gt; [#uses=1]
883   store i32 %add, i32* %Z, !dbg !16
884   %tmp2 = load i32* %Y, !dbg !17                  ; &lt;i32&gt; [#uses=1]
885   store i32 %tmp2, i32* %X, !dbg !17
886   ret void, !dbg !18
887 }
888
889 declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
890
891 !0 = metadata !{i32 459008, metadata !1, metadata !"X", 
892                 metadata !3, i32 2, metadata !6}; [ DW_TAG_auto_variable ]
893 !1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
894 !2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", metadata !"foo", 
895                metadata !"foo", metadata !3, i32 1, metadata !4, 
896                i1 false, i1 true}; [DW_TAG_subprogram ]
897 !3 = metadata !{i32 458769, i32 0, i32 12, metadata !"foo.c", 
898                 metadata !"/private/tmp", metadata !"clang 1.1", i1 true, 
899                 i1 false, metadata !"", i32 0}; [DW_TAG_compile_unit ]
900 !4 = metadata !{i32 458773, metadata !3, metadata !"", null, i32 0, i64 0, i64 0, 
901                 i64 0, i32 0, null, metadata !5, i32 0}; [DW_TAG_subroutine_type ]
902 !5 = metadata !{null}
903 !6 = metadata !{i32 458788, metadata !3, metadata !"int", metadata !3, i32 0, 
904                 i64 32, i64 32, i64 0, i32 0, i32 5}; [DW_TAG_base_type ]
905 !7 = metadata !{i32 2, i32 7, metadata !1, null}
906 !8 = metadata !{i32 2, i32 3, metadata !1, null}
907 !9 = metadata !{i32 459008, metadata !1, metadata !"Y", metadata !3, i32 3, 
908                 metadata !6}; [ DW_TAG_auto_variable ]
909 !10 = metadata !{i32 3, i32 7, metadata !1, null}
910 !11 = metadata !{i32 3, i32 3, metadata !1, null}
911 !12 = metadata !{i32 459008, metadata !13, metadata !"Z", metadata !3, i32 5, 
912                  metadata !6}; [ DW_TAG_auto_variable ]
913 !13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
914 !14 = metadata !{i32 5, i32 9, metadata !13, null}
915 !15 = metadata !{i32 5, i32 5, metadata !13, null}
916 !16 = metadata !{i32 6, i32 5, metadata !13, null}
917 !17 = metadata !{i32 8, i32 3, metadata !1, null}
918 !18 = metadata !{i32 9, i32 1, metadata !2, null}
919 </pre>
920 </div>
921
922 <p>This example illustrates a few important details about LLVM debugging
923    information. In particular, it shows how the <tt>llvm.dbg.declare</tt>
924    intrinsic and location information, which are attached to an instruction,
925    are applied together to allow a debugger to analyze the relationship between
926    statements, variable definitions, and the code used to implement the
927    function.</p>
928
929 <div class="doc_code">
930 <pre>
931 call void @llvm.dbg.declare(metadata, metadata !0), !dbg !7   
932 </pre>
933 </div>
934
935 <p>The first intrinsic
936    <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
937    encodes debugging information for the variable <tt>X</tt>. The metadata
938    <tt>!dbg !7</tt> attached to the intrinsic provides scope information for the
939    variable <tt>X</tt>.</p>
940
941 <div class="doc_code">
942 <pre>
943 !7 = metadata !{i32 2, i32 7, metadata !1, null}
944 !1 = metadata !{i32 458763, metadata !2}; [DW_TAG_lexical_block ]
945 !2 = metadata !{i32 458798, i32 0, metadata !3, metadata !"foo", 
946                 metadata !"foo", metadata !"foo", metadata !3, i32 1, 
947                 metadata !4, i1 false, i1 true}; [DW_TAG_subprogram ]   
948 </pre>
949 </div>
950
951 <p>Here <tt>!7</tt> is metadata providing location information. It has four
952    fields: line number, column number, scope, and original scope. The original
953    scope represents inline location if this instruction is inlined inside a
954    caller, and is null otherwise. In this example, scope is encoded by
955    <tt>!1</tt>. <tt>!1</tt> represents a lexical block inside the scope
956    <tt>!2</tt>, where <tt>!2</tt> is a
957    <a href="#format_subprograms">subprogram descriptor</a>. This way the
958    location information attached to the intrinsics indicates that the
959    variable <tt>X</tt> is declared at line number 2 at a function level scope in
960    function <tt>foo</tt>.</p>
961
962 <p>Now lets take another example.</p>
963
964 <div class="doc_code">
965 <pre>
966 call void @llvm.dbg.declare(metadata, metadata !12), !dbg !14
967 </pre>
968 </div>
969
970 <p>The second intrinsic
971    <tt>%<a href="#format_common_declare">llvm.dbg.declare</a></tt>
972    encodes debugging information for variable <tt>Z</tt>. The metadata 
973    <tt>!dbg !14</tt> attached to the intrinsic provides scope information for
974    the variable <tt>Z</tt>.</p>
975
976 <div class="doc_code">
977 <pre>
978 !13 = metadata !{i32 458763, metadata !1}; [DW_TAG_lexical_block ]
979 !14 = metadata !{i32 5, i32 9, metadata !13, null}
980 </pre>
981 </div>
982
983 <p>Here <tt>!14</tt> indicates that <tt>Z</tt> is declared at line number 5 and
984    column number 9 inside of lexical scope <tt>!13</tt>. The lexical scope
985    itself resides inside of lexical scope <tt>!1</tt> described above.</p>
986
987 <p>The scope information attached with each instruction provides a
988    straightforward way to find instructions covered by a scope.</p>
989
990 </div>
991
992 </div>
993
994 <!-- *********************************************************************** -->
995 <h2>
996   <a name="ccxx_frontend">C/C++ front-end specific debug information</a>
997 </h2>
998 <!-- *********************************************************************** -->
999
1000 <div>
1001
1002 <p>The C and C++ front-ends represent information about the program in a format
1003    that is effectively identical
1004    to <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3.0</a> in
1005    terms of information content.  This allows code generators to trivially
1006    support native debuggers by generating standard dwarf information, and
1007    contains enough information for non-dwarf targets to translate it as
1008    needed.</p>
1009
1010 <p>This section describes the forms used to represent C and C++ programs. Other
1011    languages could pattern themselves after this (which itself is tuned to
1012    representing programs in the same way that DWARF 3 does), or they could
1013    choose to provide completely different forms if they don't fit into the DWARF
1014    model.  As support for debugging information gets added to the various LLVM
1015    source-language front-ends, the information used should be documented
1016    here.</p>
1017
1018 <p>The following sections provide examples of various C/C++ constructs and the
1019    debug information that would best describe those constructs.</p>
1020
1021 <!-- ======================================================================= -->
1022 <h3>
1023   <a name="ccxx_compile_units">C/C++ source file information</a>
1024 </h3>
1025
1026 <div>
1027
1028 <p>Given the source files <tt>MySource.cpp</tt> and <tt>MyHeader.h</tt> located
1029    in the directory <tt>/Users/mine/sources</tt>, the following code:</p>
1030
1031 <div class="doc_code">
1032 <pre>
1033 #include "MyHeader.h"
1034
1035 int main(int argc, char *argv[]) {
1036   return 0;
1037 }
1038 </pre>
1039 </div>
1040
1041 <p>a C/C++ front-end would generate the following descriptors:</p>
1042
1043 <div class="doc_code">
1044 <pre>
1045 ...
1046 ;;
1047 ;; Define the compile unit for the main source file "/Users/mine/sources/MySource.cpp".
1048 ;;
1049 !2 = metadata !{
1050   i32 524305,    ;; Tag
1051   i32 0,         ;; Unused
1052   i32 4,         ;; Language Id
1053   metadata !"MySource.cpp", 
1054   metadata !"/Users/mine/sources", 
1055   metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build 00)", 
1056   i1 true,       ;; Main Compile Unit
1057   i1 false,      ;; Optimized compile unit
1058   metadata !"",  ;; Compiler flags
1059   i32 0}         ;; Runtime version
1060
1061 ;;
1062 ;; Define the file for the file "/Users/mine/sources/MySource.cpp".
1063 ;;
1064 !1 = metadata !{
1065   i32 524329,    ;; Tag
1066   metadata !"MySource.cpp", 
1067   metadata !"/Users/mine/sources", 
1068   metadata !2    ;; Compile unit
1069 }
1070
1071 ;;
1072 ;; Define the file for the file "/Users/mine/sources/Myheader.h"
1073 ;;
1074 !3 = metadata !{
1075   i32 524329,    ;; Tag
1076   metadata !"Myheader.h"
1077   metadata !"/Users/mine/sources", 
1078   metadata !2    ;; Compile unit
1079 }
1080
1081 ...
1082 </pre>
1083 </div>
1084
1085 <p>llvm::Instruction provides easy access to metadata attached with an 
1086 instruction. One can extract line number information encoded in LLVM IR
1087 using <tt>Instruction::getMetadata()</tt> and 
1088 <tt>DILocation::getLineNumber()</tt>.
1089 <pre>
1090  if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
1091    DILocation Loc(N);                      // DILocation is in DebugInfo.h
1092    unsigned Line = Loc.getLineNumber();
1093    StringRef File = Loc.getFilename();
1094    StringRef Dir = Loc.getDirectory();
1095  }
1096 </pre>
1097 </div>
1098
1099 <!-- ======================================================================= -->
1100 <h3>
1101   <a name="ccxx_global_variable">C/C++ global variable information</a>
1102 </h3>
1103
1104 <div>
1105
1106 <p>Given an integer global variable declared as follows:</p>
1107
1108 <div class="doc_code">
1109 <pre>
1110 int MyGlobal = 100;
1111 </pre>
1112 </div>
1113
1114 <p>a C/C++ front-end would generate the following descriptors:</p>
1115
1116 <div class="doc_code">
1117 <pre>
1118 ;;
1119 ;; Define the global itself.
1120 ;;
1121 %MyGlobal = global int 100
1122 ...
1123 ;;
1124 ;; List of debug info of globals
1125 ;;
1126 !llvm.dbg.gv = !{!0}
1127
1128 ;;
1129 ;; Define the global variable descriptor.  Note the reference to the global
1130 ;; variable anchor and the global variable itself.
1131 ;;
1132 !0 = metadata !{
1133   i32 524340,              ;; Tag
1134   i32 0,                   ;; Unused
1135   metadata !1,             ;; Context
1136   metadata !"MyGlobal",    ;; Name
1137   metadata !"MyGlobal",    ;; Display Name
1138   metadata !"MyGlobal",    ;; Linkage Name
1139   metadata !3,             ;; Compile Unit
1140   i32 1,                   ;; Line Number
1141   metadata !4,             ;; Type
1142   i1 false,                ;; Is a local variable
1143   i1 true,                 ;; Is this a definition
1144   i32* @MyGlobal           ;; The global variable
1145 }
1146
1147 ;;
1148 ;; Define the basic type of 32 bit signed integer.  Note that since int is an
1149 ;; intrinsic type the source file is NULL and line 0.
1150 ;;    
1151 !4 = metadata !{
1152   i32 524324,              ;; Tag
1153   metadata !1,             ;; Context
1154   metadata !"int",         ;; Name
1155   metadata !1,             ;; File
1156   i32 0,                   ;; Line number
1157   i64 32,                  ;; Size in Bits
1158   i64 32,                  ;; Align in Bits
1159   i64 0,                   ;; Offset in Bits
1160   i32 0,                   ;; Flags
1161   i32 5                    ;; Encoding
1162 }
1163
1164 </pre>
1165 </div>
1166
1167 </div>
1168
1169 <!-- ======================================================================= -->
1170 <h3>
1171   <a name="ccxx_subprogram">C/C++ function information</a>
1172 </h3>
1173
1174 <div>
1175
1176 <p>Given a function declared as follows:</p>
1177
1178 <div class="doc_code">
1179 <pre>
1180 int main(int argc, char *argv[]) {
1181   return 0;
1182 }
1183 </pre>
1184 </div>
1185
1186 <p>a C/C++ front-end would generate the following descriptors:</p>
1187
1188 <div class="doc_code">
1189 <pre>
1190 ;;
1191 ;; Define the anchor for subprograms.  Note that the second field of the
1192 ;; anchor is 46, which is the same as the tag for subprograms
1193 ;; (46 = DW_TAG_subprogram.)
1194 ;;
1195 !6 = metadata !{
1196   i32 524334,        ;; Tag
1197   i32 0,             ;; Unused
1198   metadata !1,       ;; Context
1199   metadata !"main",  ;; Name
1200   metadata !"main",  ;; Display name
1201   metadata !"main",  ;; Linkage name
1202   metadata !1,       ;; File
1203   i32 1,             ;; Line number
1204   metadata !4,       ;; Type
1205   i1 false,          ;; Is local 
1206   i1 true,           ;; Is definition
1207   i32 0,             ;; Virtuality attribute, e.g. pure virtual function
1208   i32 0,             ;; Index into virtual table for C++ methods
1209   i32 0,             ;; Type that holds virtual table.
1210   i32 0,             ;; Flags
1211   i1 false,          ;; True if this function is optimized
1212   Function *,        ;; Pointer to llvm::Function
1213   null               ;; Function template parameters
1214 }
1215 ;;
1216 ;; Define the subprogram itself.
1217 ;;
1218 define i32 @main(i32 %argc, i8** %argv) {
1219 ...
1220 }
1221 </pre>
1222 </div>
1223
1224 </div>
1225
1226 <!-- ======================================================================= -->
1227 <h3>
1228   <a name="ccxx_basic_types">C/C++ basic types</a>
1229 </h3>
1230
1231 <div>
1232
1233 <p>The following are the basic type descriptors for C/C++ core types:</p>
1234
1235 <!-- ======================================================================= -->
1236 <h4>
1237   <a name="ccxx_basic_type_bool">bool</a>
1238 </h4>
1239
1240 <div>
1241
1242 <div class="doc_code">
1243 <pre>
1244 !2 = metadata !{
1245   i32 524324,        ;; Tag
1246   metadata !1,       ;; Context
1247   metadata !"bool",  ;; Name
1248   metadata !1,       ;; File
1249   i32 0,             ;; Line number
1250   i64 8,             ;; Size in Bits
1251   i64 8,             ;; Align in Bits
1252   i64 0,             ;; Offset in Bits
1253   i32 0,             ;; Flags
1254   i32 2              ;; Encoding
1255 }
1256 </pre>
1257 </div>
1258
1259 </div>
1260
1261 <!-- ======================================================================= -->
1262 <h4>
1263   <a name="ccxx_basic_char">char</a>
1264 </h4>
1265
1266 <div>
1267
1268 <div class="doc_code">
1269 <pre>
1270 !2 = metadata !{
1271   i32 524324,        ;; Tag
1272   metadata !1,       ;; Context
1273   metadata !"char",  ;; Name
1274   metadata !1,       ;; File
1275   i32 0,             ;; Line number
1276   i64 8,             ;; Size in Bits
1277   i64 8,             ;; Align in Bits
1278   i64 0,             ;; Offset in Bits
1279   i32 0,             ;; Flags
1280   i32 6              ;; Encoding
1281 }
1282 </pre>
1283 </div>
1284
1285 </div>
1286
1287 <!-- ======================================================================= -->
1288 <h4>
1289   <a name="ccxx_basic_unsigned_char">unsigned char</a>
1290 </h4>
1291
1292 <div>
1293
1294 <div class="doc_code">
1295 <pre>
1296 !2 = metadata !{
1297   i32 524324,        ;; Tag
1298   metadata !1,       ;; Context
1299   metadata !"unsigned char", 
1300   metadata !1,       ;; File
1301   i32 0,             ;; Line number
1302   i64 8,             ;; Size in Bits
1303   i64 8,             ;; Align in Bits
1304   i64 0,             ;; Offset in Bits
1305   i32 0,             ;; Flags
1306   i32 8              ;; Encoding
1307 }
1308 </pre>
1309 </div>
1310
1311 </div>
1312
1313 <!-- ======================================================================= -->
1314 <h4>
1315   <a name="ccxx_basic_short">short</a>
1316 </h4>
1317
1318 <div>
1319
1320 <div class="doc_code">
1321 <pre>
1322 !2 = metadata !{
1323   i32 524324,        ;; Tag
1324   metadata !1,       ;; Context
1325   metadata !"short int",
1326   metadata !1,       ;; File
1327   i32 0,             ;; Line number
1328   i64 16,            ;; Size in Bits
1329   i64 16,            ;; Align in Bits
1330   i64 0,             ;; Offset in Bits
1331   i32 0,             ;; Flags
1332   i32 5              ;; Encoding
1333 }
1334 </pre>
1335 </div>
1336
1337 </div>
1338
1339 <!-- ======================================================================= -->
1340 <h4>
1341   <a name="ccxx_basic_unsigned_short">unsigned short</a>
1342 </h4>
1343
1344 <div>
1345
1346 <div class="doc_code">
1347 <pre>
1348 !2 = metadata !{
1349   i32 524324,        ;; Tag
1350   metadata !1,       ;; Context
1351   metadata !"short unsigned int",
1352   metadata !1,       ;; File
1353   i32 0,             ;; Line number
1354   i64 16,            ;; Size in Bits
1355   i64 16,            ;; Align in Bits
1356   i64 0,             ;; Offset in Bits
1357   i32 0,             ;; Flags
1358   i32 7              ;; Encoding
1359 }
1360 </pre>
1361 </div>
1362
1363 </div>
1364
1365 <!-- ======================================================================= -->
1366 <h4>
1367   <a name="ccxx_basic_int">int</a>
1368 </h4>
1369
1370 <div>
1371
1372 <div class="doc_code">
1373 <pre>
1374 !2 = metadata !{
1375   i32 524324,        ;; Tag
1376   metadata !1,       ;; Context
1377   metadata !"int",   ;; Name
1378   metadata !1,       ;; File
1379   i32 0,             ;; Line number
1380   i64 32,            ;; Size in Bits
1381   i64 32,            ;; Align in Bits
1382   i64 0,             ;; Offset in Bits
1383   i32 0,             ;; Flags
1384   i32 5              ;; Encoding
1385 }
1386 </pre></div>
1387
1388 </div>
1389
1390 <!-- ======================================================================= -->
1391 <h4>
1392   <a name="ccxx_basic_unsigned_int">unsigned int</a>
1393 </h4>
1394
1395 <div>
1396
1397 <div class="doc_code">
1398 <pre>
1399 !2 = metadata !{
1400   i32 524324,        ;; Tag
1401   metadata !1,       ;; Context
1402   metadata !"unsigned int",
1403   metadata !1,       ;; File
1404   i32 0,             ;; Line number
1405   i64 32,            ;; Size in Bits
1406   i64 32,            ;; Align in Bits
1407   i64 0,             ;; Offset in Bits
1408   i32 0,             ;; Flags
1409   i32 7              ;; Encoding
1410 }
1411 </pre>
1412 </div>
1413
1414 </div>
1415
1416 <!-- ======================================================================= -->
1417 <h4>
1418   <a name="ccxx_basic_long_long">long long</a>
1419 </h4>
1420
1421 <div>
1422
1423 <div class="doc_code">
1424 <pre>
1425 !2 = metadata !{
1426   i32 524324,        ;; Tag
1427   metadata !1,       ;; Context
1428   metadata !"long long int",
1429   metadata !1,       ;; File
1430   i32 0,             ;; Line number
1431   i64 64,            ;; Size in Bits
1432   i64 64,            ;; Align in Bits
1433   i64 0,             ;; Offset in Bits
1434   i32 0,             ;; Flags
1435   i32 5              ;; Encoding
1436 }
1437 </pre>
1438 </div>
1439
1440 </div>
1441
1442 <!-- ======================================================================= -->
1443 <h4>
1444   <a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
1445 </h4>
1446
1447 <div>
1448
1449 <div class="doc_code">
1450 <pre>
1451 !2 = metadata !{
1452   i32 524324,        ;; Tag
1453   metadata !1,       ;; Context
1454   metadata !"long long unsigned int",
1455   metadata !1,       ;; File
1456   i32 0,             ;; Line number
1457   i64 64,            ;; Size in Bits
1458   i64 64,            ;; Align in Bits
1459   i64 0,             ;; Offset in Bits
1460   i32 0,             ;; Flags
1461   i32 7              ;; Encoding
1462 }
1463 </pre>
1464 </div>
1465
1466 </div>
1467
1468 <!-- ======================================================================= -->
1469 <h4>
1470   <a name="ccxx_basic_float">float</a>
1471 </h4>
1472
1473 <div>
1474
1475 <div class="doc_code">
1476 <pre>
1477 !2 = metadata !{
1478   i32 524324,        ;; Tag
1479   metadata !1,       ;; Context
1480   metadata !"float",
1481   metadata !1,       ;; File
1482   i32 0,             ;; Line number
1483   i64 32,            ;; Size in Bits
1484   i64 32,            ;; Align in Bits
1485   i64 0,             ;; Offset in Bits
1486   i32 0,             ;; Flags
1487   i32 4              ;; Encoding
1488 }
1489 </pre>
1490 </div>
1491
1492 </div>
1493
1494 <!-- ======================================================================= -->
1495 <h4>
1496   <a name="ccxx_basic_double">double</a>
1497 </h4>
1498
1499 <div>
1500
1501 <div class="doc_code">
1502 <pre>
1503 !2 = metadata !{
1504   i32 524324,        ;; Tag
1505   metadata !1,       ;; Context
1506   metadata !"double",;; Name
1507   metadata !1,       ;; File
1508   i32 0,             ;; Line number
1509   i64 64,            ;; Size in Bits
1510   i64 64,            ;; Align in Bits
1511   i64 0,             ;; Offset in Bits
1512   i32 0,             ;; Flags
1513   i32 4              ;; Encoding
1514 }
1515 </pre>
1516 </div>
1517
1518 </div>
1519
1520 </div>
1521
1522 <!-- ======================================================================= -->
1523 <h3>
1524   <a name="ccxx_derived_types">C/C++ derived types</a>
1525 </h3>
1526
1527 <div>
1528
1529 <p>Given the following as an example of C/C++ derived type:</p>
1530
1531 <div class="doc_code">
1532 <pre>
1533 typedef const int *IntPtr;
1534 </pre>
1535 </div>
1536
1537 <p>a C/C++ front-end would generate the following descriptors:</p>
1538
1539 <div class="doc_code">
1540 <pre>
1541 ;;
1542 ;; Define the typedef "IntPtr".
1543 ;;
1544 !2 = metadata !{
1545   i32 524310,          ;; Tag
1546   metadata !1,         ;; Context
1547   metadata !"IntPtr",  ;; Name
1548   metadata !3,         ;; File
1549   i32 0,               ;; Line number
1550   i64 0,               ;; Size in bits
1551   i64 0,               ;; Align in bits
1552   i64 0,               ;; Offset in bits
1553   i32 0,               ;; Flags
1554   metadata !4          ;; Derived From type
1555 }
1556
1557 ;;
1558 ;; Define the pointer type.
1559 ;;
1560 !4 = metadata !{
1561   i32 524303,          ;; Tag
1562   metadata !1,         ;; Context
1563   metadata !"",        ;; Name
1564   metadata !1,         ;; File
1565   i32 0,               ;; Line number
1566   i64 64,              ;; Size in bits
1567   i64 64,              ;; Align in bits
1568   i64 0,               ;; Offset in bits
1569   i32 0,               ;; Flags
1570   metadata !5          ;; Derived From type
1571 }
1572 ;;
1573 ;; Define the const type.
1574 ;;
1575 !5 = metadata !{
1576   i32 524326,          ;; Tag
1577   metadata !1,         ;; Context
1578   metadata !"",        ;; Name
1579   metadata !1,         ;; File
1580   i32 0,               ;; Line number
1581   i64 32,              ;; Size in bits
1582   i64 32,              ;; Align in bits
1583   i64 0,               ;; Offset in bits
1584   i32 0,               ;; Flags
1585   metadata !6          ;; Derived From type
1586 }
1587 ;;
1588 ;; Define the int type.
1589 ;;
1590 !6 = metadata !{
1591   i32 524324,          ;; Tag
1592   metadata !1,         ;; Context
1593   metadata !"int",     ;; Name
1594   metadata !1,         ;; File
1595   i32 0,               ;; Line number
1596   i64 32,              ;; Size in bits
1597   i64 32,              ;; Align in bits
1598   i64 0,               ;; Offset in bits
1599   i32 0,               ;; Flags
1600   5                    ;; Encoding
1601 }
1602 </pre>
1603 </div>
1604
1605 </div>
1606
1607 <!-- ======================================================================= -->
1608 <h3>
1609   <a name="ccxx_composite_types">C/C++ struct/union types</a>
1610 </h3>
1611
1612 <div>
1613
1614 <p>Given the following as an example of C/C++ struct type:</p>
1615
1616 <div class="doc_code">
1617 <pre>
1618 struct Color {
1619   unsigned Red;
1620   unsigned Green;
1621   unsigned Blue;
1622 };
1623 </pre>
1624 </div>
1625
1626 <p>a C/C++ front-end would generate the following descriptors:</p>
1627
1628 <div class="doc_code">
1629 <pre>
1630 ;;
1631 ;; Define basic type for unsigned int.
1632 ;;
1633 !5 = metadata !{
1634   i32 524324,        ;; Tag
1635   metadata !1,       ;; Context
1636   metadata !"unsigned int",
1637   metadata !1,       ;; File
1638   i32 0,             ;; Line number
1639   i64 32,            ;; Size in Bits
1640   i64 32,            ;; Align in Bits
1641   i64 0,             ;; Offset in Bits
1642   i32 0,             ;; Flags
1643   i32 7              ;; Encoding
1644 }
1645 ;;
1646 ;; Define composite type for struct Color.
1647 ;;
1648 !2 = metadata !{
1649   i32 524307,        ;; Tag
1650   metadata !1,       ;; Context
1651   metadata !"Color", ;; Name
1652   metadata !1,       ;; Compile unit
1653   i32 1,             ;; Line number
1654   i64 96,            ;; Size in bits
1655   i64 32,            ;; Align in bits
1656   i64 0,             ;; Offset in bits
1657   i32 0,             ;; Flags
1658   null,              ;; Derived From
1659   metadata !3,       ;; Elements
1660   i32 0              ;; Runtime Language
1661 }
1662
1663 ;;
1664 ;; Define the Red field.
1665 ;;
1666 !4 = metadata !{
1667   i32 524301,        ;; Tag
1668   metadata !1,       ;; Context
1669   metadata !"Red",   ;; Name
1670   metadata !1,       ;; File
1671   i32 2,             ;; Line number
1672   i64 32,            ;; Size in bits
1673   i64 32,            ;; Align in bits
1674   i64 0,             ;; Offset in bits
1675   i32 0,             ;; Flags
1676   metadata !5        ;; Derived From type
1677 }
1678
1679 ;;
1680 ;; Define the Green field.
1681 ;;
1682 !6 = metadata !{
1683   i32 524301,        ;; Tag
1684   metadata !1,       ;; Context
1685   metadata !"Green", ;; Name
1686   metadata !1,       ;; File
1687   i32 3,             ;; Line number
1688   i64 32,            ;; Size in bits
1689   i64 32,            ;; Align in bits
1690   i64 32,             ;; Offset in bits
1691   i32 0,             ;; Flags
1692   metadata !5        ;; Derived From type
1693 }
1694
1695 ;;
1696 ;; Define the Blue field.
1697 ;;
1698 !7 = metadata !{
1699   i32 524301,        ;; Tag
1700   metadata !1,       ;; Context
1701   metadata !"Blue",  ;; Name
1702   metadata !1,       ;; File
1703   i32 4,             ;; Line number
1704   i64 32,            ;; Size in bits
1705   i64 32,            ;; Align in bits
1706   i64 64,             ;; Offset in bits
1707   i32 0,             ;; Flags
1708   metadata !5        ;; Derived From type
1709 }
1710
1711 ;;
1712 ;; Define the array of fields used by the composite type Color.
1713 ;;
1714 !3 = metadata !{metadata !4, metadata !6, metadata !7}
1715 </pre>
1716 </div>
1717
1718 </div>
1719
1720 <!-- ======================================================================= -->
1721 <h3>
1722   <a name="ccxx_enumeration_types">C/C++ enumeration types</a>
1723 </h3>
1724
1725 <div>
1726
1727 <p>Given the following as an example of C/C++ enumeration type:</p>
1728
1729 <div class="doc_code">
1730 <pre>
1731 enum Trees {
1732   Spruce = 100,
1733   Oak = 200,
1734   Maple = 300
1735 };
1736 </pre>
1737 </div>
1738
1739 <p>a C/C++ front-end would generate the following descriptors:</p>
1740
1741 <div class="doc_code">
1742 <pre>
1743 ;;
1744 ;; Define composite type for enum Trees
1745 ;;
1746 !2 = metadata !{
1747   i32 524292,        ;; Tag
1748   metadata !1,       ;; Context
1749   metadata !"Trees", ;; Name
1750   metadata !1,       ;; File
1751   i32 1,             ;; Line number
1752   i64 32,            ;; Size in bits
1753   i64 32,            ;; Align in bits
1754   i64 0,             ;; Offset in bits
1755   i32 0,             ;; Flags
1756   null,              ;; Derived From type
1757   metadata !3,       ;; Elements
1758   i32 0              ;; Runtime language
1759 }
1760
1761 ;;
1762 ;; Define the array of enumerators used by composite type Trees.
1763 ;;
1764 !3 = metadata !{metadata !4, metadata !5, metadata !6}
1765
1766 ;;
1767 ;; Define Spruce enumerator.
1768 ;;
1769 !4 = metadata !{i32 524328, metadata !"Spruce", i64 100}
1770
1771 ;;
1772 ;; Define Oak enumerator.
1773 ;;
1774 !5 = metadata !{i32 524328, metadata !"Oak", i64 200}
1775
1776 ;;
1777 ;; Define Maple enumerator.
1778 ;;
1779 !6 = metadata !{i32 524328, metadata !"Maple", i64 300}
1780
1781 </pre>
1782 </div>
1783
1784 </div>
1785
1786 </div>
1787
1788 <!-- *********************************************************************** -->
1789
1790 <hr>
1791 <address>
1792   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
1793   src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
1794   <a href="http://validator.w3.org/check/referer"><img
1795   src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
1796
1797   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
1798   <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
1799   Last modified: $Date$
1800 </address>
1801
1802 </body>
1803 </html>