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