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 << 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 ; <i32*> [#uses=4] 887 %Y = alloca i32, align 4 ; <i32*> [#uses=4] 888 %Z = alloca i32, align 4 ; <i32*> [#uses=3] 889 %0 = bitcast i32* %X to {}* ; <{}*> [#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 {}* ; <{}*> [#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 {}* ; <{}*> [#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 ; <i32> [#uses=1] 899 %tmp1 = load i32* %Y, !dbg !16 ; <i32> [#uses=1] 900 %add = add nsw i32 %tmp, %tmp1, !dbg !16 ; <i32> [#uses=1] 901 store i32 %add, i32* %Z, !dbg !16 902 %tmp2 = load i32* %Y, !dbg !17 ; <i32> [#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