1================================ 2Source Level Debugging with LLVM 3================================ 4 5.. contents:: 6 :local: 7 8Introduction 9============ 10 11This document is the central repository for all information pertaining to debug 12information in LLVM. It describes the :ref:`actual format that the LLVM debug 13information takes <format>`, which is useful for those interested in creating 14front-ends or dealing directly with the information. Further, this document 15provides specific examples of what debug information for C/C++ looks like. 16 17Philosophy behind LLVM debugging information 18-------------------------------------------- 19 20The idea of the LLVM debugging information is to capture how the important 21pieces of the source-language's Abstract Syntax Tree map onto LLVM code. 22Several design aspects have shaped the solution that appears here. The 23important ones are: 24 25* Debugging information should have very little impact on the rest of the 26 compiler. No transformations, analyses, or code generators should need to 27 be modified because of debugging information. 28 29* LLVM optimizations should interact in :ref:`well-defined and easily described 30 ways <intro_debugopt>` with the debugging information. 31 32* Because LLVM is designed to support arbitrary programming languages, 33 LLVM-to-LLVM tools should not need to know anything about the semantics of 34 the source-level-language. 35 36* Source-level languages are often **widely** different from one another. 37 LLVM should not put any restrictions of the flavor of the source-language, 38 and the debugging information should work with any language. 39 40* With code generator support, it should be possible to use an LLVM compiler 41 to compile a program to native machine code and standard debugging 42 formats. This allows compatibility with traditional machine-code level 43 debuggers, like GDB or DBX. 44 45The approach used by the LLVM implementation is to use a small set of 46:ref:`intrinsic functions <format_common_intrinsics>` to define a mapping 47between LLVM program objects and the source-level objects. The description of 48the source-level program is maintained in LLVM metadata in an 49:ref:`implementation-defined format <ccxx_frontend>` (the C/C++ front-end 50currently uses working draft 7 of the `DWARF 3 standard 51<http://www.eagercon.com/dwarf/dwarf3std.htm>`_). 52 53When a program is being debugged, a debugger interacts with the user and turns 54the stored debug information into source-language specific information. As 55such, a debugger must be aware of the source-language, and is thus tied to a 56specific language or family of languages. 57 58Debug information consumers 59--------------------------- 60 61The role of debug information is to provide meta information normally stripped 62away during the compilation process. This meta information provides an LLVM 63user a relationship between generated code and the original program source 64code. 65 66Currently, there are two backend consumers of debug info: DwarfDebug and 67CodeViewDebug. DwarfDebug produces DWARF suitable for use with GDB, LLDB, and 68other DWARF-based debuggers. :ref:`CodeViewDebug <codeview>` produces CodeView, 69the Microsoft debug info format, which is usable with Microsoft debuggers such 70as Visual Studio and WinDBG. LLVM's debug information format is mostly derived 71from and inspired by DWARF, but it is feasible to translate into other target 72debug info formats such as STABS. 73 74It would also be reasonable to use debug information to feed profiling tools 75for analysis of generated code, or, tools for reconstructing the original 76source from generated code. 77 78.. _intro_debugopt: 79 80Debug information and optimizations 81----------------------------------- 82 83An extremely high priority of LLVM debugging information is to make it interact 84well with optimizations and analysis. In particular, the LLVM debug 85information provides the following guarantees: 86 87* LLVM debug information **always provides information to accurately read 88 the source-level state of the program**, regardless of which LLVM 89 optimizations have been run, and without any modification to the 90 optimizations themselves. However, some optimizations may impact the 91 ability to modify the current state of the program with a debugger, such 92 as setting program variables, or calling functions that have been 93 deleted. 94 95* As desired, LLVM optimizations can be upgraded to be aware of debugging 96 information, allowing them to update the debugging information as they 97 perform aggressive optimizations. This means that, with effort, the LLVM 98 optimizers could optimize debug code just as well as non-debug code. 99 100* LLVM debug information does not prevent optimizations from 101 happening (for example inlining, basic block reordering/merging/cleanup, 102 tail duplication, etc). 103 104* LLVM debug information is automatically optimized along with the rest of 105 the program, using existing facilities. For example, duplicate 106 information is automatically merged by the linker, and unused information 107 is automatically removed. 108 109Basically, the debug information allows you to compile a program with 110"``-O0 -g``" and get full debug information, allowing you to arbitrarily modify 111the program as it executes from a debugger. Compiling a program with 112"``-O3 -g``" gives you full debug information that is always available and 113accurate for reading (e.g., you get accurate stack traces despite tail call 114elimination and inlining), but you might lose the ability to modify the program 115and call functions which were optimized out of the program, or inlined away 116completely. 117 118The :doc:`LLVM test-suite <TestSuiteMakefileGuide>` provides a framework to 119test the optimizer's handling of debugging information. It can be run like 120this: 121 122.. code-block:: bash 123 124 % cd llvm/projects/test-suite/MultiSource/Benchmarks # or some other level 125 % make TEST=dbgopt 126 127This will test impact of debugging information on optimization passes. If 128debugging information influences optimization passes then it will be reported 129as a failure. See :doc:`TestingGuide` for more information on LLVM test 130infrastructure and how to run various tests. 131 132.. _format: 133 134Debugging information format 135============================ 136 137LLVM debugging information has been carefully designed to make it possible for 138the optimizer to optimize the program and debugging information without 139necessarily having to know anything about debugging information. In 140particular, the use of metadata avoids duplicated debugging information from 141the beginning, and the global dead code elimination pass automatically deletes 142debugging information for a function if it decides to delete the function. 143 144To do this, most of the debugging information (descriptors for types, 145variables, functions, source files, etc) is inserted by the language front-end 146in the form of LLVM metadata. 147 148Debug information is designed to be agnostic about the target debugger and 149debugging information representation (e.g. DWARF/Stabs/etc). It uses a generic 150pass to decode the information that represents variables, types, functions, 151namespaces, etc: this allows for arbitrary source-language semantics and 152type-systems to be used, as long as there is a module written for the target 153debugger to interpret the information. 154 155To provide basic functionality, the LLVM debugger does have to make some 156assumptions about the source-level language being debugged, though it keeps 157these to a minimum. The only common features that the LLVM debugger assumes 158exist are `source files <LangRef.html#difile>`_, and `program objects 159<LangRef.html#diglobalvariable>`_. These abstract objects are used by a 160debugger to form stack traces, show information about local variables, etc. 161 162This section of the documentation first describes the representation aspects 163common to any source-language. :ref:`ccxx_frontend` describes the data layout 164conventions used by the C and C++ front-ends. 165 166Debug information descriptors are `specialized metadata nodes 167<LangRef.html#specialized-metadata>`_, first-class subclasses of ``Metadata``. 168 169.. _format_common_intrinsics: 170 171Debugger intrinsic functions 172---------------------------- 173 174LLVM uses several intrinsic functions (name prefixed with "``llvm.dbg``") to 175track source local variables through optimization and code generation. 176 177``llvm.dbg.addr`` 178^^^^^^^^^^^^^^^^^^^^ 179 180.. code-block:: llvm 181 182 void @llvm.dbg.addr(metadata, metadata, metadata) 183 184This intrinsic provides information about a local element (e.g., variable). 185The first argument is metadata holding the address of variable, typically a 186static alloca in the function entry block. The second argument is a 187`local variable <LangRef.html#dilocalvariable>`_ containing a description of 188the variable. The third argument is a `complex expression 189<LangRef.html#diexpression>`_. An `llvm.dbg.addr` intrinsic describes the 190*address* of a source variable. 191 192.. code-block:: text 193 194 %i.addr = alloca i32, align 4 195 call void @llvm.dbg.addr(metadata i32* %i.addr, metadata !1, 196 metadata !DIExpression()), !dbg !2 197 !1 = !DILocalVariable(name: "i", ...) ; int i 198 !2 = !DILocation(...) 199 ... 200 %buffer = alloca [256 x i8], align 8 201 ; The address of i is buffer+64. 202 call void @llvm.dbg.addr(metadata [256 x i8]* %buffer, metadata !3, 203 metadata !DIExpression(DW_OP_plus, 64)), !dbg !4 204 !3 = !DILocalVariable(name: "i", ...) ; int i 205 !4 = !DILocation(...) 206 207A frontend should generate exactly one call to ``llvm.dbg.addr`` at the point 208of declaration of a source variable. Optimization passes that fully promote the 209variable from memory to SSA values will replace this call with possibly 210multiple calls to `llvm.dbg.value`. Passes that delete stores are effectively 211partial promotion, and they will insert a mix of calls to ``llvm.dbg.value`` 212and ``llvm.dbg.addr`` to track the source variable value when it is available. 213After optimization, there may be multiple calls to ``llvm.dbg.addr`` describing 214the program points where the variables lives in memory. All calls for the same 215concrete source variable must agree on the memory location. 216 217 218``llvm.dbg.declare`` 219^^^^^^^^^^^^^^^^^^^^ 220 221.. code-block:: llvm 222 223 void @llvm.dbg.declare(metadata, metadata, metadata) 224 225This intrinsic is identical to `llvm.dbg.addr`, except that there can only be 226one call to `llvm.dbg.declare` for a given concrete `local variable 227<LangRef.html#dilocalvariable>`_. It is not control-dependent, meaning that if 228a call to `llvm.dbg.declare` exists and has a valid location argument, that 229address is considered to be the true home of the variable across its entire 230lifetime. This makes it hard for optimizations to preserve accurate debug info 231in the presence of ``llvm.dbg.declare``, so we are transitioning away from it, 232and we plan to deprecate it in future LLVM releases. 233 234 235``llvm.dbg.value`` 236^^^^^^^^^^^^^^^^^^ 237 238.. code-block:: llvm 239 240 void @llvm.dbg.value(metadata, metadata, metadata) 241 242This intrinsic provides information when a user source variable is set to a new 243value. The first argument is the new value (wrapped as metadata). The second 244argument is a `local variable <LangRef.html#dilocalvariable>`_ containing a 245description of the variable. The third argument is a `complex expression 246<LangRef.html#diexpression>`_. 247 248An `llvm.dbg.value` intrinsic describes the *value* of a source variable 249directly, not its address. Note that the value operand of this intrinsic may 250be indirect (i.e, a pointer to the source variable), provided that interpreting 251the complex expression derives the direct value. 252 253Object lifetimes and scoping 254============================ 255 256In many languages, the local variables in functions can have their lifetimes or 257scopes limited to a subset of a function. In the C family of languages, for 258example, variables are only live (readable and writable) within the source 259block that they are defined in. In functional languages, values are only 260readable after they have been defined. Though this is a very obvious concept, 261it is non-trivial to model in LLVM, because it has no notion of scoping in this 262sense, and does not want to be tied to a language's scoping rules. 263 264In order to handle this, the LLVM debug format uses the metadata attached to 265llvm instructions to encode line number and scoping information. Consider the 266following C fragment, for example: 267 268.. code-block:: c 269 270 1. void foo() { 271 2. int X = 21; 272 3. int Y = 22; 273 4. { 274 5. int Z = 23; 275 6. Z = X; 276 7. } 277 8. X = Y; 278 9. } 279 280.. FIXME: Update the following example to use llvm.dbg.addr once that is the 281 default in clang. 282 283Compiled to LLVM, this function would be represented like this: 284 285.. code-block:: text 286 287 ; Function Attrs: nounwind ssp uwtable 288 define void @foo() #0 !dbg !4 { 289 entry: 290 %X = alloca i32, align 4 291 %Y = alloca i32, align 4 292 %Z = alloca i32, align 4 293 call void @llvm.dbg.declare(metadata i32* %X, metadata !11, metadata !13), !dbg !14 294 store i32 21, i32* %X, align 4, !dbg !14 295 call void @llvm.dbg.declare(metadata i32* %Y, metadata !15, metadata !13), !dbg !16 296 store i32 22, i32* %Y, align 4, !dbg !16 297 call void @llvm.dbg.declare(metadata i32* %Z, metadata !17, metadata !13), !dbg !19 298 store i32 23, i32* %Z, align 4, !dbg !19 299 %0 = load i32, i32* %X, align 4, !dbg !20 300 store i32 %0, i32* %Z, align 4, !dbg !21 301 %1 = load i32, i32* %Y, align 4, !dbg !22 302 store i32 %1, i32* %X, align 4, !dbg !23 303 ret void, !dbg !24 304 } 305 306 ; Function Attrs: nounwind readnone 307 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 308 309 attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 310 attributes #1 = { nounwind readnone } 311 312 !llvm.dbg.cu = !{!0} 313 !llvm.module.flags = !{!7, !8, !9} 314 !llvm.ident = !{!10} 315 316 !0 = !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0 (trunk 231150) (llvm/trunk 231154)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2, imports: !2) 317 !1 = !DIFile(filename: "/dev/stdin", directory: "/Users/dexonsmith/data/llvm/debug-info") 318 !2 = !{} 319 !3 = !{!4} 320 !4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, variables: !2) 321 !5 = !DISubroutineType(types: !6) 322 !6 = !{null} 323 !7 = !{i32 2, !"Dwarf Version", i32 2} 324 !8 = !{i32 2, !"Debug Info Version", i32 3} 325 !9 = !{i32 1, !"PIC Level", i32 2} 326 !10 = !{!"clang version 3.7.0 (trunk 231150) (llvm/trunk 231154)"} 327 !11 = !DILocalVariable(name: "X", scope: !4, file: !1, line: 2, type: !12) 328 !12 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) 329 !13 = !DIExpression() 330 !14 = !DILocation(line: 2, column: 9, scope: !4) 331 !15 = !DILocalVariable(name: "Y", scope: !4, file: !1, line: 3, type: !12) 332 !16 = !DILocation(line: 3, column: 9, scope: !4) 333 !17 = !DILocalVariable(name: "Z", scope: !18, file: !1, line: 5, type: !12) 334 !18 = distinct !DILexicalBlock(scope: !4, file: !1, line: 4, column: 5) 335 !19 = !DILocation(line: 5, column: 11, scope: !18) 336 !20 = !DILocation(line: 6, column: 11, scope: !18) 337 !21 = !DILocation(line: 6, column: 9, scope: !18) 338 !22 = !DILocation(line: 8, column: 9, scope: !4) 339 !23 = !DILocation(line: 8, column: 7, scope: !4) 340 !24 = !DILocation(line: 9, column: 3, scope: !4) 341 342 343This example illustrates a few important details about LLVM debugging 344information. In particular, it shows how the ``llvm.dbg.declare`` intrinsic and 345location information, which are attached to an instruction, are applied 346together to allow a debugger to analyze the relationship between statements, 347variable definitions, and the code used to implement the function. 348 349.. code-block:: llvm 350 351 call void @llvm.dbg.declare(metadata i32* %X, metadata !11, metadata !13), !dbg !14 352 ; [debug line = 2:7] [debug variable = X] 353 354The first intrinsic ``%llvm.dbg.declare`` encodes debugging information for the 355variable ``X``. The metadata ``!dbg !14`` attached to the intrinsic provides 356scope information for the variable ``X``. 357 358.. code-block:: text 359 360 !14 = !DILocation(line: 2, column: 9, scope: !4) 361 !4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, 362 isLocal: false, isDefinition: true, scopeLine: 1, 363 isOptimized: false, variables: !2) 364 365Here ``!14`` is metadata providing `location information 366<LangRef.html#dilocation>`_. In this example, scope is encoded by ``!4``, a 367`subprogram descriptor <LangRef.html#disubprogram>`_. This way the location 368information attached to the intrinsics indicates that the variable ``X`` is 369declared at line number 2 at a function level scope in function ``foo``. 370 371Now lets take another example. 372 373.. code-block:: llvm 374 375 call void @llvm.dbg.declare(metadata i32* %Z, metadata !17, metadata !13), !dbg !19 376 ; [debug line = 5:9] [debug variable = Z] 377 378The third intrinsic ``%llvm.dbg.declare`` encodes debugging information for 379variable ``Z``. The metadata ``!dbg !19`` attached to the intrinsic provides 380scope information for the variable ``Z``. 381 382.. code-block:: text 383 384 !18 = distinct !DILexicalBlock(scope: !4, file: !1, line: 4, column: 5) 385 !19 = !DILocation(line: 5, column: 11, scope: !18) 386 387Here ``!19`` indicates that ``Z`` is declared at line number 5 and column 388number 11 inside of lexical scope ``!18``. The lexical scope itself resides 389inside of subprogram ``!4`` described above. 390 391The scope information attached with each instruction provides a straightforward 392way to find instructions covered by a scope. 393 394Object lifetime in optimized code 395================================= 396 397In the example above, every variable assignment uniquely corresponds to a 398memory store to the variable's position on the stack. However in heavily 399optimized code LLVM promotes most variables into SSA values, which can 400eventually be placed in physical registers or memory locations. To track SSA 401values through compilation, when objects are promoted to SSA values an 402``llvm.dbg.value`` intrinsic is created for each assignment, recording the 403variable's new location. Compared with the ``llvm.dbg.declare`` intrinsic: 404 405* A dbg.value terminates the effect of any preceeding dbg.values for (any 406 overlapping fragments of) the specified variable. 407* The dbg.value's position in the IR defines where in the instruction stream 408 the variable's value changes. 409* Operands can be constants, indicating the variable is assigned a 410 constant value. 411 412Care must be taken to update ``llvm.dbg.value`` intrinsics when optimization 413passes alter or move instructions and blocks -- the developer could observe such 414changes reflected in the value of variables when debugging the program. For any 415execution of the optimized program, the set of variable values presented to the 416developer by the debugger should not show a state that would never have existed 417in the execution of the unoptimized program, given the same input. Doing so 418risks misleading the developer by reporting a state that does not exist, 419damaging their understanding of the optimized program and undermining their 420trust in the debugger. 421 422Sometimes perfectly preserving variable locations is not possible, often when a 423redundant calculation is optimized out. In such cases, a ``llvm.dbg.value`` 424with operand ``undef`` should be used, to terminate earlier variable locations 425and let the debugger present ``optimized out`` to the developer. Withholding 426these potentially stale variable values from the developer diminishes the 427amount of available debug information, but increases the reliability of the 428remaining information. 429 430To illustrate some potential issues, consider the following example: 431 432.. code-block:: llvm 433 434 define i32 @foo(i32 %bar, i1 %cond) { 435 entry: 436 call @llvm.dbg.value(metadata i32 0, metadata !1, metadata !2) 437 br i1 %cond, label %truebr, label %falsebr 438 truebr: 439 %tval = add i32 %bar, 1 440 call @llvm.dbg.value(metadata i32 %tval, metadata !1, metadata !2) 441 %g1 = call i32 @gazonk() 442 br label %exit 443 falsebr: 444 %fval = add i32 %bar, 2 445 call @llvm.dbg.value(metadata i32 %fval, metadata !1, metadata !2) 446 %g2 = call i32 @gazonk() 447 br label %exit 448 exit: 449 %merge = phi [ %tval, %truebr ], [ %fval, %falsebr ] 450 %g = phi [ %g1, %truebr ], [ %g2, %falsebr ] 451 call @llvm.dbg.value(metadata i32 %merge, metadata !1, metadata !2) 452 call @llvm.dbg.value(metadata i32 %g, metadata !3, metadata !2) 453 %plusten = add i32 %merge, 10 454 %toret = add i32 %plusten, %g 455 call @llvm.dbg.value(metadata i32 %toret, metadata !1, metadata !2) 456 ret i32 %toret 457 } 458 459Containing two source-level variables in ``!1`` and ``!3``. The function could, 460perhaps, be optimized into the following code: 461 462.. code-block:: llvm 463 464 define i32 @foo(i32 %bar, i1 %cond) { 465 entry: 466 %g = call i32 @gazonk() 467 %addoper = select i1 %cond, i32 11, i32 12 468 %plusten = add i32 %bar, %addoper 469 %toret = add i32 %plusten, %g 470 ret i32 %toret 471 } 472 473What ``llvm.dbg.value`` intrinsics should be placed to represent the original variable 474locations in this code? Unfortunately the the second, third and fourth 475dbg.values for ``!1`` in the source function have had their operands 476(%tval, %fval, %merge) optimized out. Assuming we cannot recover them, we 477might consider this placement of dbg.values: 478 479.. code-block:: llvm 480 481 define i32 @foo(i32 %bar, i1 %cond) { 482 entry: 483 call @llvm.dbg.value(metadata i32 0, metadata !1, metadata !2) 484 %g = call i32 @gazonk() 485 call @llvm.dbg.value(metadata i32 %g, metadata !3, metadata !2) 486 %addoper = select i1 %cond, i32 11, i32 12 487 %plusten = add i32 %bar, %addoper 488 %toret = add i32 %plusten, %g 489 call @llvm.dbg.value(metadata i32 %toret, metadata !1, metadata !2) 490 ret i32 %toret 491 } 492 493However, this will cause ``!3`` to have the return value of ``@gazonk()`` at 494the same time as ``!1`` has the constant value zero -- a pair of assignments 495that never occurred in the unoptimized program. To avoid this, we must terminate 496the range that ``!1`` has the constant value assignment by inserting an undef 497dbg.value before the dbg.value for ``!3``: 498 499.. code-block:: llvm 500 501 define i32 @foo(i32 %bar, i1 %cond) { 502 entry: 503 call @llvm.dbg.value(metadata i32 0, metadata !1, metadata !2) 504 %g = call i32 @gazonk() 505 call @llvm.dbg.value(metadata i32 undef, metadata !1, metadata !2) 506 call @llvm.dbg.value(metadata i32 %g, metadata !3, metadata !2) 507 %addoper = select i1 %cond, i32 11, i32 12 508 %plusten = add i32 %bar, %addoper 509 %toret = add i32 %plusten, %g 510 call @llvm.dbg.value(metadata i32 %toret, metadata !1, metadata !2) 511 ret i32 %toret 512 } 513 514In general, if any dbg.value has its operand optimized out and cannot be 515recovered, then an undef dbg.value is necessary to terminate earlier variable 516locations. Additional undef dbg.values may be necessary when the debugger can 517observe re-ordering of assignments. 518 519.. _ccxx_frontend: 520 521C/C++ front-end specific debug information 522========================================== 523 524The C and C++ front-ends represent information about the program in a format 525that is effectively identical to `DWARF 3.0 526<http://www.eagercon.com/dwarf/dwarf3std.htm>`_ in terms of information 527content. This allows code generators to trivially support native debuggers by 528generating standard dwarf information, and contains enough information for 529non-dwarf targets to translate it as needed. 530 531This section describes the forms used to represent C and C++ programs. Other 532languages could pattern themselves after this (which itself is tuned to 533representing programs in the same way that DWARF 3 does), or they could choose 534to provide completely different forms if they don't fit into the DWARF model. 535As support for debugging information gets added to the various LLVM 536source-language front-ends, the information used should be documented here. 537 538The following sections provide examples of a few C/C++ constructs and the debug 539information that would best describe those constructs. The canonical 540references are the ``DIDescriptor`` classes defined in 541``include/llvm/IR/DebugInfo.h`` and the implementations of the helper functions 542in ``lib/IR/DIBuilder.cpp``. 543 544C/C++ source file information 545----------------------------- 546 547``llvm::Instruction`` provides easy access to metadata attached with an 548instruction. One can extract line number information encoded in LLVM IR using 549``Instruction::getDebugLoc()`` and ``DILocation::getLine()``. 550 551.. code-block:: c++ 552 553 if (DILocation *Loc = I->getDebugLoc()) { // Here I is an LLVM instruction 554 unsigned Line = Loc->getLine(); 555 StringRef File = Loc->getFilename(); 556 StringRef Dir = Loc->getDirectory(); 557 bool ImplicitCode = Loc->isImplicitCode(); 558 } 559 560When the flag ImplicitCode is true then it means that the Instruction has been 561added by the front-end but doesn't correspond to source code written by the user. For example 562 563.. code-block:: c++ 564 565 if (MyBoolean) { 566 MyObject MO; 567 ... 568 } 569 570At the end of the scope the MyObject's destructor is called but it isn't written 571explicitly. This information is useful to avoid to have counters on brackets when 572making code coverage. 573 574C/C++ global variable information 575--------------------------------- 576 577Given an integer global variable declared as follows: 578 579.. code-block:: c 580 581 _Alignas(8) int MyGlobal = 100; 582 583a C/C++ front-end would generate the following descriptors: 584 585.. code-block:: text 586 587 ;; 588 ;; Define the global itself. 589 ;; 590 @MyGlobal = global i32 100, align 8, !dbg !0 591 592 ;; 593 ;; List of debug info of globals 594 ;; 595 !llvm.dbg.cu = !{!1} 596 597 ;; Some unrelated metadata. 598 !llvm.module.flags = !{!6, !7} 599 !llvm.ident = !{!8} 600 601 ;; Define the global variable itself 602 !0 = distinct !DIGlobalVariable(name: "MyGlobal", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true, align: 64) 603 604 ;; Define the compile unit. 605 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, 606 producer: "clang version 4.0.0", 607 isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, 608 enums: !3, globals: !4) 609 610 ;; 611 ;; Define the file 612 ;; 613 !2 = !DIFile(filename: "/dev/stdin", 614 directory: "/Users/dexonsmith/data/llvm/debug-info") 615 616 ;; An empty array. 617 !3 = !{} 618 619 ;; The Array of Global Variables 620 !4 = !{!0} 621 622 ;; 623 ;; Define the type 624 ;; 625 !5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) 626 627 ;; Dwarf version to output. 628 !6 = !{i32 2, !"Dwarf Version", i32 4} 629 630 ;; Debug info schema version. 631 !7 = !{i32 2, !"Debug Info Version", i32 3} 632 633 ;; Compiler identification 634 !8 = !{!"clang version 4.0.0"} 635 636 637The align value in DIGlobalVariable description specifies variable alignment in 638case it was forced by C11 _Alignas(), C++11 alignas() keywords or compiler 639attribute __attribute__((aligned ())). In other case (when this field is missing) 640alignment is considered default. This is used when producing DWARF output 641for DW_AT_alignment value. 642 643C/C++ function information 644-------------------------- 645 646Given a function declared as follows: 647 648.. code-block:: c 649 650 int main(int argc, char *argv[]) { 651 return 0; 652 } 653 654a C/C++ front-end would generate the following descriptors: 655 656.. code-block:: text 657 658 ;; 659 ;; Define the anchor for subprograms. 660 ;; 661 !4 = !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !5, 662 isLocal: false, isDefinition: true, scopeLine: 1, 663 flags: DIFlagPrototyped, isOptimized: false, 664 variables: !2) 665 666 ;; 667 ;; Define the subprogram itself. 668 ;; 669 define i32 @main(i32 %argc, i8** %argv) !dbg !4 { 670 ... 671 } 672 673Fortran specific debug information 674================================== 675 676Fortran function information 677---------------------------- 678 679There are a few DWARF attributes defined to support client debugging of Fortran programs. LLVM can generate (or omit) the appropriate DWARF attributes for the prefix-specs of ELEMENTAL, PURE, IMPURE, RECURSIVE, and NON_RECURSIVE. This is done by using the spFlags values: DISPFlagElemental, DISPFlagPure, and DISPFlagRecursive. 680 681.. code-block:: fortran 682 683 elemental function elem_func(a) 684 685a Fortran front-end would generate the following descriptors: 686 687.. code-block:: text 688 689 !11 = distinct !DISubprogram(name: "subroutine2", scope: !1, file: !1, 690 line: 5, type: !8, scopeLine: 6, 691 spFlags: DISPFlagDefinition | DISPFlagElemental, unit: !0, 692 retainedNodes: !2) 693 694and this will materialize an additional DWARF attribute as: 695 696.. code-block:: text 697 698 DW_TAG_subprogram [3] 699 DW_AT_low_pc [DW_FORM_addr] (0x0000000000000010 ".text") 700 DW_AT_high_pc [DW_FORM_data4] (0x00000001) 701 ... 702 DW_AT_elemental [DW_FORM_flag_present] (true) 703 704Debugging information format 705============================ 706 707Debugging Information Extension for Objective C Properties 708---------------------------------------------------------- 709 710Introduction 711^^^^^^^^^^^^ 712 713Objective C provides a simpler way to declare and define accessor methods using 714declared properties. The language provides features to declare a property and 715to let compiler synthesize accessor methods. 716 717The debugger lets developer inspect Objective C interfaces and their instance 718variables and class variables. However, the debugger does not know anything 719about the properties defined in Objective C interfaces. The debugger consumes 720information generated by compiler in DWARF format. The format does not support 721encoding of Objective C properties. This proposal describes DWARF extensions to 722encode Objective C properties, which the debugger can use to let developers 723inspect Objective C properties. 724 725Proposal 726^^^^^^^^ 727 728Objective C properties exist separately from class members. A property can be 729defined only by "setter" and "getter" selectors, and be calculated anew on each 730access. Or a property can just be a direct access to some declared ivar. 731Finally it can have an ivar "automatically synthesized" for it by the compiler, 732in which case the property can be referred to in user code directly using the 733standard C dereference syntax as well as through the property "dot" syntax, but 734there is no entry in the ``@interface`` declaration corresponding to this ivar. 735 736To facilitate debugging, these properties we will add a new DWARF TAG into the 737``DW_TAG_structure_type`` definition for the class to hold the description of a 738given property, and a set of DWARF attributes that provide said description. 739The property tag will also contain the name and declared type of the property. 740 741If there is a related ivar, there will also be a DWARF property attribute placed 742in the ``DW_TAG_member`` DIE for that ivar referring back to the property TAG 743for that property. And in the case where the compiler synthesizes the ivar 744directly, the compiler is expected to generate a ``DW_TAG_member`` for that 745ivar (with the ``DW_AT_artificial`` set to 1), whose name will be the name used 746to access this ivar directly in code, and with the property attribute pointing 747back to the property it is backing. 748 749The following examples will serve as illustration for our discussion: 750 751.. code-block:: objc 752 753 @interface I1 { 754 int n2; 755 } 756 757 @property int p1; 758 @property int p2; 759 @end 760 761 @implementation I1 762 @synthesize p1; 763 @synthesize p2 = n2; 764 @end 765 766This produces the following DWARF (this is a "pseudo dwarfdump" output): 767 768.. code-block:: none 769 770 0x00000100: TAG_structure_type [7] * 771 AT_APPLE_runtime_class( 0x10 ) 772 AT_name( "I1" ) 773 AT_decl_file( "Objc_Property.m" ) 774 AT_decl_line( 3 ) 775 776 0x00000110 TAG_APPLE_property 777 AT_name ( "p1" ) 778 AT_type ( {0x00000150} ( int ) ) 779 780 0x00000120: TAG_APPLE_property 781 AT_name ( "p2" ) 782 AT_type ( {0x00000150} ( int ) ) 783 784 0x00000130: TAG_member [8] 785 AT_name( "_p1" ) 786 AT_APPLE_property ( {0x00000110} "p1" ) 787 AT_type( {0x00000150} ( int ) ) 788 AT_artificial ( 0x1 ) 789 790 0x00000140: TAG_member [8] 791 AT_name( "n2" ) 792 AT_APPLE_property ( {0x00000120} "p2" ) 793 AT_type( {0x00000150} ( int ) ) 794 795 0x00000150: AT_type( ( int ) ) 796 797Note, the current convention is that the name of the ivar for an 798auto-synthesized property is the name of the property from which it derives 799with an underscore prepended, as is shown in the example. But we actually 800don't need to know this convention, since we are given the name of the ivar 801directly. 802 803Also, it is common practice in ObjC to have different property declarations in 804the @interface and @implementation - e.g. to provide a read-only property in 805the interface,and a read-write interface in the implementation. In that case, 806the compiler should emit whichever property declaration will be in force in the 807current translation unit. 808 809Developers can decorate a property with attributes which are encoded using 810``DW_AT_APPLE_property_attribute``. 811 812.. code-block:: objc 813 814 @property (readonly, nonatomic) int pr; 815 816.. code-block:: none 817 818 TAG_APPLE_property [8] 819 AT_name( "pr" ) 820 AT_type ( {0x00000147} (int) ) 821 AT_APPLE_property_attribute (DW_APPLE_PROPERTY_readonly, DW_APPLE_PROPERTY_nonatomic) 822 823The setter and getter method names are attached to the property using 824``DW_AT_APPLE_property_setter`` and ``DW_AT_APPLE_property_getter`` attributes. 825 826.. code-block:: objc 827 828 @interface I1 829 @property (setter=myOwnP3Setter:) int p3; 830 -(void)myOwnP3Setter:(int)a; 831 @end 832 833 @implementation I1 834 @synthesize p3; 835 -(void)myOwnP3Setter:(int)a{ } 836 @end 837 838The DWARF for this would be: 839 840.. code-block:: none 841 842 0x000003bd: TAG_structure_type [7] * 843 AT_APPLE_runtime_class( 0x10 ) 844 AT_name( "I1" ) 845 AT_decl_file( "Objc_Property.m" ) 846 AT_decl_line( 3 ) 847 848 0x000003cd TAG_APPLE_property 849 AT_name ( "p3" ) 850 AT_APPLE_property_setter ( "myOwnP3Setter:" ) 851 AT_type( {0x00000147} ( int ) ) 852 853 0x000003f3: TAG_member [8] 854 AT_name( "_p3" ) 855 AT_type ( {0x00000147} ( int ) ) 856 AT_APPLE_property ( {0x000003cd} ) 857 AT_artificial ( 0x1 ) 858 859New DWARF Tags 860^^^^^^^^^^^^^^ 861 862+-----------------------+--------+ 863| TAG | Value | 864+=======================+========+ 865| DW_TAG_APPLE_property | 0x4200 | 866+-----------------------+--------+ 867 868New DWARF Attributes 869^^^^^^^^^^^^^^^^^^^^ 870 871+--------------------------------+--------+-----------+ 872| Attribute | Value | Classes | 873+================================+========+===========+ 874| DW_AT_APPLE_property | 0x3fed | Reference | 875+--------------------------------+--------+-----------+ 876| DW_AT_APPLE_property_getter | 0x3fe9 | String | 877+--------------------------------+--------+-----------+ 878| DW_AT_APPLE_property_setter | 0x3fea | String | 879+--------------------------------+--------+-----------+ 880| DW_AT_APPLE_property_attribute | 0x3feb | Constant | 881+--------------------------------+--------+-----------+ 882 883New DWARF Constants 884^^^^^^^^^^^^^^^^^^^ 885 886+--------------------------------------+-------+ 887| Name | Value | 888+======================================+=======+ 889| DW_APPLE_PROPERTY_readonly | 0x01 | 890+--------------------------------------+-------+ 891| DW_APPLE_PROPERTY_getter | 0x02 | 892+--------------------------------------+-------+ 893| DW_APPLE_PROPERTY_assign | 0x04 | 894+--------------------------------------+-------+ 895| DW_APPLE_PROPERTY_readwrite | 0x08 | 896+--------------------------------------+-------+ 897| DW_APPLE_PROPERTY_retain | 0x10 | 898+--------------------------------------+-------+ 899| DW_APPLE_PROPERTY_copy | 0x20 | 900+--------------------------------------+-------+ 901| DW_APPLE_PROPERTY_nonatomic | 0x40 | 902+--------------------------------------+-------+ 903| DW_APPLE_PROPERTY_setter | 0x80 | 904+--------------------------------------+-------+ 905| DW_APPLE_PROPERTY_atomic | 0x100 | 906+--------------------------------------+-------+ 907| DW_APPLE_PROPERTY_weak | 0x200 | 908+--------------------------------------+-------+ 909| DW_APPLE_PROPERTY_strong | 0x400 | 910+--------------------------------------+-------+ 911| DW_APPLE_PROPERTY_unsafe_unretained | 0x800 | 912+--------------------------------------+-------+ 913| DW_APPLE_PROPERTY_nullability | 0x1000| 914+--------------------------------------+-------+ 915| DW_APPLE_PROPERTY_null_resettable | 0x2000| 916+--------------------------------------+-------+ 917| DW_APPLE_PROPERTY_class | 0x4000| 918+--------------------------------------+-------+ 919 920Name Accelerator Tables 921----------------------- 922 923Introduction 924^^^^^^^^^^^^ 925 926The "``.debug_pubnames``" and "``.debug_pubtypes``" formats are not what a 927debugger needs. The "``pub``" in the section name indicates that the entries 928in the table are publicly visible names only. This means no static or hidden 929functions show up in the "``.debug_pubnames``". No static variables or private 930class variables are in the "``.debug_pubtypes``". Many compilers add different 931things to these tables, so we can't rely upon the contents between gcc, icc, or 932clang. 933 934The typical query given by users tends not to match up with the contents of 935these tables. For example, the DWARF spec states that "In the case of the name 936of a function member or static data member of a C++ structure, class or union, 937the name presented in the "``.debug_pubnames``" section is not the simple name 938given by the ``DW_AT_name attribute`` of the referenced debugging information 939entry, but rather the fully qualified name of the data or function member." 940So the only names in these tables for complex C++ entries is a fully 941qualified name. Debugger users tend not to enter their search strings as 942"``a::b::c(int,const Foo&) const``", but rather as "``c``", "``b::c``" , or 943"``a::b::c``". So the name entered in the name table must be demangled in 944order to chop it up appropriately and additional names must be manually entered 945into the table to make it effective as a name lookup table for debuggers to 946use. 947 948All debuggers currently ignore the "``.debug_pubnames``" table as a result of 949its inconsistent and useless public-only name content making it a waste of 950space in the object file. These tables, when they are written to disk, are not 951sorted in any way, leaving every debugger to do its own parsing and sorting. 952These tables also include an inlined copy of the string values in the table 953itself making the tables much larger than they need to be on disk, especially 954for large C++ programs. 955 956Can't we just fix the sections by adding all of the names we need to this 957table? No, because that is not what the tables are defined to contain and we 958won't know the difference between the old bad tables and the new good tables. 959At best we could make our own renamed sections that contain all of the data we 960need. 961 962These tables are also insufficient for what a debugger like LLDB needs. LLDB 963uses clang for its expression parsing where LLDB acts as a PCH. LLDB is then 964often asked to look for type "``foo``" or namespace "``bar``", or list items in 965namespace "``baz``". Namespaces are not included in the pubnames or pubtypes 966tables. Since clang asks a lot of questions when it is parsing an expression, 967we need to be very fast when looking up names, as it happens a lot. Having new 968accelerator tables that are optimized for very quick lookups will benefit this 969type of debugging experience greatly. 970 971We would like to generate name lookup tables that can be mapped into memory 972from disk, and used as is, with little or no up-front parsing. We would also 973be able to control the exact content of these different tables so they contain 974exactly what we need. The Name Accelerator Tables were designed to fix these 975issues. In order to solve these issues we need to: 976 977* Have a format that can be mapped into memory from disk and used as is 978* Lookups should be very fast 979* Extensible table format so these tables can be made by many producers 980* Contain all of the names needed for typical lookups out of the box 981* Strict rules for the contents of tables 982 983Table size is important and the accelerator table format should allow the reuse 984of strings from common string tables so the strings for the names are not 985duplicated. We also want to make sure the table is ready to be used as-is by 986simply mapping the table into memory with minimal header parsing. 987 988The name lookups need to be fast and optimized for the kinds of lookups that 989debuggers tend to do. Optimally we would like to touch as few parts of the 990mapped table as possible when doing a name lookup and be able to quickly find 991the name entry we are looking for, or discover there are no matches. In the 992case of debuggers we optimized for lookups that fail most of the time. 993 994Each table that is defined should have strict rules on exactly what is in the 995accelerator tables and documented so clients can rely on the content. 996 997Hash Tables 998^^^^^^^^^^^ 999 1000Standard Hash Tables 1001"""""""""""""""""""" 1002 1003Typical hash tables have a header, buckets, and each bucket points to the 1004bucket contents: 1005 1006.. code-block:: none 1007 1008 .------------. 1009 | HEADER | 1010 |------------| 1011 | BUCKETS | 1012 |------------| 1013 | DATA | 1014 `------------' 1015 1016The BUCKETS are an array of offsets to DATA for each hash: 1017 1018.. code-block:: none 1019 1020 .------------. 1021 | 0x00001000 | BUCKETS[0] 1022 | 0x00002000 | BUCKETS[1] 1023 | 0x00002200 | BUCKETS[2] 1024 | 0x000034f0 | BUCKETS[3] 1025 | | ... 1026 | 0xXXXXXXXX | BUCKETS[n_buckets] 1027 '------------' 1028 1029So for ``bucket[3]`` in the example above, we have an offset into the table 10300x000034f0 which points to a chain of entries for the bucket. Each bucket must 1031contain a next pointer, full 32 bit hash value, the string itself, and the data 1032for the current string value. 1033 1034.. code-block:: none 1035 1036 .------------. 1037 0x000034f0: | 0x00003500 | next pointer 1038 | 0x12345678 | 32 bit hash 1039 | "erase" | string value 1040 | data[n] | HashData for this bucket 1041 |------------| 1042 0x00003500: | 0x00003550 | next pointer 1043 | 0x29273623 | 32 bit hash 1044 | "dump" | string value 1045 | data[n] | HashData for this bucket 1046 |------------| 1047 0x00003550: | 0x00000000 | next pointer 1048 | 0x82638293 | 32 bit hash 1049 | "main" | string value 1050 | data[n] | HashData for this bucket 1051 `------------' 1052 1053The problem with this layout for debuggers is that we need to optimize for the 1054negative lookup case where the symbol we're searching for is not present. So 1055if we were to lookup "``printf``" in the table above, we would make a 32-bit 1056hash for "``printf``", it might match ``bucket[3]``. We would need to go to 1057the offset 0x000034f0 and start looking to see if our 32 bit hash matches. To 1058do so, we need to read the next pointer, then read the hash, compare it, and 1059skip to the next bucket. Each time we are skipping many bytes in memory and 1060touching new pages just to do the compare on the full 32 bit hash. All of 1061these accesses then tell us that we didn't have a match. 1062 1063Name Hash Tables 1064"""""""""""""""" 1065 1066To solve the issues mentioned above we have structured the hash tables a bit 1067differently: a header, buckets, an array of all unique 32 bit hash values, 1068followed by an array of hash value data offsets, one for each hash value, then 1069the data for all hash values: 1070 1071.. code-block:: none 1072 1073 .-------------. 1074 | HEADER | 1075 |-------------| 1076 | BUCKETS | 1077 |-------------| 1078 | HASHES | 1079 |-------------| 1080 | OFFSETS | 1081 |-------------| 1082 | DATA | 1083 `-------------' 1084 1085The ``BUCKETS`` in the name tables are an index into the ``HASHES`` array. By 1086making all of the full 32 bit hash values contiguous in memory, we allow 1087ourselves to efficiently check for a match while touching as little memory as 1088possible. Most often checking the 32 bit hash values is as far as the lookup 1089goes. If it does match, it usually is a match with no collisions. So for a 1090table with "``n_buckets``" buckets, and "``n_hashes``" unique 32 bit hash 1091values, we can clarify the contents of the ``BUCKETS``, ``HASHES`` and 1092``OFFSETS`` as: 1093 1094.. code-block:: none 1095 1096 .-------------------------. 1097 | HEADER.magic | uint32_t 1098 | HEADER.version | uint16_t 1099 | HEADER.hash_function | uint16_t 1100 | HEADER.bucket_count | uint32_t 1101 | HEADER.hashes_count | uint32_t 1102 | HEADER.header_data_len | uint32_t 1103 | HEADER_DATA | HeaderData 1104 |-------------------------| 1105 | BUCKETS | uint32_t[n_buckets] // 32 bit hash indexes 1106 |-------------------------| 1107 | HASHES | uint32_t[n_hashes] // 32 bit hash values 1108 |-------------------------| 1109 | OFFSETS | uint32_t[n_hashes] // 32 bit offsets to hash value data 1110 |-------------------------| 1111 | ALL HASH DATA | 1112 `-------------------------' 1113 1114So taking the exact same data from the standard hash example above we end up 1115with: 1116 1117.. code-block:: none 1118 1119 .------------. 1120 | HEADER | 1121 |------------| 1122 | 0 | BUCKETS[0] 1123 | 2 | BUCKETS[1] 1124 | 5 | BUCKETS[2] 1125 | 6 | BUCKETS[3] 1126 | | ... 1127 | ... | BUCKETS[n_buckets] 1128 |------------| 1129 | 0x........ | HASHES[0] 1130 | 0x........ | HASHES[1] 1131 | 0x........ | HASHES[2] 1132 | 0x........ | HASHES[3] 1133 | 0x........ | HASHES[4] 1134 | 0x........ | HASHES[5] 1135 | 0x12345678 | HASHES[6] hash for BUCKETS[3] 1136 | 0x29273623 | HASHES[7] hash for BUCKETS[3] 1137 | 0x82638293 | HASHES[8] hash for BUCKETS[3] 1138 | 0x........ | HASHES[9] 1139 | 0x........ | HASHES[10] 1140 | 0x........ | HASHES[11] 1141 | 0x........ | HASHES[12] 1142 | 0x........ | HASHES[13] 1143 | 0x........ | HASHES[n_hashes] 1144 |------------| 1145 | 0x........ | OFFSETS[0] 1146 | 0x........ | OFFSETS[1] 1147 | 0x........ | OFFSETS[2] 1148 | 0x........ | OFFSETS[3] 1149 | 0x........ | OFFSETS[4] 1150 | 0x........ | OFFSETS[5] 1151 | 0x000034f0 | OFFSETS[6] offset for BUCKETS[3] 1152 | 0x00003500 | OFFSETS[7] offset for BUCKETS[3] 1153 | 0x00003550 | OFFSETS[8] offset for BUCKETS[3] 1154 | 0x........ | OFFSETS[9] 1155 | 0x........ | OFFSETS[10] 1156 | 0x........ | OFFSETS[11] 1157 | 0x........ | OFFSETS[12] 1158 | 0x........ | OFFSETS[13] 1159 | 0x........ | OFFSETS[n_hashes] 1160 |------------| 1161 | | 1162 | | 1163 | | 1164 | | 1165 | | 1166 |------------| 1167 0x000034f0: | 0x00001203 | .debug_str ("erase") 1168 | 0x00000004 | A 32 bit array count - number of HashData with name "erase" 1169 | 0x........ | HashData[0] 1170 | 0x........ | HashData[1] 1171 | 0x........ | HashData[2] 1172 | 0x........ | HashData[3] 1173 | 0x00000000 | String offset into .debug_str (terminate data for hash) 1174 |------------| 1175 0x00003500: | 0x00001203 | String offset into .debug_str ("collision") 1176 | 0x00000002 | A 32 bit array count - number of HashData with name "collision" 1177 | 0x........ | HashData[0] 1178 | 0x........ | HashData[1] 1179 | 0x00001203 | String offset into .debug_str ("dump") 1180 | 0x00000003 | A 32 bit array count - number of HashData with name "dump" 1181 | 0x........ | HashData[0] 1182 | 0x........ | HashData[1] 1183 | 0x........ | HashData[2] 1184 | 0x00000000 | String offset into .debug_str (terminate data for hash) 1185 |------------| 1186 0x00003550: | 0x00001203 | String offset into .debug_str ("main") 1187 | 0x00000009 | A 32 bit array count - number of HashData with name "main" 1188 | 0x........ | HashData[0] 1189 | 0x........ | HashData[1] 1190 | 0x........ | HashData[2] 1191 | 0x........ | HashData[3] 1192 | 0x........ | HashData[4] 1193 | 0x........ | HashData[5] 1194 | 0x........ | HashData[6] 1195 | 0x........ | HashData[7] 1196 | 0x........ | HashData[8] 1197 | 0x00000000 | String offset into .debug_str (terminate data for hash) 1198 `------------' 1199 1200So we still have all of the same data, we just organize it more efficiently for 1201debugger lookup. If we repeat the same "``printf``" lookup from above, we 1202would hash "``printf``" and find it matches ``BUCKETS[3]`` by taking the 32 bit 1203hash value and modulo it by ``n_buckets``. ``BUCKETS[3]`` contains "6" which 1204is the index into the ``HASHES`` table. We would then compare any consecutive 120532 bit hashes values in the ``HASHES`` array as long as the hashes would be in 1206``BUCKETS[3]``. We do this by verifying that each subsequent hash value modulo 1207``n_buckets`` is still 3. In the case of a failed lookup we would access the 1208memory for ``BUCKETS[3]``, and then compare a few consecutive 32 bit hashes 1209before we know that we have no match. We don't end up marching through 1210multiple words of memory and we really keep the number of processor data cache 1211lines being accessed as small as possible. 1212 1213The string hash that is used for these lookup tables is the Daniel J. 1214Bernstein hash which is also used in the ELF ``GNU_HASH`` sections. It is a 1215very good hash for all kinds of names in programs with very few hash 1216collisions. 1217 1218Empty buckets are designated by using an invalid hash index of ``UINT32_MAX``. 1219 1220Details 1221^^^^^^^ 1222 1223These name hash tables are designed to be generic where specializations of the 1224table get to define additional data that goes into the header ("``HeaderData``"), 1225how the string value is stored ("``KeyType``") and the content of the data for each 1226hash value. 1227 1228Header Layout 1229""""""""""""" 1230 1231The header has a fixed part, and the specialized part. The exact format of the 1232header is: 1233 1234.. code-block:: c 1235 1236 struct Header 1237 { 1238 uint32_t magic; // 'HASH' magic value to allow endian detection 1239 uint16_t version; // Version number 1240 uint16_t hash_function; // The hash function enumeration that was used 1241 uint32_t bucket_count; // The number of buckets in this hash table 1242 uint32_t hashes_count; // The total number of unique hash values and hash data offsets in this table 1243 uint32_t header_data_len; // The bytes to skip to get to the hash indexes (buckets) for correct alignment 1244 // Specifically the length of the following HeaderData field - this does not 1245 // include the size of the preceding fields 1246 HeaderData header_data; // Implementation specific header data 1247 }; 1248 1249The header starts with a 32 bit "``magic``" value which must be ``'HASH'`` 1250encoded as an ASCII integer. This allows the detection of the start of the 1251hash table and also allows the table's byte order to be determined so the table 1252can be correctly extracted. The "``magic``" value is followed by a 16 bit 1253``version`` number which allows the table to be revised and modified in the 1254future. The current version number is 1. ``hash_function`` is a ``uint16_t`` 1255enumeration that specifies which hash function was used to produce this table. 1256The current values for the hash function enumerations include: 1257 1258.. code-block:: c 1259 1260 enum HashFunctionType 1261 { 1262 eHashFunctionDJB = 0u, // Daniel J Bernstein hash function 1263 }; 1264 1265``bucket_count`` is a 32 bit unsigned integer that represents how many buckets 1266are in the ``BUCKETS`` array. ``hashes_count`` is the number of unique 32 bit 1267hash values that are in the ``HASHES`` array, and is the same number of offsets 1268are contained in the ``OFFSETS`` array. ``header_data_len`` specifies the size 1269in bytes of the ``HeaderData`` that is filled in by specialized versions of 1270this table. 1271 1272Fixed Lookup 1273"""""""""""" 1274 1275The header is followed by the buckets, hashes, offsets, and hash value data. 1276 1277.. code-block:: c 1278 1279 struct FixedTable 1280 { 1281 uint32_t buckets[Header.bucket_count]; // An array of hash indexes into the "hashes[]" array below 1282 uint32_t hashes [Header.hashes_count]; // Every unique 32 bit hash for the entire table is in this table 1283 uint32_t offsets[Header.hashes_count]; // An offset that corresponds to each item in the "hashes[]" array above 1284 }; 1285 1286``buckets`` is an array of 32 bit indexes into the ``hashes`` array. The 1287``hashes`` array contains all of the 32 bit hash values for all names in the 1288hash table. Each hash in the ``hashes`` table has an offset in the ``offsets`` 1289array that points to the data for the hash value. 1290 1291This table setup makes it very easy to repurpose these tables to contain 1292different data, while keeping the lookup mechanism the same for all tables. 1293This layout also makes it possible to save the table to disk and map it in 1294later and do very efficient name lookups with little or no parsing. 1295 1296DWARF lookup tables can be implemented in a variety of ways and can store a lot 1297of information for each name. We want to make the DWARF tables extensible and 1298able to store the data efficiently so we have used some of the DWARF features 1299that enable efficient data storage to define exactly what kind of data we store 1300for each name. 1301 1302The ``HeaderData`` contains a definition of the contents of each HashData chunk. 1303We might want to store an offset to all of the debug information entries (DIEs) 1304for each name. To keep things extensible, we create a list of items, or 1305Atoms, that are contained in the data for each name. First comes the type of 1306the data in each atom: 1307 1308.. code-block:: c 1309 1310 enum AtomType 1311 { 1312 eAtomTypeNULL = 0u, 1313 eAtomTypeDIEOffset = 1u, // DIE offset, check form for encoding 1314 eAtomTypeCUOffset = 2u, // DIE offset of the compiler unit header that contains the item in question 1315 eAtomTypeTag = 3u, // DW_TAG_xxx value, should be encoded as DW_FORM_data1 (if no tags exceed 255) or DW_FORM_data2 1316 eAtomTypeNameFlags = 4u, // Flags from enum NameFlags 1317 eAtomTypeTypeFlags = 5u, // Flags from enum TypeFlags 1318 }; 1319 1320The enumeration values and their meanings are: 1321 1322.. code-block:: none 1323 1324 eAtomTypeNULL - a termination atom that specifies the end of the atom list 1325 eAtomTypeDIEOffset - an offset into the .debug_info section for the DWARF DIE for this name 1326 eAtomTypeCUOffset - an offset into the .debug_info section for the CU that contains the DIE 1327 eAtomTypeDIETag - The DW_TAG_XXX enumeration value so you don't have to parse the DWARF to see what it is 1328 eAtomTypeNameFlags - Flags for functions and global variables (isFunction, isInlined, isExternal...) 1329 eAtomTypeTypeFlags - Flags for types (isCXXClass, isObjCClass, ...) 1330 1331Then we allow each atom type to define the atom type and how the data for each 1332atom type data is encoded: 1333 1334.. code-block:: c 1335 1336 struct Atom 1337 { 1338 uint16_t type; // AtomType enum value 1339 uint16_t form; // DWARF DW_FORM_XXX defines 1340 }; 1341 1342The ``form`` type above is from the DWARF specification and defines the exact 1343encoding of the data for the Atom type. See the DWARF specification for the 1344``DW_FORM_`` definitions. 1345 1346.. code-block:: c 1347 1348 struct HeaderData 1349 { 1350 uint32_t die_offset_base; 1351 uint32_t atom_count; 1352 Atoms atoms[atom_count0]; 1353 }; 1354 1355``HeaderData`` defines the base DIE offset that should be added to any atoms 1356that are encoded using the ``DW_FORM_ref1``, ``DW_FORM_ref2``, 1357``DW_FORM_ref4``, ``DW_FORM_ref8`` or ``DW_FORM_ref_udata``. It also defines 1358what is contained in each ``HashData`` object -- ``Atom.form`` tells us how large 1359each field will be in the ``HashData`` and the ``Atom.type`` tells us how this data 1360should be interpreted. 1361 1362For the current implementations of the "``.apple_names``" (all functions + 1363globals), the "``.apple_types``" (names of all types that are defined), and 1364the "``.apple_namespaces``" (all namespaces), we currently set the ``Atom`` 1365array to be: 1366 1367.. code-block:: c 1368 1369 HeaderData.atom_count = 1; 1370 HeaderData.atoms[0].type = eAtomTypeDIEOffset; 1371 HeaderData.atoms[0].form = DW_FORM_data4; 1372 1373This defines the contents to be the DIE offset (eAtomTypeDIEOffset) that is 1374encoded as a 32 bit value (DW_FORM_data4). This allows a single name to have 1375multiple matching DIEs in a single file, which could come up with an inlined 1376function for instance. Future tables could include more information about the 1377DIE such as flags indicating if the DIE is a function, method, block, 1378or inlined. 1379 1380The KeyType for the DWARF table is a 32 bit string table offset into the 1381".debug_str" table. The ".debug_str" is the string table for the DWARF which 1382may already contain copies of all of the strings. This helps make sure, with 1383help from the compiler, that we reuse the strings between all of the DWARF 1384sections and keeps the hash table size down. Another benefit to having the 1385compiler generate all strings as DW_FORM_strp in the debug info, is that 1386DWARF parsing can be made much faster. 1387 1388After a lookup is made, we get an offset into the hash data. The hash data 1389needs to be able to deal with 32 bit hash collisions, so the chunk of data 1390at the offset in the hash data consists of a triple: 1391 1392.. code-block:: c 1393 1394 uint32_t str_offset 1395 uint32_t hash_data_count 1396 HashData[hash_data_count] 1397 1398If "str_offset" is zero, then the bucket contents are done. 99.9% of the 1399hash data chunks contain a single item (no 32 bit hash collision): 1400 1401.. code-block:: none 1402 1403 .------------. 1404 | 0x00001023 | uint32_t KeyType (.debug_str[0x0001023] => "main") 1405 | 0x00000004 | uint32_t HashData count 1406 | 0x........ | uint32_t HashData[0] DIE offset 1407 | 0x........ | uint32_t HashData[1] DIE offset 1408 | 0x........ | uint32_t HashData[2] DIE offset 1409 | 0x........ | uint32_t HashData[3] DIE offset 1410 | 0x00000000 | uint32_t KeyType (end of hash chain) 1411 `------------' 1412 1413If there are collisions, you will have multiple valid string offsets: 1414 1415.. code-block:: none 1416 1417 .------------. 1418 | 0x00001023 | uint32_t KeyType (.debug_str[0x0001023] => "main") 1419 | 0x00000004 | uint32_t HashData count 1420 | 0x........ | uint32_t HashData[0] DIE offset 1421 | 0x........ | uint32_t HashData[1] DIE offset 1422 | 0x........ | uint32_t HashData[2] DIE offset 1423 | 0x........ | uint32_t HashData[3] DIE offset 1424 | 0x00002023 | uint32_t KeyType (.debug_str[0x0002023] => "print") 1425 | 0x00000002 | uint32_t HashData count 1426 | 0x........ | uint32_t HashData[0] DIE offset 1427 | 0x........ | uint32_t HashData[1] DIE offset 1428 | 0x00000000 | uint32_t KeyType (end of hash chain) 1429 `------------' 1430 1431Current testing with real world C++ binaries has shown that there is around 1 143232 bit hash collision per 100,000 name entries. 1433 1434Contents 1435^^^^^^^^ 1436 1437As we said, we want to strictly define exactly what is included in the 1438different tables. For DWARF, we have 3 tables: "``.apple_names``", 1439"``.apple_types``", and "``.apple_namespaces``". 1440 1441"``.apple_names``" sections should contain an entry for each DWARF DIE whose 1442``DW_TAG`` is a ``DW_TAG_label``, ``DW_TAG_inlined_subroutine``, or 1443``DW_TAG_subprogram`` that has address attributes: ``DW_AT_low_pc``, 1444``DW_AT_high_pc``, ``DW_AT_ranges`` or ``DW_AT_entry_pc``. It also contains 1445``DW_TAG_variable`` DIEs that have a ``DW_OP_addr`` in the location (global and 1446static variables). All global and static variables should be included, 1447including those scoped within functions and classes. For example using the 1448following code: 1449 1450.. code-block:: c 1451 1452 static int var = 0; 1453 1454 void f () 1455 { 1456 static int var = 0; 1457 } 1458 1459Both of the static ``var`` variables would be included in the table. All 1460functions should emit both their full names and their basenames. For C or C++, 1461the full name is the mangled name (if available) which is usually in the 1462``DW_AT_MIPS_linkage_name`` attribute, and the ``DW_AT_name`` contains the 1463function basename. If global or static variables have a mangled name in a 1464``DW_AT_MIPS_linkage_name`` attribute, this should be emitted along with the 1465simple name found in the ``DW_AT_name`` attribute. 1466 1467"``.apple_types``" sections should contain an entry for each DWARF DIE whose 1468tag is one of: 1469 1470* DW_TAG_array_type 1471* DW_TAG_class_type 1472* DW_TAG_enumeration_type 1473* DW_TAG_pointer_type 1474* DW_TAG_reference_type 1475* DW_TAG_string_type 1476* DW_TAG_structure_type 1477* DW_TAG_subroutine_type 1478* DW_TAG_typedef 1479* DW_TAG_union_type 1480* DW_TAG_ptr_to_member_type 1481* DW_TAG_set_type 1482* DW_TAG_subrange_type 1483* DW_TAG_base_type 1484* DW_TAG_const_type 1485* DW_TAG_file_type 1486* DW_TAG_namelist 1487* DW_TAG_packed_type 1488* DW_TAG_volatile_type 1489* DW_TAG_restrict_type 1490* DW_TAG_atomic_type 1491* DW_TAG_interface_type 1492* DW_TAG_unspecified_type 1493* DW_TAG_shared_type 1494 1495Only entries with a ``DW_AT_name`` attribute are included, and the entry must 1496not be a forward declaration (``DW_AT_declaration`` attribute with a non-zero 1497value). For example, using the following code: 1498 1499.. code-block:: c 1500 1501 int main () 1502 { 1503 int *b = 0; 1504 return *b; 1505 } 1506 1507We get a few type DIEs: 1508 1509.. code-block:: none 1510 1511 0x00000067: TAG_base_type [5] 1512 AT_encoding( DW_ATE_signed ) 1513 AT_name( "int" ) 1514 AT_byte_size( 0x04 ) 1515 1516 0x0000006e: TAG_pointer_type [6] 1517 AT_type( {0x00000067} ( int ) ) 1518 AT_byte_size( 0x08 ) 1519 1520The DW_TAG_pointer_type is not included because it does not have a ``DW_AT_name``. 1521 1522"``.apple_namespaces``" section should contain all ``DW_TAG_namespace`` DIEs. 1523If we run into a namespace that has no name this is an anonymous namespace, and 1524the name should be output as "``(anonymous namespace)``" (without the quotes). 1525Why? This matches the output of the ``abi::cxa_demangle()`` that is in the 1526standard C++ library that demangles mangled names. 1527 1528 1529Language Extensions and File Format Changes 1530^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1531 1532Objective-C Extensions 1533"""""""""""""""""""""" 1534 1535"``.apple_objc``" section should contain all ``DW_TAG_subprogram`` DIEs for an 1536Objective-C class. The name used in the hash table is the name of the 1537Objective-C class itself. If the Objective-C class has a category, then an 1538entry is made for both the class name without the category, and for the class 1539name with the category. So if we have a DIE at offset 0x1234 with a name of 1540method "``-[NSString(my_additions) stringWithSpecialString:]``", we would add 1541an entry for "``NSString``" that points to DIE 0x1234, and an entry for 1542"``NSString(my_additions)``" that points to 0x1234. This allows us to quickly 1543track down all Objective-C methods for an Objective-C class when doing 1544expressions. It is needed because of the dynamic nature of Objective-C where 1545anyone can add methods to a class. The DWARF for Objective-C methods is also 1546emitted differently from C++ classes where the methods are not usually 1547contained in the class definition, they are scattered about across one or more 1548compile units. Categories can also be defined in different shared libraries. 1549So we need to be able to quickly find all of the methods and class functions 1550given the Objective-C class name, or quickly find all methods and class 1551functions for a class + category name. This table does not contain any 1552selector names, it just maps Objective-C class names (or class names + 1553category) to all of the methods and class functions. The selectors are added 1554as function basenames in the "``.debug_names``" section. 1555 1556In the "``.apple_names``" section for Objective-C functions, the full name is 1557the entire function name with the brackets ("``-[NSString 1558stringWithCString:]``") and the basename is the selector only 1559("``stringWithCString:``"). 1560 1561Mach-O Changes 1562"""""""""""""" 1563 1564The sections names for the apple hash tables are for non-mach-o files. For 1565mach-o files, the sections should be contained in the ``__DWARF`` segment with 1566names as follows: 1567 1568* "``.apple_names``" -> "``__apple_names``" 1569* "``.apple_types``" -> "``__apple_types``" 1570* "``.apple_namespaces``" -> "``__apple_namespac``" (16 character limit) 1571* "``.apple_objc``" -> "``__apple_objc``" 1572 1573.. _codeview: 1574 1575CodeView Debug Info Format 1576========================== 1577 1578LLVM supports emitting CodeView, the Microsoft debug info format, and this 1579section describes the design and implementation of that support. 1580 1581Format Background 1582----------------- 1583 1584CodeView as a format is clearly oriented around C++ debugging, and in C++, the 1585majority of debug information tends to be type information. Therefore, the 1586overriding design constraint of CodeView is the separation of type information 1587from other "symbol" information so that type information can be efficiently 1588merged across translation units. Both type information and symbol information is 1589generally stored as a sequence of records, where each record begins with a 159016-bit record size and a 16-bit record kind. 1591 1592Type information is usually stored in the ``.debug$T`` section of the object 1593file. All other debug info, such as line info, string table, symbol info, and 1594inlinee info, is stored in one or more ``.debug$S`` sections. There may only be 1595one ``.debug$T`` section per object file, since all other debug info refers to 1596it. If a PDB (enabled by the ``/Zi`` MSVC option) was used during compilation, 1597the ``.debug$T`` section will contain only an ``LF_TYPESERVER2`` record pointing 1598to the PDB. When using PDBs, symbol information appears to remain in the object 1599file ``.debug$S`` sections. 1600 1601Type records are referred to by their index, which is the number of records in 1602the stream before a given record plus ``0x1000``. Many common basic types, such 1603as the basic integral types and unqualified pointers to them, are represented 1604using type indices less than ``0x1000``. Such basic types are built in to 1605CodeView consumers and do not require type records. 1606 1607Each type record may only contain type indices that are less than its own type 1608index. This ensures that the graph of type stream references is acyclic. While 1609the source-level type graph may contain cycles through pointer types (consider a 1610linked list struct), these cycles are removed from the type stream by always 1611referring to the forward declaration record of user-defined record types. Only 1612"symbol" records in the ``.debug$S`` streams may refer to complete, 1613non-forward-declaration type records. 1614 1615Working with CodeView 1616--------------------- 1617 1618These are instructions for some common tasks for developers working to improve 1619LLVM's CodeView support. Most of them revolve around using the CodeView dumper 1620embedded in ``llvm-readobj``. 1621 1622* Testing MSVC's output:: 1623 1624 $ cl -c -Z7 foo.cpp # Use /Z7 to keep types in the object file 1625 $ llvm-readobj -codeview foo.obj 1626 1627* Getting LLVM IR debug info out of Clang:: 1628 1629 $ clang -g -gcodeview --target=x86_64-windows-msvc foo.cpp -S -emit-llvm 1630 1631 Use this to generate LLVM IR for LLVM test cases. 1632 1633* Generate and dump CodeView from LLVM IR metadata:: 1634 1635 $ llc foo.ll -filetype=obj -o foo.obj 1636 $ llvm-readobj -codeview foo.obj > foo.txt 1637 1638 Use this pattern in lit test cases and FileCheck the output of llvm-readobj 1639 1640Improving LLVM's CodeView support is a process of finding interesting type 1641records, constructing a C++ test case that makes MSVC emit those records, 1642dumping the records, understanding them, and then generating equivalent records 1643in LLVM's backend. 1644 1645Testing Debug Info Preservation in Optimizations 1646================================================ 1647 1648The following paragraphs are an introduction to the debugify utility 1649and examples of how to use it in regression tests to check debug info 1650preservation after optimizations. 1651 1652The ``debugify`` utility 1653------------------------ 1654 1655The ``debugify`` synthetic debug info testing utility consists of two 1656main parts. The ``debugify`` pass and the ``check-debugify`` one. They are 1657meant to be used with ``opt`` for development purposes. 1658 1659The first applies synthetic debug information to every instruction of the module, 1660while the latter checks that this DI is still available after an optimization 1661has occurred, reporting any errors/warnings while doing so. 1662 1663The instructions are assigned sequentially increasing line locations, 1664and are immediately used by debug value intrinsics when possible. 1665 1666For example, here is a module before: 1667 1668.. code-block:: llvm 1669 1670 define void @f(i32* %x) { 1671 entry: 1672 %x.addr = alloca i32*, align 8 1673 store i32* %x, i32** %x.addr, align 8 1674 %0 = load i32*, i32** %x.addr, align 8 1675 store i32 10, i32* %0, align 4 1676 ret void 1677 } 1678 1679and after running ``opt -debugify`` on it we get: 1680 1681.. code-block:: text 1682 1683 define void @f(i32* %x) !dbg !6 { 1684 entry: 1685 %x.addr = alloca i32*, align 8, !dbg !12 1686 call void @llvm.dbg.value(metadata i32** %x.addr, metadata !9, metadata !DIExpression()), !dbg !12 1687 store i32* %x, i32** %x.addr, align 8, !dbg !13 1688 %0 = load i32*, i32** %x.addr, align 8, !dbg !14 1689 call void @llvm.dbg.value(metadata i32* %0, metadata !11, metadata !DIExpression()), !dbg !14 1690 store i32 10, i32* %0, align 4, !dbg !15 1691 ret void, !dbg !16 1692 } 1693 1694 !llvm.dbg.cu = !{!0} 1695 !llvm.debugify = !{!3, !4} 1696 !llvm.module.flags = !{!5} 1697 1698 !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) 1699 !1 = !DIFile(filename: "debugify-sample.ll", directory: "/") 1700 !2 = !{} 1701 !3 = !{i32 5} 1702 !4 = !{i32 2} 1703 !5 = !{i32 2, !"Debug Info Version", i32 3} 1704 !6 = distinct !DISubprogram(name: "f", linkageName: "f", scope: null, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: !0, retainedNodes: !8) 1705 !7 = !DISubroutineType(types: !2) 1706 !8 = !{!9, !11} 1707 !9 = !DILocalVariable(name: "1", scope: !6, file: !1, line: 1, type: !10) 1708 !10 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned) 1709 !11 = !DILocalVariable(name: "2", scope: !6, file: !1, line: 3, type: !10) 1710 !12 = !DILocation(line: 1, column: 1, scope: !6) 1711 !13 = !DILocation(line: 2, column: 1, scope: !6) 1712 !14 = !DILocation(line: 3, column: 1, scope: !6) 1713 !15 = !DILocation(line: 4, column: 1, scope: !6) 1714 !16 = !DILocation(line: 5, column: 1, scope: !6) 1715 1716The following is an example of the -check-debugify output: 1717 1718.. code-block:: none 1719 1720 $ opt -enable-debugify -loop-vectorize llvm/test/Transforms/LoopVectorize/i8-induction.ll -disable-output 1721 ERROR: Instruction with empty DebugLoc in function f -- %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ] 1722 1723Errors/warnings can range from instructions with empty debug location to an 1724instruction having a type that's incompatible with the source variable it describes, 1725all the way to missing lines and missing debug value intrinsics. 1726 1727Fixing errors 1728^^^^^^^^^^^^^ 1729 1730Each of the errors above has a relevant API available to fix it. 1731 1732* In the case of missing debug location, ``Instruction::setDebugLoc`` or possibly 1733 ``IRBuilder::setCurrentDebugLocation`` when using a Builder and the new location 1734 should be reused. 1735 1736* When a debug value has incompatible type ``llvm::replaceAllDbgUsesWith`` can be used. 1737 After a RAUW call an incompatible type error can occur because RAUW does not handle 1738 widening and narrowing of variables while ``llvm::replaceAllDbgUsesWith`` does. It is 1739 also capable of changing the DWARF expression used by the debugger to describe the variable. 1740 It also prevents use-before-def by salvaging or deleting invalid debug values. 1741 1742* When a debug value is missing ``llvm::salvageDebugInfo`` can be used when no replacement 1743 exists, or ``llvm::replaceAllDbgUsesWith`` when a replacement exists. 1744 1745Using ``debugify`` 1746------------------ 1747 1748In order for ``check-debugify`` to work, the DI must be coming from 1749``debugify``. Thus, modules with existing DI will be skipped. 1750 1751The most straightforward way to use ``debugify`` is as follows:: 1752 1753 $ opt -debugify -pass-to-test -check-debugify sample.ll 1754 1755This will inject synthetic DI to ``sample.ll`` run the ``pass-to-test`` 1756and then check for missing DI. 1757 1758Some other ways to run debugify are avaliable: 1759 1760.. code-block:: bash 1761 1762 # Same as the above example. 1763 $ opt -enable-debugify -pass-to-test sample.ll 1764 1765 # Suppresses verbose debugify output. 1766 $ opt -enable-debugify -debugify-quiet -pass-to-test sample.ll 1767 1768 # Prepend -debugify before and append -check-debugify -strip after 1769 # each pass on the pipeline (similar to -verify-each). 1770 $ opt -debugify-each -O2 sample.ll 1771 1772``debugify`` can also be used to test a backend, e.g: 1773 1774.. code-block:: bash 1775 1776 $ opt -debugify < sample.ll | llc -o - 1777 1778``debugify`` in regression tests 1779^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1780 1781The ``-debugify`` pass is especially helpful when it comes to testing that 1782a given pass preserves DI while transforming the module. For this to work, 1783the ``-debugify`` output must be stable enough to use in regression tests. 1784Changes to this pass are not allowed to break existing tests. 1785 1786It allows us to test for DI loss in the same tests we check that the 1787transformation is actually doing what it should. 1788 1789Here is an example from ``test/Transforms/InstCombine/cast-mul-select.ll``: 1790 1791.. code-block:: llvm 1792 1793 ; RUN: opt < %s -debugify -instcombine -S | FileCheck %s --check-prefix=DEBUGINFO 1794 1795 define i32 @mul(i32 %x, i32 %y) { 1796 ; DBGINFO-LABEL: @mul( 1797 ; DBGINFO-NEXT: [[C:%.*]] = mul i32 {{.*}} 1798 ; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 [[C]] 1799 ; DBGINFO-NEXT: [[D:%.*]] = and i32 {{.*}} 1800 ; DBGINFO-NEXT: call void @llvm.dbg.value(metadata i32 [[D]] 1801 1802 %A = trunc i32 %x to i8 1803 %B = trunc i32 %y to i8 1804 %C = mul i8 %A, %B 1805 %D = zext i8 %C to i32 1806 ret i32 %D 1807 } 1808 1809Here we test that the two ``dbg.value`` instrinsics are preserved and 1810are correctly pointing to the ``[[C]]`` and ``[[D]]`` variables. 1811 1812.. note:: 1813 1814 Note, that when writing this kind of regression tests, it is important 1815 to make them as robust as possible. That's why we should try to avoid 1816 hardcoding line/variable numbers in check lines. If for example you test 1817 for a ``DILocation`` to have a specific line number, and someone later adds 1818 an instruction before the one we check the test will fail. In the cases this 1819 can't be avoided (say, if a test wouldn't be precise enough), moving the 1820 test to its own file is preferred. 1821