[llvm-shlib] Fix the version naming style of libLLVM for Windows (#85710)
[llvm-project.git] / llvm / docs / SourceLevelDebugging.rst
blobe1df7c355ee09217dbf9fcaed425d448aafcb7e4
1 ================================
2 Source Level Debugging with LLVM
3 ================================
5 .. contents::
6    :local:
8 Introduction
9 ============
11 This document is the central repository for all information pertaining to debug
12 information in LLVM.  It describes the :ref:`actual format that the LLVM debug
13 information takes <format>`, which is useful for those interested in creating
14 front-ends or dealing directly with the information.  Further, this document
15 provides specific examples of what debug information for C/C++ looks like.
17 Philosophy behind LLVM debugging information
18 --------------------------------------------
20 The idea of the LLVM debugging information is to capture how the important
21 pieces of the source-language's Abstract Syntax Tree map onto LLVM code.
22 Several design aspects have shaped the solution that appears here.  The
23 important ones are:
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.
29 * LLVM optimizations should interact in :ref:`well-defined and easily described
30   ways <intro_debugopt>` with the debugging information.
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.
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.
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.
45 The approach used by the LLVM implementation is to use a small set of
46 :ref:`intrinsic functions <format_common_intrinsics>` to define a mapping
47 between LLVM program objects and the source-level objects.  The description of
48 the source-level program is maintained in LLVM metadata in an
49 :ref:`implementation-defined format <ccxx_frontend>` (the C/C++ front-end
50 currently uses working draft 7 of the `DWARF 3 standard
51 <http://www.eagercon.com/dwarf/dwarf3std.htm>`_).
53 When a program is being debugged, a debugger interacts with the user and turns
54 the stored debug information into source-language specific information.  As
55 such, a debugger must be aware of the source-language, and is thus tied to a
56 specific language or family of languages.
58 Debug information consumers
59 ---------------------------
61 The role of debug information is to provide meta information normally stripped
62 away during the compilation process.  This meta information provides an LLVM
63 user a relationship between generated code and the original program source
64 code.
66 Currently, there are two backend consumers of debug info: DwarfDebug and
67 CodeViewDebug. DwarfDebug produces DWARF suitable for use with GDB, LLDB, and
68 other DWARF-based debuggers. :ref:`CodeViewDebug <codeview>` produces CodeView,
69 the Microsoft debug info format, which is usable with Microsoft debuggers such
70 as Visual Studio and WinDBG. LLVM's debug information format is mostly derived
71 from and inspired by DWARF, but it is feasible to translate into other target
72 debug info formats such as STABS.
74 It would also be reasonable to use debug information to feed profiling tools
75 for analysis of generated code, or, tools for reconstructing the original
76 source from generated code.
78 .. _intro_debugopt:
80 Debug information and optimizations
81 -----------------------------------
83 An extremely high priority of LLVM debugging information is to make it interact
84 well with optimizations and analysis.  In particular, the LLVM debug
85 information provides the following guarantees:
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. :doc:`HowToUpdateDebugInfo` specifies how debug
90   info should be updated in various kinds of code transformations to avoid
91   breaking this guarantee, and how to preserve as much useful debug info as
92   possible.  Note that some optimizations may impact the ability to modify the
93   current state of the program with a debugger, such as setting program
94   variables, or calling functions that have been deleted.
96 * As desired, LLVM optimizations can be upgraded to be aware of debugging
97   information, allowing them to update the debugging information as they
98   perform aggressive optimizations.  This means that, with effort, the LLVM
99   optimizers could optimize debug code just as well as non-debug code.
101 * LLVM debug information does not prevent optimizations from
102   happening (for example inlining, basic block reordering/merging/cleanup,
103   tail duplication, etc).
105 * LLVM debug information is automatically optimized along with the rest of
106   the program, using existing facilities.  For example, duplicate
107   information is automatically merged by the linker, and unused information
108   is automatically removed.
110 Basically, the debug information allows you to compile a program with
111 "``-O0 -g``" and get full debug information, allowing you to arbitrarily modify
112 the program as it executes from a debugger.  Compiling a program with
113 "``-O3 -g``" gives you full debug information that is always available and
114 accurate for reading (e.g., you get accurate stack traces despite tail call
115 elimination and inlining), but you might lose the ability to modify the program
116 and call functions which were optimized out of the program, or inlined away
117 completely.
119 The :doc:`LLVM test-suite <TestSuiteMakefileGuide>` provides a framework to
120 test the optimizer's handling of debugging information.  It can be run like
121 this:
123 .. code-block:: bash
125   % cd llvm/projects/test-suite/MultiSource/Benchmarks  # or some other level
126   % make TEST=dbgopt
128 This will test impact of debugging information on optimization passes.  If
129 debugging information influences optimization passes then it will be reported
130 as a failure.  See :doc:`TestingGuide` for more information on LLVM test
131 infrastructure and how to run various tests.
133 .. _format:
135 Debugging information format
136 ============================
138 LLVM debugging information has been carefully designed to make it possible for
139 the optimizer to optimize the program and debugging information without
140 necessarily having to know anything about debugging information.  In
141 particular, the use of metadata avoids duplicated debugging information from
142 the beginning, and the global dead code elimination pass automatically deletes
143 debugging information for a function if it decides to delete the function.
145 To do this, most of the debugging information (descriptors for types,
146 variables, functions, source files, etc) is inserted by the language front-end
147 in the form of LLVM metadata.
149 Debug information is designed to be agnostic about the target debugger and
150 debugging information representation (e.g. DWARF/Stabs/etc).  It uses a generic
151 pass to decode the information that represents variables, types, functions,
152 namespaces, etc: this allows for arbitrary source-language semantics and
153 type-systems to be used, as long as there is a module written for the target
154 debugger to interpret the information.
156 To provide basic functionality, the LLVM debugger does have to make some
157 assumptions about the source-level language being debugged, though it keeps
158 these to a minimum.  The only common features that the LLVM debugger assumes
159 exist are `source files <LangRef.html#difile>`_, and `program objects
160 <LangRef.html#diglobalvariable>`_.  These abstract objects are used by a
161 debugger to form stack traces, show information about local variables, etc.
163 This section of the documentation first describes the representation aspects
164 common to any source-language.  :ref:`ccxx_frontend` describes the data layout
165 conventions used by the C and C++ front-ends.
167 Debug information descriptors are `specialized metadata nodes
168 <LangRef.html#specialized-metadata>`_, first-class subclasses of ``Metadata``.
170 .. _format_common_intrinsics:
172 Debugger intrinsic functions
173 ----------------------------
175 LLVM uses several intrinsic functions (name prefixed with "``llvm.dbg``") to
176 track source local variables through optimization and code generation.
178 ``llvm.dbg.declare``
179 ^^^^^^^^^^^^^^^^^^^^
181 .. code-block:: llvm
183   void @llvm.dbg.declare(metadata, metadata, metadata)
185 This intrinsic provides information about a local element (e.g., variable).
186 The first argument is metadata holding the address of variable, typically a
187 static alloca in the function entry block.  The second argument is a
188 `local variable <LangRef.html#dilocalvariable>`_ containing a description of
189 the variable.  The third argument is a `complex expression
190 <LangRef.html#diexpression>`_.  An `llvm.dbg.declare` intrinsic describes the
191 *address* of a source variable.
193 .. code-block:: text
195     %i.addr = alloca i32, align 4
196     call void @llvm.dbg.declare(metadata i32* %i.addr, metadata !1,
197                                 metadata !DIExpression()), !dbg !2
198     !1 = !DILocalVariable(name: "i", ...) ; int i
199     !2 = !DILocation(...)
200     ...
201     %buffer = alloca [256 x i8], align 8
202     ; The address of i is buffer+64.
203     call void @llvm.dbg.declare(metadata [256 x i8]* %buffer, metadata !3,
204                                metadata !DIExpression(DW_OP_plus, 64)), !dbg !4
205     !3 = !DILocalVariable(name: "i", ...) ; int i
206     !4 = !DILocation(...)
208 A frontend should generate exactly one call to ``llvm.dbg.declare`` at the point
209 of declaration of a source variable. Optimization passes that fully promote the
210 variable from memory to SSA values will replace this call with possibly multiple
211 calls to `llvm.dbg.value`. Passes that delete stores are effectively partial
212 promotion, and they will insert a mix of calls to ``llvm.dbg.value`` to track
213 the source variable value when it is available. After optimization, there may be
214 multiple calls to ``llvm.dbg.declare`` describing the program points where the
215 variables lives in memory. All calls for the same concrete source variable must
216 agree on the memory location.
219 ``llvm.dbg.value``
220 ^^^^^^^^^^^^^^^^^^
222 .. code-block:: llvm
224   void @llvm.dbg.value(metadata, metadata, metadata)
226 This intrinsic provides information when a user source variable is set to a new
227 value.  The first argument is the new value (wrapped as metadata).  The second
228 argument is a `local variable <LangRef.html#dilocalvariable>`_ containing a
229 description of the variable.  The third argument is a `complex expression
230 <LangRef.html#diexpression>`_.
232 An `llvm.dbg.value` intrinsic describes the *value* of a source variable
233 directly, not its address.  Note that the value operand of this intrinsic may
234 be indirect (i.e, a pointer to the source variable), provided that interpreting
235 the complex expression derives the direct value.
237 ``llvm.dbg.assign``
238 ^^^^^^^^^^^^^^^^^^^
239 .. toctree::
240    :hidden:
242    AssignmentTracking
244 .. code-block:: llvm
246   void @llvm.dbg.assign(Value *Value,
247                         DIExpression *ValueExpression,
248                         DILocalVariable *Variable,
249                         DIAssignID *ID,
250                         Value *Address,
251                         DIExpression *AddressExpression)
253 This intrinsic marks the position in IR where a source assignment occurred. It
254 encodes the value of the variable. It references the store, if any, that
255 performs the assignment, and the destination address.
257 The first three arguments are the same as for an ``llvm.dbg.value``. The fourth
258 argument is a ``DIAssignID`` used to reference a store. The fifth is the
259 destination of the store (wrapped as metadata), and the sixth is a `complex
260 expression <LangRef.html#diexpression>`_ that modifies it.
262 The formal LLVM-IR signature is:
264 .. code-block:: llvm
266   void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata)
269 See :doc:`AssignmentTracking` for more info.
271 Object lifetimes and scoping
272 ============================
274 In many languages, the local variables in functions can have their lifetimes or
275 scopes limited to a subset of a function.  In the C family of languages, for
276 example, variables are only live (readable and writable) within the source
277 block that they are defined in.  In functional languages, values are only
278 readable after they have been defined.  Though this is a very obvious concept,
279 it is non-trivial to model in LLVM, because it has no notion of scoping in this
280 sense, and does not want to be tied to a language's scoping rules.
282 In order to handle this, the LLVM debug format uses the metadata attached to
283 llvm instructions to encode line number and scoping information.  Consider the
284 following C fragment, for example:
286 .. code-block:: c
288   1.  void foo() {
289   2.    int X = 21;
290   3.    int Y = 22;
291   4.    {
292   5.      int Z = 23;
293   6.      Z = X;
294   7.    }
295   8.    X = Y;
296   9.  }
298 Compiled to LLVM, this function would be represented like this:
300 .. code-block:: text
302   ; Function Attrs: nounwind ssp uwtable
303   define void @foo() #0 !dbg !4 {
304   entry:
305     %X = alloca i32, align 4
306     %Y = alloca i32, align 4
307     %Z = alloca i32, align 4
308     call void @llvm.dbg.declare(metadata i32* %X, metadata !11, metadata !13), !dbg !14
309     store i32 21, i32* %X, align 4, !dbg !14
310     call void @llvm.dbg.declare(metadata i32* %Y, metadata !15, metadata !13), !dbg !16
311     store i32 22, i32* %Y, align 4, !dbg !16
312     call void @llvm.dbg.declare(metadata i32* %Z, metadata !17, metadata !13), !dbg !19
313     store i32 23, i32* %Z, align 4, !dbg !19
314     %0 = load i32, i32* %X, align 4, !dbg !20
315     store i32 %0, i32* %Z, align 4, !dbg !21
316     %1 = load i32, i32* %Y, align 4, !dbg !22
317     store i32 %1, i32* %X, align 4, !dbg !23
318     ret void, !dbg !24
319   }
321   ; Function Attrs: nounwind readnone
322   declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
324   attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
325   attributes #1 = { nounwind readnone }
327   !llvm.dbg.cu = !{!0}
328   !llvm.module.flags = !{!7, !8, !9}
329   !llvm.ident = !{!10}
331   !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)
332   !1 = !DIFile(filename: "/dev/stdin", directory: "/Users/dexonsmith/data/llvm/debug-info")
333   !2 = !{}
334   !3 = !{!4}
335   !4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, retainedNodes: !2)
336   !5 = !DISubroutineType(types: !6)
337   !6 = !{null}
338   !7 = !{i32 2, !"Dwarf Version", i32 2}
339   !8 = !{i32 2, !"Debug Info Version", i32 3}
340   !9 = !{i32 1, !"PIC Level", i32 2}
341   !10 = !{!"clang version 3.7.0 (trunk 231150) (llvm/trunk 231154)"}
342   !11 = !DILocalVariable(name: "X", scope: !4, file: !1, line: 2, type: !12)
343   !12 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
344   !13 = !DIExpression()
345   !14 = !DILocation(line: 2, column: 9, scope: !4)
346   !15 = !DILocalVariable(name: "Y", scope: !4, file: !1, line: 3, type: !12)
347   !16 = !DILocation(line: 3, column: 9, scope: !4)
348   !17 = !DILocalVariable(name: "Z", scope: !18, file: !1, line: 5, type: !12)
349   !18 = distinct !DILexicalBlock(scope: !4, file: !1, line: 4, column: 5)
350   !19 = !DILocation(line: 5, column: 11, scope: !18)
351   !20 = !DILocation(line: 6, column: 11, scope: !18)
352   !21 = !DILocation(line: 6, column: 9, scope: !18)
353   !22 = !DILocation(line: 8, column: 9, scope: !4)
354   !23 = !DILocation(line: 8, column: 7, scope: !4)
355   !24 = !DILocation(line: 9, column: 3, scope: !4)
358 This example illustrates a few important details about LLVM debugging
359 information.  In particular, it shows how the ``llvm.dbg.declare`` intrinsic and
360 location information, which are attached to an instruction, are applied
361 together to allow a debugger to analyze the relationship between statements,
362 variable definitions, and the code used to implement the function.
364 .. code-block:: llvm
366   call void @llvm.dbg.declare(metadata i32* %X, metadata !11, metadata !13), !dbg !14
367     ; [debug line = 2:7] [debug variable = X]
369 The first intrinsic ``%llvm.dbg.declare`` encodes debugging information for the
370 variable ``X``.  The metadata ``!dbg !14`` attached to the intrinsic provides
371 scope information for the variable ``X``.
373 .. code-block:: text
375   !14 = !DILocation(line: 2, column: 9, scope: !4)
376   !4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5,
377                               isLocal: false, isDefinition: true, scopeLine: 1,
378                               isOptimized: false, retainedNodes: !2)
380 Here ``!14`` is metadata providing `location information
381 <LangRef.html#dilocation>`_.  In this example, scope is encoded by ``!4``, a
382 `subprogram descriptor <LangRef.html#disubprogram>`_.  This way the location
383 information attached to the intrinsics indicates that the variable ``X`` is
384 declared at line number 2 at a function level scope in function ``foo``.
386 Now lets take another example.
388 .. code-block:: llvm
390   call void @llvm.dbg.declare(metadata i32* %Z, metadata !17, metadata !13), !dbg !19
391     ; [debug line = 5:9] [debug variable = Z]
393 The third intrinsic ``%llvm.dbg.declare`` encodes debugging information for
394 variable ``Z``.  The metadata ``!dbg !19`` attached to the intrinsic provides
395 scope information for the variable ``Z``.
397 .. code-block:: text
399   !18 = distinct !DILexicalBlock(scope: !4, file: !1, line: 4, column: 5)
400   !19 = !DILocation(line: 5, column: 11, scope: !18)
402 Here ``!19`` indicates that ``Z`` is declared at line number 5 and column
403 number 11 inside of lexical scope ``!18``.  The lexical scope itself resides
404 inside of subprogram ``!4`` described above.
406 The scope information attached with each instruction provides a straightforward
407 way to find instructions covered by a scope.
409 Object lifetime in optimized code
410 =================================
412 In the example above, every variable assignment uniquely corresponds to a
413 memory store to the variable's position on the stack. However in heavily
414 optimized code LLVM promotes most variables into SSA values, which can
415 eventually be placed in physical registers or memory locations. To track SSA
416 values through compilation, when objects are promoted to SSA values an
417 ``llvm.dbg.value`` intrinsic is created for each assignment, recording the
418 variable's new location. Compared with the ``llvm.dbg.declare`` intrinsic:
420 * A dbg.value terminates the effect of any preceding dbg.values for (any
421   overlapping fragments of) the specified variable.
422 * The dbg.value's position in the IR defines where in the instruction stream
423   the variable's value changes.
424 * Operands can be constants, indicating the variable is assigned a
425   constant value.
427 Care must be taken to update ``llvm.dbg.value`` intrinsics when optimization
428 passes alter or move instructions and blocks -- the developer could observe such
429 changes reflected in the value of variables when debugging the program. For any
430 execution of the optimized program, the set of variable values presented to the
431 developer by the debugger should not show a state that would never have existed
432 in the execution of the unoptimized program, given the same input. Doing so
433 risks misleading the developer by reporting a state that does not exist,
434 damaging their understanding of the optimized program and undermining their
435 trust in the debugger.
437 Sometimes perfectly preserving variable locations is not possible, often when a
438 redundant calculation is optimized out. In such cases, a ``llvm.dbg.value``
439 with operand ``poison`` should be used, to terminate earlier variable locations
440 and let the debugger present ``optimized out`` to the developer. Withholding
441 these potentially stale variable values from the developer diminishes the
442 amount of available debug information, but increases the reliability of the
443 remaining information.
445 To illustrate some potential issues, consider the following example:
447 .. code-block:: llvm
449   define i32 @foo(i32 %bar, i1 %cond) {
450   entry:
451     call @llvm.dbg.value(metadata i32 0, metadata !1, metadata !2)
452     br i1 %cond, label %truebr, label %falsebr
453   truebr:
454     %tval = add i32 %bar, 1
455     call @llvm.dbg.value(metadata i32 %tval, metadata !1, metadata !2)
456     %g1 = call i32 @gazonk()
457     br label %exit
458   falsebr:
459     %fval = add i32 %bar, 2
460     call @llvm.dbg.value(metadata i32 %fval, metadata !1, metadata !2)
461     %g2 = call i32 @gazonk()
462     br label %exit
463   exit:
464     %merge = phi [ %tval, %truebr ], [ %fval, %falsebr ]
465     %g = phi [ %g1, %truebr ], [ %g2, %falsebr ]
466     call @llvm.dbg.value(metadata i32 %merge, metadata !1, metadata !2)
467     call @llvm.dbg.value(metadata i32 %g, metadata !3, metadata !2)
468     %plusten = add i32 %merge, 10
469     %toret = add i32 %plusten, %g
470     call @llvm.dbg.value(metadata i32 %toret, metadata !1, metadata !2)
471     ret i32 %toret
472   }
474 Containing two source-level variables in ``!1`` and ``!3``. The function could,
475 perhaps, be optimized into the following code:
477 .. code-block:: llvm
479   define i32 @foo(i32 %bar, i1 %cond) {
480   entry:
481     %g = call i32 @gazonk()
482     %addoper = select i1 %cond, i32 11, i32 12
483     %plusten = add i32 %bar, %addoper
484     %toret = add i32 %plusten, %g
485     ret i32 %toret
486   }
488 What ``llvm.dbg.value`` intrinsics should be placed to represent the original variable
489 locations in this code? Unfortunately the second, third and fourth
490 dbg.values for ``!1`` in the source function have had their operands
491 (%tval, %fval, %merge) optimized out. Assuming we cannot recover them, we
492 might consider this placement of dbg.values:
494 .. code-block:: llvm
496   define i32 @foo(i32 %bar, i1 %cond) {
497   entry:
498     call @llvm.dbg.value(metadata i32 0, metadata !1, metadata !2)
499     %g = call i32 @gazonk()
500     call @llvm.dbg.value(metadata i32 %g, metadata !3, metadata !2)
501     %addoper = select i1 %cond, i32 11, i32 12
502     %plusten = add i32 %bar, %addoper
503     %toret = add i32 %plusten, %g
504     call @llvm.dbg.value(metadata i32 %toret, metadata !1, metadata !2)
505     ret i32 %toret
506   }
508 However, this will cause ``!3`` to have the return value of ``@gazonk()`` at
509 the same time as ``!1`` has the constant value zero -- a pair of assignments
510 that never occurred in the unoptimized program. To avoid this, we must terminate
511 the range that ``!1`` has the constant value assignment by inserting a poison
512 dbg.value before the dbg.value for ``!3``:
514 .. code-block:: llvm
516   define i32 @foo(i32 %bar, i1 %cond) {
517   entry:
518     call @llvm.dbg.value(metadata i32 0, metadata !1, metadata !2)
519     %g = call i32 @gazonk()
520     call @llvm.dbg.value(metadata i32 poison, metadata !1, metadata !2)
521     call @llvm.dbg.value(metadata i32 %g, metadata !3, metadata !2)
522     %addoper = select i1 %cond, i32 11, i32 12
523     %plusten = add i32 %bar, %addoper
524     %toret = add i32 %plusten, %g
525     call @llvm.dbg.value(metadata i32 %toret, metadata !1, metadata !2)
526     ret i32 %toret
527   }
529 There are a few other dbg.value configurations that mean it terminates
530 dominating location definitions without adding a new location. The complete
531 list is:
533 * Any location operand is ``poison`` (or ``undef``).
534 * Any location operand is an empty metadata tuple (``!{}``) (which cannot
535   occur in a ``!DIArgList``).
536 * There are no location operands (empty ``DIArgList``) and the ``DIExpression``
537   is empty.
539 This class of dbg.value that kills variable locations is called a "kill
540 dbg.value" or "kill location", and for legacy reasons the term "undef
541 dbg.value" may be used in existing code. The ``DbgVariableIntrinsic`` methods
542 ``isKillLocation`` and ``setKillLocation`` should be used where possible rather
543 than inspecting location operands directly to check or set whether a dbg.value
544 is a kill location.
546 In general, if any dbg.value has its operand optimized out and cannot be
547 recovered, then a kill dbg.value is necessary to terminate earlier variable
548 locations. Additional kill dbg.values may be necessary when the debugger can
549 observe re-ordering of assignments.
551 How variable location metadata is transformed during CodeGen
552 ============================================================
554 LLVM preserves debug information throughout mid-level and backend passes,
555 ultimately producing a mapping between source-level information and
556 instruction ranges. This
557 is relatively straightforwards for line number information, as mapping
558 instructions to line numbers is a simple association. For variable locations
559 however the story is more complex. As each ``llvm.dbg.value`` intrinsic
560 represents a source-level assignment of a value to a source variable, the
561 variable location intrinsics effectively embed a small imperative program
562 within the LLVM IR. By the end of CodeGen, this becomes a mapping from each
563 variable to their machine locations over ranges of instructions.
564 From IR to object emission, the major transformations which affect variable
565 location fidelity are:
567 1. Instruction Selection
568 2. Register allocation
569 3. Block layout
571 each of which are discussed below. In addition, instruction scheduling can
572 significantly change the ordering of the program, and occurs in a number of
573 different passes.
575 Some variable locations are not transformed during CodeGen. Stack locations
576 specified by ``llvm.dbg.declare`` are valid and unchanging for the entire
577 duration of the function, and are recorded in a simple MachineFunction table.
578 Location changes in the prologue and epilogue of a function are also ignored:
579 frame setup and destruction may take several instructions, require a
580 disproportionate amount of debugging information in the output binary to
581 describe, and should be stepped over by debuggers anyway.
583 Variable locations in Instruction Selection and MIR
584 ---------------------------------------------------
586 Instruction selection creates a MIR function from an IR function, and just as
587 it transforms ``intermediate`` instructions into machine instructions, so must
588 ``intermediate`` variable locations become machine variable locations.
589 Within IR, variable locations are always identified by a Value, but in MIR
590 there can be different types of variable locations. In addition, some IR
591 locations become unavailable, for example if the operation of multiple IR
592 instructions are combined into one machine instruction (such as
593 multiply-and-accumulate) then intermediate Values are lost. To track variable
594 locations through instruction selection, they are first separated into
595 locations that do not depend on code generation (constants, stack locations,
596 allocated virtual registers) and those that do. For those that do, debug
597 metadata is attached to SDNodes in SelectionDAGs. After instruction selection
598 has occurred and a MIR function is created, if the SDNode associated with debug
599 metadata is allocated a virtual register, that virtual register is used as the
600 variable location. If the SDNode is folded into a machine instruction or
601 otherwise transformed into a non-register, the variable location becomes
602 unavailable.
604 Locations that are unavailable are treated as if they have been optimized out:
605 in IR the location would be assigned ``undef`` by a debug intrinsic, and in MIR
606 the equivalent location is used.
608 After MIR locations are assigned to each variable, machine pseudo-instructions
609 corresponding to each ``llvm.dbg.value`` intrinsic are inserted. There are two
610 forms of this type of instruction.
612 The first form, ``DBG_VALUE``, appears thus:
614 .. code-block:: text
616   DBG_VALUE %1, $noreg, !123, !DIExpression()
618 And has the following operands:
619  * The first operand can record the variable location as a register,
620    a frame index, an immediate, or the base address register if the original
621    debug intrinsic referred to memory. ``$noreg`` indicates the variable
622    location is undefined, equivalent to an ``undef`` dbg.value operand.
623  * The type of the second operand indicates whether the variable location is
624    directly referred to by the DBG_VALUE, or whether it is indirect. The
625    ``$noreg`` register signifies the former, an immediate operand (0) the
626    latter.
627  * Operand 3 is the Variable field of the original debug intrinsic.
628  * Operand 4 is the Expression field of the original debug intrinsic.
630 The second form, ``DBG_VALUE_LIST``, appears thus:
632 .. code-block:: text
634   DBG_VALUE_LIST !123, !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus), %1, %2
636 And has the following operands:
637  * The first operand is the Variable field of the original debug intrinsic.
638  * The second operand is the Expression field of the original debug intrinsic.
639  * Any number of operands, from the 3rd onwards, record a sequence of variable
640    location operands, which may take any of the same values as the first
641    operand of the ``DBG_VALUE`` instruction above. These variable location
642    operands are inserted into the final DWARF Expression in positions indicated
643    by the DW_OP_LLVM_arg operator in the `DIExpression
644    <LangRef.html#diexpression>`_.
646 The position at which the DBG_VALUEs are inserted should correspond to the
647 positions of their matching ``llvm.dbg.value`` intrinsics in the IR block.  As
648 with optimization, LLVM aims to preserve the order in which variable
649 assignments occurred in the source program. However SelectionDAG performs some
650 instruction scheduling, which can reorder assignments (discussed below).
651 Function parameter locations are moved to the beginning of the function if
652 they're not already, to ensure they're immediately available on function entry.
654 To demonstrate variable locations during instruction selection, consider
655 the following example:
657 .. code-block:: llvm
659   define i32 @foo(i32* %addr) {
660   entry:
661     call void @llvm.dbg.value(metadata i32 0, metadata !3, metadata !DIExpression()), !dbg !5
662     br label %bb1, !dbg !5
664   bb1:                                              ; preds = %bb1, %entry
665     %bar.0 = phi i32 [ 0, %entry ], [ %add, %bb1 ]
666     call void @llvm.dbg.value(metadata i32 %bar.0, metadata !3, metadata !DIExpression()), !dbg !5
667     %addr1 = getelementptr i32, i32 *%addr, i32 1, !dbg !5
668     call void @llvm.dbg.value(metadata i32 *%addr1, metadata !3, metadata !DIExpression()), !dbg !5
669     %loaded1 = load i32, i32* %addr1, !dbg !5
670     %addr2 = getelementptr i32, i32 *%addr, i32 %bar.0, !dbg !5
671     call void @llvm.dbg.value(metadata i32 *%addr2, metadata !3, metadata !DIExpression()), !dbg !5
672     %loaded2 = load i32, i32* %addr2, !dbg !5
673     %add = add i32 %bar.0, 1, !dbg !5
674     call void @llvm.dbg.value(metadata i32 %add, metadata !3, metadata !DIExpression()), !dbg !5
675     %added = add i32 %loaded1, %loaded2
676     %cond = icmp ult i32 %added, %bar.0, !dbg !5
677     br i1 %cond, label %bb1, label %bb2, !dbg !5
679   bb2:                                              ; preds = %bb1
680     ret i32 0, !dbg !5
681   }
683 If one compiles this IR with ``llc -o - -start-after=codegen-prepare -stop-after=expand-isel-pseudos -mtriple=x86_64--``, the following MIR is produced:
685 .. code-block:: text
687   bb.0.entry:
688     successors: %bb.1(0x80000000)
689     liveins: $rdi
691     %2:gr64 = COPY $rdi
692     %3:gr32 = MOV32r0 implicit-def dead $eflags
693     DBG_VALUE 0, $noreg, !3, !DIExpression(), debug-location !5
695   bb.1.bb1:
696     successors: %bb.1(0x7c000000), %bb.2(0x04000000)
698     %0:gr32 = PHI %3, %bb.0, %1, %bb.1
699     DBG_VALUE %0, $noreg, !3, !DIExpression(), debug-location !5
700     DBG_VALUE %2, $noreg, !3, !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value), debug-location !5
701     %4:gr32 = MOV32rm %2, 1, $noreg, 4, $noreg, debug-location !5 :: (load 4 from %ir.addr1)
702     %5:gr64_nosp = MOVSX64rr32 %0, debug-location !5
703     DBG_VALUE $noreg, $noreg, !3, !DIExpression(), debug-location !5
704     %1:gr32 = INC32r %0, implicit-def dead $eflags, debug-location !5
705     DBG_VALUE %1, $noreg, !3, !DIExpression(), debug-location !5
706     %6:gr32 = ADD32rm %4, %2, 4, killed %5, 0, $noreg, implicit-def dead $eflags :: (load 4 from %ir.addr2)
707     %7:gr32 = SUB32rr %6, %0, implicit-def $eflags, debug-location !5
708     JB_1 %bb.1, implicit $eflags, debug-location !5
709     JMP_1 %bb.2, debug-location !5
711   bb.2.bb2:
712     %8:gr32 = MOV32r0 implicit-def dead $eflags
713     $eax = COPY %8, debug-location !5
714     RET 0, $eax, debug-location !5
716 Observe first that there is a DBG_VALUE instruction for every ``llvm.dbg.value``
717 intrinsic in the source IR, ensuring no source level assignments go missing.
718 Then consider the different ways in which variable locations have been recorded:
720 * For the first dbg.value an immediate operand is used to record a zero value.
721 * The dbg.value of the PHI instruction leads to a DBG_VALUE of virtual register
722   ``%0``.
723 * The first GEP has its effect folded into the first load instruction
724   (as a 4-byte offset), but the variable location is salvaged by folding
725   the GEPs effect into the DIExpression.
726 * The second GEP is also folded into the corresponding load. However, it is
727   insufficiently simple to be salvaged, and is emitted as a ``$noreg``
728   DBG_VALUE, indicating that the variable takes on an undefined location.
729 * The final dbg.value has its Value placed in virtual register ``%1``.
731 Instruction Scheduling
732 ----------------------
734 A number of passes can reschedule instructions, notably instruction selection
735 and the pre-and-post RA machine schedulers. Instruction scheduling can
736 significantly change the nature of the program -- in the (very unlikely) worst
737 case the instruction sequence could be completely reversed. In such
738 circumstances LLVM follows the principle applied to optimizations, that it is
739 better for the debugger not to display any state than a misleading state.
740 Thus, whenever instructions are advanced in order of execution, any
741 corresponding DBG_VALUE is kept in its original position, and if an instruction
742 is delayed then the variable is given an undefined location for the duration
743 of the delay. To illustrate, consider this pseudo-MIR:
745 .. code-block:: text
747   %1:gr32 = MOV32rm %0, 1, $noreg, 4, $noreg, debug-location !5 :: (load 4 from %ir.addr1)
748   DBG_VALUE %1, $noreg, !1, !2
749   %4:gr32 = ADD32rr %3, %2, implicit-def dead $eflags
750   DBG_VALUE %4, $noreg, !3, !4
751   %7:gr32 = SUB32rr %6, %5, implicit-def dead $eflags
752   DBG_VALUE %7, $noreg, !5, !6
754 Imagine that the SUB32rr were moved forward to give us the following MIR:
756 .. code-block:: text
758   %7:gr32 = SUB32rr %6, %5, implicit-def dead $eflags
759   %1:gr32 = MOV32rm %0, 1, $noreg, 4, $noreg, debug-location !5 :: (load 4 from %ir.addr1)
760   DBG_VALUE %1, $noreg, !1, !2
761   %4:gr32 = ADD32rr %3, %2, implicit-def dead $eflags
762   DBG_VALUE %4, $noreg, !3, !4
763   DBG_VALUE %7, $noreg, !5, !6
765 In this circumstance LLVM would leave the MIR as shown above. Were we to move
766 the DBG_VALUE of virtual register %7 upwards with the SUB32rr, we would re-order
767 assignments and introduce a new state of the program. Whereas with the solution
768 above, the debugger will see one fewer combination of variable values, because
769 ``!3`` and ``!5`` will change value at the same time. This is preferred over
770 misrepresenting the original program.
772 In comparison, if one sunk the MOV32rm, LLVM would produce the following:
774 .. code-block:: text
776   DBG_VALUE $noreg, $noreg, !1, !2
777   %4:gr32 = ADD32rr %3, %2, implicit-def dead $eflags
778   DBG_VALUE %4, $noreg, !3, !4
779   %7:gr32 = SUB32rr %6, %5, implicit-def dead $eflags
780   DBG_VALUE %7, $noreg, !5, !6
781   %1:gr32 = MOV32rm %0, 1, $noreg, 4, $noreg, debug-location !5 :: (load 4 from %ir.addr1)
782   DBG_VALUE %1, $noreg, !1, !2
784 Here, to avoid presenting a state in which the first assignment to ``!1``
785 disappears, the DBG_VALUE at the top of the block assigns the variable the
786 undefined location, until its value is available at the end of the block where
787 an additional DBG_VALUE is added. Were any other DBG_VALUE for ``!1`` to occur
788 in the instructions that the MOV32rm was sunk past, the DBG_VALUE for ``%1``
789 would be dropped and the debugger would never observe it in the variable. This
790 accurately reflects that the value is not available during the corresponding
791 portion of the original program.
793 Variable locations during Register Allocation
794 ---------------------------------------------
796 To avoid debug instructions interfering with the register allocator, the
797 LiveDebugVariables pass extracts variable locations from a MIR function and
798 deletes the corresponding DBG_VALUE instructions. Some localized copy
799 propagation is performed within blocks. After register allocation, the
800 VirtRegRewriter pass re-inserts DBG_VALUE instructions in their original
801 positions, translating virtual register references into their physical
802 machine locations. To avoid encoding incorrect variable locations, in this
803 pass any DBG_VALUE of a virtual register that is not live, is replaced by
804 the undefined location. The LiveDebugVariables may insert redundant DBG_VALUEs
805 because of virtual register rewriting. These will be subsequently removed by
806 the RemoveRedundantDebugValues pass.
808 LiveDebugValues expansion of variable locations
809 -----------------------------------------------
811 After all optimizations have run and shortly before emission, the
812 LiveDebugValues pass runs to achieve two aims:
814 * To propagate the location of variables through copies and register spills,
815 * For every block, to record every valid variable location in that block.
817 After this pass the DBG_VALUE instruction changes meaning: rather than
818 corresponding to a source-level assignment where the variable may change value,
819 it asserts the location of a variable in a block, and loses effect outside the
820 block. Propagating variable locations through copies and spills is
821 straightforwards: determining the variable location in every basic block
822 requires the consideration of control flow. Consider the following IR, which
823 presents several difficulties:
825 .. code-block:: text
827   define dso_local i32 @foo(i1 %cond, i32 %input) !dbg !12 {
828   entry:
829     br i1 %cond, label %truebr, label %falsebr
831   bb1:
832     %value = phi i32 [ %value1, %truebr ], [ %value2, %falsebr ]
833     br label %exit, !dbg !26
835   truebr:
836     call void @llvm.dbg.value(metadata i32 %input, metadata !30, metadata !DIExpression()), !dbg !24
837     call void @llvm.dbg.value(metadata i32 1, metadata !23, metadata !DIExpression()), !dbg !24
838     %value1 = add i32 %input, 1
839     br label %bb1
841   falsebr:
842     call void @llvm.dbg.value(metadata i32 %input, metadata !30, metadata !DIExpression()), !dbg !24
843     call void @llvm.dbg.value(metadata i32 2, metadata !23, metadata !DIExpression()), !dbg !24
844     %value2 = add i32 %input, 2
845     br label %bb1
847   exit:
848     ret i32 %value, !dbg !30
849   }
851 Here the difficulties are:
853 * The control flow is roughly the opposite of basic block order
854 * The value of the ``!23`` variable merges into ``%bb1``, but there is no PHI
855   node
857 As mentioned above, the ``llvm.dbg.value`` intrinsics essentially form an
858 imperative program embedded in the IR, with each intrinsic defining a variable
859 location. This *could* be converted to an SSA form by mem2reg, in the same way
860 that it uses use-def chains to identify control flow merges and insert phi
861 nodes for IR Values. However, because debug variable locations are defined for
862 every machine instruction, in effect every IR instruction uses every variable
863 location, which would lead to a large number of debugging intrinsics being
864 generated.
866 Examining the example above, variable ``!30`` is assigned ``%input`` on both
867 conditional paths through the function, while ``!23`` is assigned differing
868 constant values on either path. Where control flow merges in ``%bb1`` we would
869 want ``!30`` to keep its location (``%input``), but ``!23`` to become undefined
870 as we cannot determine at runtime what value it should have in %bb1 without
871 inserting a PHI node. mem2reg does not insert the PHI node to avoid changing
872 codegen when debugging is enabled, and does not insert the other dbg.values
873 to avoid adding very large numbers of intrinsics.
875 Instead, LiveDebugValues determines variable locations when control
876 flow merges. A dataflow analysis is used to propagate locations between blocks:
877 when control flow merges, if a variable has the same location in all
878 predecessors then that location is propagated into the successor. If the
879 predecessor locations disagree, the location becomes undefined.
881 Once LiveDebugValues has run, every block should have all valid variable
882 locations described by DBG_VALUE instructions within the block. Very little
883 effort is then required by supporting classes (such as
884 DbgEntityHistoryCalculator) to build a map of each instruction to every
885 valid variable location, without the need to consider control flow. From
886 the example above, it is otherwise difficult to determine that the location
887 of variable ``!30`` should flow "up" into block ``%bb1``, but that the location
888 of variable ``!23`` should not flow "down" into the ``%exit`` block.
890 .. _ccxx_frontend:
892 C/C++ front-end specific debug information
893 ==========================================
895 The C and C++ front-ends represent information about the program in a
896 format that is effectively identical to `DWARF <http://www.dwarfstd.org/>`_
897 in terms of information content.  This allows code generators to
898 trivially support native debuggers by generating standard dwarf
899 information, and contains enough information for non-dwarf targets to
900 translate it as needed.
902 This section describes the forms used to represent C and C++ programs.  Other
903 languages could pattern themselves after this (which itself is tuned to
904 representing programs in the same way that DWARF does), or they could choose
905 to provide completely different forms if they don't fit into the DWARF model.
906 As support for debugging information gets added to the various LLVM
907 source-language front-ends, the information used should be documented here.
909 The following sections provide examples of a few C/C++ constructs and
910 the debug information that would best describe those constructs.  The
911 canonical references are the ``DINode`` classes defined in
912 ``include/llvm/IR/DebugInfoMetadata.h`` and the implementations of the
913 helper functions in ``lib/IR/DIBuilder.cpp``.
915 C/C++ source file information
916 -----------------------------
918 ``llvm::Instruction`` provides easy access to metadata attached with an
919 instruction.  One can extract line number information encoded in LLVM IR using
920 ``Instruction::getDebugLoc()`` and ``DILocation::getLine()``.
922 .. code-block:: c++
924   if (DILocation *Loc = I->getDebugLoc()) { // Here I is an LLVM instruction
925     unsigned Line = Loc->getLine();
926     StringRef File = Loc->getFilename();
927     StringRef Dir = Loc->getDirectory();
928     bool ImplicitCode = Loc->isImplicitCode();
929   }
931 When the flag ImplicitCode is true then it means that the Instruction has been
932 added by the front-end but doesn't correspond to source code written by the user. For example
934 .. code-block:: c++
936   if (MyBoolean) {
937     MyObject MO;
938     ...
939   }
941 At the end of the scope the MyObject's destructor is called but it isn't written
942 explicitly. This information is useful to avoid to have counters on brackets when
943 making code coverage.
945 C/C++ global variable information
946 ---------------------------------
948 Given an integer global variable declared as follows:
950 .. code-block:: c
952   _Alignas(8) int MyGlobal = 100;
954 a C/C++ front-end would generate the following descriptors:
956 .. code-block:: text
958   ;;
959   ;; Define the global itself.
960   ;;
961   @MyGlobal = global i32 100, align 8, !dbg !0
963   ;;
964   ;; List of debug info of globals
965   ;;
966   !llvm.dbg.cu = !{!1}
968   ;; Some unrelated metadata.
969   !llvm.module.flags = !{!6, !7}
970   !llvm.ident = !{!8}
972   ;; Define the global variable itself
973   !0 = distinct !DIGlobalVariable(name: "MyGlobal", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true, align: 64)
975   ;; Define the compile unit.
976   !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2,
977                                producer: "clang version 4.0.0",
978                                isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug,
979                                enums: !3, globals: !4)
981   ;;
982   ;; Define the file
983   ;;
984   !2 = !DIFile(filename: "/dev/stdin",
985                directory: "/Users/dexonsmith/data/llvm/debug-info")
987   ;; An empty array.
988   !3 = !{}
990   ;; The Array of Global Variables
991   !4 = !{!0}
993   ;;
994   ;; Define the type
995   ;;
996   !5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
998   ;; Dwarf version to output.
999   !6 = !{i32 2, !"Dwarf Version", i32 4}
1001   ;; Debug info schema version.
1002   !7 = !{i32 2, !"Debug Info Version", i32 3}
1004   ;; Compiler identification
1005   !8 = !{!"clang version 4.0.0"}
1008 The align value in DIGlobalVariable description specifies variable alignment in
1009 case it was forced by C11 _Alignas(), C++11 alignas() keywords or compiler
1010 attribute __attribute__((aligned ())). In other case (when this field is missing)
1011 alignment is considered default. This is used when producing DWARF output
1012 for DW_AT_alignment value.
1014 C/C++ function information
1015 --------------------------
1017 Given a function declared as follows:
1019 .. code-block:: c
1021   int main(int argc, char *argv[]) {
1022     return 0;
1023   }
1025 a C/C++ front-end would generate the following descriptors:
1027 .. code-block:: text
1029   ;;
1030   ;; Define the anchor for subprograms.
1031   ;;
1032   !4 = !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !5,
1033                      isLocal: false, isDefinition: true, scopeLine: 1,
1034                      flags: DIFlagPrototyped, isOptimized: false,
1035                      retainedNodes: !2)
1037   ;;
1038   ;; Define the subprogram itself.
1039   ;;
1040   define i32 @main(i32 %argc, i8** %argv) !dbg !4 {
1041   ...
1042   }
1044 C++ specific debug information
1045 ==============================
1047 C++ special member functions information
1048 ----------------------------------------
1050 DWARF v5 introduces attributes defined to enhance debugging information of C++ programs. LLVM can generate (or omit) these appropriate DWARF attributes. In C++ a special member function Ctors, Dtors, Copy/Move Ctors, assignment operators can be declared with C++11 keyword deleted. This is represented in LLVM using spFlags value DISPFlagDeleted.
1052 Given a class declaration with copy constructor declared as deleted:
1054 .. code-block:: c
1056   class foo {
1057    public:
1058      foo(const foo&) = deleted;
1059   };
1061 A C++ frontend would generate following:
1063 .. code-block:: text
1065   !17 = !DISubprogram(name: "foo", scope: !11, file: !1, line: 5, type: !18, scopeLine: 5, flags: DIFlagPublic | DIFlagPrototyped, spFlags: DISPFlagDeleted)
1067 and this will produce an additional DWARF attribute as:
1069 .. code-block:: text
1071   DW_TAG_subprogram [7] *
1072     DW_AT_name [DW_FORM_strx1]    (indexed (00000006) string = "foo")
1073     DW_AT_decl_line [DW_FORM_data1]       (5)
1074     ...
1075     DW_AT_deleted [DW_FORM_flag_present]  (true)
1077 Fortran specific debug information
1078 ==================================
1080 Fortran function information
1081 ----------------------------
1083 There 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.
1085 .. code-block:: fortran
1087   elemental function elem_func(a)
1089 a Fortran front-end would generate the following descriptors:
1091 .. code-block:: text
1093   !11 = distinct !DISubprogram(name: "subroutine2", scope: !1, file: !1,
1094           line: 5, type: !8, scopeLine: 6,
1095           spFlags: DISPFlagDefinition | DISPFlagElemental, unit: !0,
1096           retainedNodes: !2)
1098 and this will materialize an additional DWARF attribute as:
1100 .. code-block:: text
1102   DW_TAG_subprogram [3]
1103      DW_AT_low_pc [DW_FORM_addr]     (0x0000000000000010 ".text")
1104      DW_AT_high_pc [DW_FORM_data4]   (0x00000001)
1105      ...
1106      DW_AT_elemental [DW_FORM_flag_present]  (true)
1108 There are a few DWARF tags defined to represent Fortran specific constructs i.e DW_TAG_string_type for representing Fortran character(n). In LLVM this is represented as DIStringType.
1110 .. code-block:: fortran
1112   character(len=*), intent(in) :: string
1114 a Fortran front-end would generate the following descriptors:
1116 .. code-block:: text
1118   !DILocalVariable(name: "string", arg: 1, scope: !10, file: !3, line: 4, type: !15)
1119   !DIStringType(name: "character(*)!2", stringLength: !16, stringLengthExpression: !DIExpression(), size: 32)
1121 A fortran deferred-length character can also contain the information of raw storage of the characters in addition to the length of the string. This information is encoded in the  stringLocationExpression field. Based on this information, DW_AT_data_location attribute is emitted in a DW_TAG_string_type debug info.
1123   !DIStringType(name: "character(*)!2", stringLengthExpression: !DIExpression(), stringLocationExpression: !DIExpression(DW_OP_push_object_address, DW_OP_deref), size: 32)
1125 and this will materialize in DWARF tags as:
1127 .. code-block:: text
1129    DW_TAG_string_type
1130                 DW_AT_name      ("character(*)!2")
1131                 DW_AT_string_length     (0x00000064)
1132    0x00000064:    DW_TAG_variable
1133                   DW_AT_location      (DW_OP_fbreg +16)
1134                   DW_AT_type  (0x00000083 "integer*8")
1135                   DW_AT_data_location (DW_OP_push_object_address, DW_OP_deref)
1136                   ...
1137                   DW_AT_artificial    (true)
1139 A Fortran front-end may need to generate a *trampoline* function to call a
1140 function defined in a different compilation unit. In this case, the front-end
1141 can emit the following descriptor for the trampoline function:
1143 .. code-block:: text
1145   !DISubprogram(name: "sub1_.t0p", linkageName: "sub1_.t0p", scope: !4, file: !4, type: !5, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !7, retainedNodes: !24, targetFuncName: "sub1_")
1147 The targetFuncName field is the name of the function that the trampoline
1148 calls. This descriptor results in the following DWARF tag:
1150 .. code-block:: text
1152   DW_TAG_subprogram
1153     ...
1154     DW_AT_linkage_name  ("sub1_.t0p")
1155     DW_AT_name  ("sub1_.t0p")
1156     DW_AT_trampoline    ("sub1_")
1158 Debugging information format
1159 ============================
1161 Debugging Information Extension for Objective C Properties
1162 ----------------------------------------------------------
1164 Introduction
1165 ^^^^^^^^^^^^
1167 Objective C provides a simpler way to declare and define accessor methods using
1168 declared properties.  The language provides features to declare a property and
1169 to let compiler synthesize accessor methods.
1171 The debugger lets developer inspect Objective C interfaces and their instance
1172 variables and class variables.  However, the debugger does not know anything
1173 about the properties defined in Objective C interfaces.  The debugger consumes
1174 information generated by compiler in DWARF format.  The format does not support
1175 encoding of Objective C properties.  This proposal describes DWARF extensions to
1176 encode Objective C properties, which the debugger can use to let developers
1177 inspect Objective C properties.
1179 Proposal
1180 ^^^^^^^^
1182 Objective C properties exist separately from class members.  A property can be
1183 defined only by "setter" and "getter" selectors, and be calculated anew on each
1184 access.  Or a property can just be a direct access to some declared ivar.
1185 Finally it can have an ivar "automatically synthesized" for it by the compiler,
1186 in which case the property can be referred to in user code directly using the
1187 standard C dereference syntax as well as through the property "dot" syntax, but
1188 there is no entry in the ``@interface`` declaration corresponding to this ivar.
1190 To facilitate debugging, these properties we will add a new DWARF TAG into the
1191 ``DW_TAG_structure_type`` definition for the class to hold the description of a
1192 given property, and a set of DWARF attributes that provide said description.
1193 The property tag will also contain the name and declared type of the property.
1195 If there is a related ivar, there will also be a DWARF property attribute placed
1196 in the ``DW_TAG_member`` DIE for that ivar referring back to the property TAG
1197 for that property.  And in the case where the compiler synthesizes the ivar
1198 directly, the compiler is expected to generate a ``DW_TAG_member`` for that
1199 ivar (with the ``DW_AT_artificial`` set to 1), whose name will be the name used
1200 to access this ivar directly in code, and with the property attribute pointing
1201 back to the property it is backing.
1203 The following examples will serve as illustration for our discussion:
1205 .. code-block:: objc
1207   @interface I1 {
1208     int n2;
1209   }
1211   @property int p1;
1212   @property int p2;
1213   @end
1215   @implementation I1
1216   @synthesize p1;
1217   @synthesize p2 = n2;
1218   @end
1220 This produces the following DWARF (this is a "pseudo dwarfdump" output):
1222 .. code-block:: none
1224   0x00000100:  TAG_structure_type [7] *
1225                  AT_APPLE_runtime_class( 0x10 )
1226                  AT_name( "I1" )
1227                  AT_decl_file( "Objc_Property.m" )
1228                  AT_decl_line( 3 )
1230   0x00000110    TAG_APPLE_property
1231                   AT_name ( "p1" )
1232                   AT_type ( {0x00000150} ( int ) )
1234   0x00000120:   TAG_APPLE_property
1235                   AT_name ( "p2" )
1236                   AT_type ( {0x00000150} ( int ) )
1238   0x00000130:   TAG_member [8]
1239                   AT_name( "_p1" )
1240                   AT_APPLE_property ( {0x00000110} "p1" )
1241                   AT_type( {0x00000150} ( int ) )
1242                   AT_artificial ( 0x1 )
1244   0x00000140:    TAG_member [8]
1245                    AT_name( "n2" )
1246                    AT_APPLE_property ( {0x00000120} "p2" )
1247                    AT_type( {0x00000150} ( int ) )
1249   0x00000150:  AT_type( ( int ) )
1251 Note, the current convention is that the name of the ivar for an
1252 auto-synthesized property is the name of the property from which it derives
1253 with an underscore prepended, as is shown in the example.  But we actually
1254 don't need to know this convention, since we are given the name of the ivar
1255 directly.
1257 Also, it is common practice in ObjC to have different property declarations in
1258 the @interface and @implementation - e.g. to provide a read-only property in
1259 the interface, and a read-write interface in the implementation.  In that case,
1260 the compiler should emit whichever property declaration will be in force in the
1261 current translation unit.
1263 Developers can decorate a property with attributes which are encoded using
1264 ``DW_AT_APPLE_property_attribute``.
1266 .. code-block:: objc
1268   @property (readonly, nonatomic) int pr;
1270 .. code-block:: none
1272   TAG_APPLE_property [8]
1273     AT_name( "pr" )
1274     AT_type ( {0x00000147} (int) )
1275     AT_APPLE_property_attribute (DW_APPLE_PROPERTY_readonly, DW_APPLE_PROPERTY_nonatomic)
1277 The setter and getter method names are attached to the property using
1278 ``DW_AT_APPLE_property_setter`` and ``DW_AT_APPLE_property_getter`` attributes.
1280 .. code-block:: objc
1282   @interface I1
1283   @property (setter=myOwnP3Setter:) int p3;
1284   -(void)myOwnP3Setter:(int)a;
1285   @end
1287   @implementation I1
1288   @synthesize p3;
1289   -(void)myOwnP3Setter:(int)a{ }
1290   @end
1292 The DWARF for this would be:
1294 .. code-block:: none
1296   0x000003bd: TAG_structure_type [7] *
1297                 AT_APPLE_runtime_class( 0x10 )
1298                 AT_name( "I1" )
1299                 AT_decl_file( "Objc_Property.m" )
1300                 AT_decl_line( 3 )
1302   0x000003cd      TAG_APPLE_property
1303                     AT_name ( "p3" )
1304                     AT_APPLE_property_setter ( "myOwnP3Setter:" )
1305                     AT_type( {0x00000147} ( int ) )
1307   0x000003f3:     TAG_member [8]
1308                     AT_name( "_p3" )
1309                     AT_type ( {0x00000147} ( int ) )
1310                     AT_APPLE_property ( {0x000003cd} )
1311                     AT_artificial ( 0x1 )
1313 New DWARF Tags
1314 ^^^^^^^^^^^^^^
1316 +-----------------------+--------+
1317 | TAG                   | Value  |
1318 +=======================+========+
1319 | DW_TAG_APPLE_property | 0x4200 |
1320 +-----------------------+--------+
1322 New DWARF Attributes
1323 ^^^^^^^^^^^^^^^^^^^^
1325 +--------------------------------+--------+-----------+
1326 | Attribute                      | Value  | Classes   |
1327 +================================+========+===========+
1328 | DW_AT_APPLE_property           | 0x3fed | Reference |
1329 +--------------------------------+--------+-----------+
1330 | DW_AT_APPLE_property_getter    | 0x3fe9 | String    |
1331 +--------------------------------+--------+-----------+
1332 | DW_AT_APPLE_property_setter    | 0x3fea | String    |
1333 +--------------------------------+--------+-----------+
1334 | DW_AT_APPLE_property_attribute | 0x3feb | Constant  |
1335 +--------------------------------+--------+-----------+
1337 New DWARF Constants
1338 ^^^^^^^^^^^^^^^^^^^
1340 +--------------------------------------+-------+
1341 | Name                                 | Value |
1342 +======================================+=======+
1343 | DW_APPLE_PROPERTY_readonly           | 0x01  |
1344 +--------------------------------------+-------+
1345 | DW_APPLE_PROPERTY_getter             | 0x02  |
1346 +--------------------------------------+-------+
1347 | DW_APPLE_PROPERTY_assign             | 0x04  |
1348 +--------------------------------------+-------+
1349 | DW_APPLE_PROPERTY_readwrite          | 0x08  |
1350 +--------------------------------------+-------+
1351 | DW_APPLE_PROPERTY_retain             | 0x10  |
1352 +--------------------------------------+-------+
1353 | DW_APPLE_PROPERTY_copy               | 0x20  |
1354 +--------------------------------------+-------+
1355 | DW_APPLE_PROPERTY_nonatomic          | 0x40  |
1356 +--------------------------------------+-------+
1357 | DW_APPLE_PROPERTY_setter             | 0x80  |
1358 +--------------------------------------+-------+
1359 | DW_APPLE_PROPERTY_atomic             | 0x100 |
1360 +--------------------------------------+-------+
1361 | DW_APPLE_PROPERTY_weak               | 0x200 |
1362 +--------------------------------------+-------+
1363 | DW_APPLE_PROPERTY_strong             | 0x400 |
1364 +--------------------------------------+-------+
1365 | DW_APPLE_PROPERTY_unsafe_unretained  | 0x800 |
1366 +--------------------------------------+-------+
1367 | DW_APPLE_PROPERTY_nullability        | 0x1000|
1368 +--------------------------------------+-------+
1369 | DW_APPLE_PROPERTY_null_resettable    | 0x2000|
1370 +--------------------------------------+-------+
1371 | DW_APPLE_PROPERTY_class              | 0x4000|
1372 +--------------------------------------+-------+
1374 Name Accelerator Tables
1375 -----------------------
1377 Introduction
1378 ^^^^^^^^^^^^
1380 The "``.debug_pubnames``" and "``.debug_pubtypes``" formats are not what a
1381 debugger needs.  The "``pub``" in the section name indicates that the entries
1382 in the table are publicly visible names only.  This means no static or hidden
1383 functions show up in the "``.debug_pubnames``".  No static variables or private
1384 class variables are in the "``.debug_pubtypes``".  Many compilers add different
1385 things to these tables, so we can't rely upon the contents between gcc, icc, or
1386 clang.
1388 The typical query given by users tends not to match up with the contents of
1389 these tables.  For example, the DWARF spec states that "In the case of the name
1390 of a function member or static data member of a C++ structure, class or union,
1391 the name presented in the "``.debug_pubnames``" section is not the simple name
1392 given by the ``DW_AT_name attribute`` of the referenced debugging information
1393 entry, but rather the fully qualified name of the data or function member."
1394 So the only names in these tables for complex C++ entries is a fully
1395 qualified name.  Debugger users tend not to enter their search strings as
1396 "``a::b::c(int,const Foo&) const``", but rather as "``c``", "``b::c``" , or
1397 "``a::b::c``".  So the name entered in the name table must be demangled in
1398 order to chop it up appropriately and additional names must be manually entered
1399 into the table to make it effective as a name lookup table for debuggers to
1400 use.
1402 All debuggers currently ignore the "``.debug_pubnames``" table as a result of
1403 its inconsistent and useless public-only name content making it a waste of
1404 space in the object file.  These tables, when they are written to disk, are not
1405 sorted in any way, leaving every debugger to do its own parsing and sorting.
1406 These tables also include an inlined copy of the string values in the table
1407 itself making the tables much larger than they need to be on disk, especially
1408 for large C++ programs.
1410 Can't we just fix the sections by adding all of the names we need to this
1411 table? No, because that is not what the tables are defined to contain and we
1412 won't know the difference between the old bad tables and the new good tables.
1413 At best we could make our own renamed sections that contain all of the data we
1414 need.
1416 These tables are also insufficient for what a debugger like LLDB needs.  LLDB
1417 uses clang for its expression parsing where LLDB acts as a PCH.  LLDB is then
1418 often asked to look for type "``foo``" or namespace "``bar``", or list items in
1419 namespace "``baz``".  Namespaces are not included in the pubnames or pubtypes
1420 tables.  Since clang asks a lot of questions when it is parsing an expression,
1421 we need to be very fast when looking up names, as it happens a lot.  Having new
1422 accelerator tables that are optimized for very quick lookups will benefit this
1423 type of debugging experience greatly.
1425 We would like to generate name lookup tables that can be mapped into memory
1426 from disk, and used as is, with little or no up-front parsing.  We would also
1427 be able to control the exact content of these different tables so they contain
1428 exactly what we need.  The Name Accelerator Tables were designed to fix these
1429 issues.  In order to solve these issues we need to:
1431 * Have a format that can be mapped into memory from disk and used as is
1432 * Lookups should be very fast
1433 * Extensible table format so these tables can be made by many producers
1434 * Contain all of the names needed for typical lookups out of the box
1435 * Strict rules for the contents of tables
1437 Table size is important and the accelerator table format should allow the reuse
1438 of strings from common string tables so the strings for the names are not
1439 duplicated.  We also want to make sure the table is ready to be used as-is by
1440 simply mapping the table into memory with minimal header parsing.
1442 The name lookups need to be fast and optimized for the kinds of lookups that
1443 debuggers tend to do.  Optimally we would like to touch as few parts of the
1444 mapped table as possible when doing a name lookup and be able to quickly find
1445 the name entry we are looking for, or discover there are no matches.  In the
1446 case of debuggers we optimized for lookups that fail most of the time.
1448 Each table that is defined should have strict rules on exactly what is in the
1449 accelerator tables and documented so clients can rely on the content.
1451 Hash Tables
1452 ^^^^^^^^^^^
1454 Standard Hash Tables
1455 """"""""""""""""""""
1457 Typical hash tables have a header, buckets, and each bucket points to the
1458 bucket contents:
1460 .. code-block:: none
1462   .------------.
1463   |  HEADER    |
1464   |------------|
1465   |  BUCKETS   |
1466   |------------|
1467   |  DATA      |
1468   `------------'
1470 The BUCKETS are an array of offsets to DATA for each hash:
1472 .. code-block:: none
1474   .------------.
1475   | 0x00001000 | BUCKETS[0]
1476   | 0x00002000 | BUCKETS[1]
1477   | 0x00002200 | BUCKETS[2]
1478   | 0x000034f0 | BUCKETS[3]
1479   |            | ...
1480   | 0xXXXXXXXX | BUCKETS[n_buckets]
1481   '------------'
1483 So for ``bucket[3]`` in the example above, we have an offset into the table
1484 0x000034f0 which points to a chain of entries for the bucket.  Each bucket must
1485 contain a next pointer, full 32 bit hash value, the string itself, and the data
1486 for the current string value.
1488 .. code-block:: none
1490               .------------.
1491   0x000034f0: | 0x00003500 | next pointer
1492               | 0x12345678 | 32 bit hash
1493               | "erase"    | string value
1494               | data[n]    | HashData for this bucket
1495               |------------|
1496   0x00003500: | 0x00003550 | next pointer
1497               | 0x29273623 | 32 bit hash
1498               | "dump"     | string value
1499               | data[n]    | HashData for this bucket
1500               |------------|
1501   0x00003550: | 0x00000000 | next pointer
1502               | 0x82638293 | 32 bit hash
1503               | "main"     | string value
1504               | data[n]    | HashData for this bucket
1505               `------------'
1507 The problem with this layout for debuggers is that we need to optimize for the
1508 negative lookup case where the symbol we're searching for is not present.  So
1509 if we were to lookup "``printf``" in the table above, we would make a 32-bit
1510 hash for "``printf``", it might match ``bucket[3]``.  We would need to go to
1511 the offset 0x000034f0 and start looking to see if our 32 bit hash matches.  To
1512 do so, we need to read the next pointer, then read the hash, compare it, and
1513 skip to the next bucket.  Each time we are skipping many bytes in memory and
1514 touching new pages just to do the compare on the full 32 bit hash.  All of
1515 these accesses then tell us that we didn't have a match.
1517 Name Hash Tables
1518 """"""""""""""""
1520 To solve the issues mentioned above we have structured the hash tables a bit
1521 differently: a header, buckets, an array of all unique 32 bit hash values,
1522 followed by an array of hash value data offsets, one for each hash value, then
1523 the data for all hash values:
1525 .. code-block:: none
1527   .-------------.
1528   |  HEADER     |
1529   |-------------|
1530   |  BUCKETS    |
1531   |-------------|
1532   |  HASHES     |
1533   |-------------|
1534   |  OFFSETS    |
1535   |-------------|
1536   |  DATA       |
1537   `-------------'
1539 The ``BUCKETS`` in the name tables are an index into the ``HASHES`` array.  By
1540 making all of the full 32 bit hash values contiguous in memory, we allow
1541 ourselves to efficiently check for a match while touching as little memory as
1542 possible.  Most often checking the 32 bit hash values is as far as the lookup
1543 goes.  If it does match, it usually is a match with no collisions.  So for a
1544 table with "``n_buckets``" buckets, and "``n_hashes``" unique 32 bit hash
1545 values, we can clarify the contents of the ``BUCKETS``, ``HASHES`` and
1546 ``OFFSETS`` as:
1548 .. code-block:: none
1550   .-------------------------.
1551   |  HEADER.magic           | uint32_t
1552   |  HEADER.version         | uint16_t
1553   |  HEADER.hash_function   | uint16_t
1554   |  HEADER.bucket_count    | uint32_t
1555   |  HEADER.hashes_count    | uint32_t
1556   |  HEADER.header_data_len | uint32_t
1557   |  HEADER_DATA            | HeaderData
1558   |-------------------------|
1559   |  BUCKETS                | uint32_t[n_buckets] // 32 bit hash indexes
1560   |-------------------------|
1561   |  HASHES                 | uint32_t[n_hashes] // 32 bit hash values
1562   |-------------------------|
1563   |  OFFSETS                | uint32_t[n_hashes] // 32 bit offsets to hash value data
1564   |-------------------------|
1565   |  ALL HASH DATA          |
1566   `-------------------------'
1568 So taking the exact same data from the standard hash example above we end up
1569 with:
1571 .. code-block:: none
1573               .------------.
1574               | HEADER     |
1575               |------------|
1576               |          0 | BUCKETS[0]
1577               |          2 | BUCKETS[1]
1578               |          5 | BUCKETS[2]
1579               |          6 | BUCKETS[3]
1580               |            | ...
1581               |        ... | BUCKETS[n_buckets]
1582               |------------|
1583               | 0x........ | HASHES[0]
1584               | 0x........ | HASHES[1]
1585               | 0x........ | HASHES[2]
1586               | 0x........ | HASHES[3]
1587               | 0x........ | HASHES[4]
1588               | 0x........ | HASHES[5]
1589               | 0x12345678 | HASHES[6]    hash for BUCKETS[3]
1590               | 0x29273623 | HASHES[7]    hash for BUCKETS[3]
1591               | 0x82638293 | HASHES[8]    hash for BUCKETS[3]
1592               | 0x........ | HASHES[9]
1593               | 0x........ | HASHES[10]
1594               | 0x........ | HASHES[11]
1595               | 0x........ | HASHES[12]
1596               | 0x........ | HASHES[13]
1597               | 0x........ | HASHES[n_hashes]
1598               |------------|
1599               | 0x........ | OFFSETS[0]
1600               | 0x........ | OFFSETS[1]
1601               | 0x........ | OFFSETS[2]
1602               | 0x........ | OFFSETS[3]
1603               | 0x........ | OFFSETS[4]
1604               | 0x........ | OFFSETS[5]
1605               | 0x000034f0 | OFFSETS[6]   offset for BUCKETS[3]
1606               | 0x00003500 | OFFSETS[7]   offset for BUCKETS[3]
1607               | 0x00003550 | OFFSETS[8]   offset for BUCKETS[3]
1608               | 0x........ | OFFSETS[9]
1609               | 0x........ | OFFSETS[10]
1610               | 0x........ | OFFSETS[11]
1611               | 0x........ | OFFSETS[12]
1612               | 0x........ | OFFSETS[13]
1613               | 0x........ | OFFSETS[n_hashes]
1614               |------------|
1615               |            |
1616               |            |
1617               |            |
1618               |            |
1619               |            |
1620               |------------|
1621   0x000034f0: | 0x00001203 | .debug_str ("erase")
1622               | 0x00000004 | A 32 bit array count - number of HashData with name "erase"
1623               | 0x........ | HashData[0]
1624               | 0x........ | HashData[1]
1625               | 0x........ | HashData[2]
1626               | 0x........ | HashData[3]
1627               | 0x00000000 | String offset into .debug_str (terminate data for hash)
1628               |------------|
1629   0x00003500: | 0x00001203 | String offset into .debug_str ("collision")
1630               | 0x00000002 | A 32 bit array count - number of HashData with name "collision"
1631               | 0x........ | HashData[0]
1632               | 0x........ | HashData[1]
1633               | 0x00001203 | String offset into .debug_str ("dump")
1634               | 0x00000003 | A 32 bit array count - number of HashData with name "dump"
1635               | 0x........ | HashData[0]
1636               | 0x........ | HashData[1]
1637               | 0x........ | HashData[2]
1638               | 0x00000000 | String offset into .debug_str (terminate data for hash)
1639               |------------|
1640   0x00003550: | 0x00001203 | String offset into .debug_str ("main")
1641               | 0x00000009 | A 32 bit array count - number of HashData with name "main"
1642               | 0x........ | HashData[0]
1643               | 0x........ | HashData[1]
1644               | 0x........ | HashData[2]
1645               | 0x........ | HashData[3]
1646               | 0x........ | HashData[4]
1647               | 0x........ | HashData[5]
1648               | 0x........ | HashData[6]
1649               | 0x........ | HashData[7]
1650               | 0x........ | HashData[8]
1651               | 0x00000000 | String offset into .debug_str (terminate data for hash)
1652               `------------'
1654 So we still have all of the same data, we just organize it more efficiently for
1655 debugger lookup.  If we repeat the same "``printf``" lookup from above, we
1656 would hash "``printf``" and find it matches ``BUCKETS[3]`` by taking the 32 bit
1657 hash value and modulo it by ``n_buckets``.  ``BUCKETS[3]`` contains "6" which
1658 is the index into the ``HASHES`` table.  We would then compare any consecutive
1659 32 bit hashes values in the ``HASHES`` array as long as the hashes would be in
1660 ``BUCKETS[3]``.  We do this by verifying that each subsequent hash value modulo
1661 ``n_buckets`` is still 3.  In the case of a failed lookup we would access the
1662 memory for ``BUCKETS[3]``, and then compare a few consecutive 32 bit hashes
1663 before we know that we have no match.  We don't end up marching through
1664 multiple words of memory and we really keep the number of processor data cache
1665 lines being accessed as small as possible.
1667 The string hash that is used for these lookup tables is the Daniel J.
1668 Bernstein hash which is also used in the ELF ``GNU_HASH`` sections.  It is a
1669 very good hash for all kinds of names in programs with very few hash
1670 collisions.
1672 Empty buckets are designated by using an invalid hash index of ``UINT32_MAX``.
1674 Details
1675 ^^^^^^^
1677 These name hash tables are designed to be generic where specializations of the
1678 table get to define additional data that goes into the header ("``HeaderData``"),
1679 how the string value is stored ("``KeyType``") and the content of the data for each
1680 hash value.
1682 Header Layout
1683 """""""""""""
1685 The header has a fixed part, and the specialized part.  The exact format of the
1686 header is:
1688 .. code-block:: c
1690   struct Header
1691   {
1692     uint32_t   magic;           // 'HASH' magic value to allow endian detection
1693     uint16_t   version;         // Version number
1694     uint16_t   hash_function;   // The hash function enumeration that was used
1695     uint32_t   bucket_count;    // The number of buckets in this hash table
1696     uint32_t   hashes_count;    // The total number of unique hash values and hash data offsets in this table
1697     uint32_t   header_data_len; // The bytes to skip to get to the hash indexes (buckets) for correct alignment
1698                                 // Specifically the length of the following HeaderData field - this does not
1699                                 // include the size of the preceding fields
1700     HeaderData header_data;     // Implementation specific header data
1701   };
1703 The header starts with a 32 bit "``magic``" value which must be ``'HASH'``
1704 encoded as an ASCII integer.  This allows the detection of the start of the
1705 hash table and also allows the table's byte order to be determined so the table
1706 can be correctly extracted.  The "``magic``" value is followed by a 16 bit
1707 ``version`` number which allows the table to be revised and modified in the
1708 future.  The current version number is 1. ``hash_function`` is a ``uint16_t``
1709 enumeration that specifies which hash function was used to produce this table.
1710 The current values for the hash function enumerations include:
1712 .. code-block:: c
1714   enum HashFunctionType
1715   {
1716     eHashFunctionDJB = 0u, // Daniel J Bernstein hash function
1717   };
1719 ``bucket_count`` is a 32 bit unsigned integer that represents how many buckets
1720 are in the ``BUCKETS`` array.  ``hashes_count`` is the number of unique 32 bit
1721 hash values that are in the ``HASHES`` array, and is the same number of offsets
1722 are contained in the ``OFFSETS`` array.  ``header_data_len`` specifies the size
1723 in bytes of the ``HeaderData`` that is filled in by specialized versions of
1724 this table.
1726 Fixed Lookup
1727 """"""""""""
1729 The header is followed by the buckets, hashes, offsets, and hash value data.
1731 .. code-block:: c
1733   struct FixedTable
1734   {
1735     uint32_t buckets[Header.bucket_count];  // An array of hash indexes into the "hashes[]" array below
1736     uint32_t hashes [Header.hashes_count];  // Every unique 32 bit hash for the entire table is in this table
1737     uint32_t offsets[Header.hashes_count];  // An offset that corresponds to each item in the "hashes[]" array above
1738   };
1740 ``buckets`` is an array of 32 bit indexes into the ``hashes`` array.  The
1741 ``hashes`` array contains all of the 32 bit hash values for all names in the
1742 hash table.  Each hash in the ``hashes`` table has an offset in the ``offsets``
1743 array that points to the data for the hash value.
1745 This table setup makes it very easy to repurpose these tables to contain
1746 different data, while keeping the lookup mechanism the same for all tables.
1747 This layout also makes it possible to save the table to disk and map it in
1748 later and do very efficient name lookups with little or no parsing.
1750 DWARF lookup tables can be implemented in a variety of ways and can store a lot
1751 of information for each name.  We want to make the DWARF tables extensible and
1752 able to store the data efficiently so we have used some of the DWARF features
1753 that enable efficient data storage to define exactly what kind of data we store
1754 for each name.
1756 The ``HeaderData`` contains a definition of the contents of each HashData chunk.
1757 We might want to store an offset to all of the debug information entries (DIEs)
1758 for each name.  To keep things extensible, we create a list of items, or
1759 Atoms, that are contained in the data for each name.  First comes the type of
1760 the data in each atom:
1762 .. code-block:: c
1764   enum AtomType
1765   {
1766     eAtomTypeNULL       = 0u,
1767     eAtomTypeDIEOffset  = 1u,   // DIE offset, check form for encoding
1768     eAtomTypeCUOffset   = 2u,   // DIE offset of the compiler unit header that contains the item in question
1769     eAtomTypeTag        = 3u,   // DW_TAG_xxx value, should be encoded as DW_FORM_data1 (if no tags exceed 255) or DW_FORM_data2
1770     eAtomTypeNameFlags  = 4u,   // Flags from enum NameFlags
1771     eAtomTypeTypeFlags  = 5u,   // Flags from enum TypeFlags
1772   };
1774 The enumeration values and their meanings are:
1776 .. code-block:: none
1778   eAtomTypeNULL       - a termination atom that specifies the end of the atom list
1779   eAtomTypeDIEOffset  - an offset into the .debug_info section for the DWARF DIE for this name
1780   eAtomTypeCUOffset   - an offset into the .debug_info section for the CU that contains the DIE
1781   eAtomTypeDIETag     - The DW_TAG_XXX enumeration value so you don't have to parse the DWARF to see what it is
1782   eAtomTypeNameFlags  - Flags for functions and global variables (isFunction, isInlined, isExternal...)
1783   eAtomTypeTypeFlags  - Flags for types (isCXXClass, isObjCClass, ...)
1785 Then we allow each atom type to define the atom type and how the data for each
1786 atom type data is encoded:
1788 .. code-block:: c
1790   struct Atom
1791   {
1792     uint16_t type;  // AtomType enum value
1793     uint16_t form;  // DWARF DW_FORM_XXX defines
1794   };
1796 The ``form`` type above is from the DWARF specification and defines the exact
1797 encoding of the data for the Atom type.  See the DWARF specification for the
1798 ``DW_FORM_`` definitions.
1800 .. code-block:: c
1802   struct HeaderData
1803   {
1804     uint32_t die_offset_base;
1805     uint32_t atom_count;
1806     Atoms    atoms[atom_count0];
1807   };
1809 ``HeaderData`` defines the base DIE offset that should be added to any atoms
1810 that are encoded using the ``DW_FORM_ref1``, ``DW_FORM_ref2``,
1811 ``DW_FORM_ref4``, ``DW_FORM_ref8`` or ``DW_FORM_ref_udata``.  It also defines
1812 what is contained in each ``HashData`` object -- ``Atom.form`` tells us how large
1813 each field will be in the ``HashData`` and the ``Atom.type`` tells us how this data
1814 should be interpreted.
1816 For the current implementations of the "``.apple_names``" (all functions +
1817 globals), the "``.apple_types``" (names of all types that are defined), and
1818 the "``.apple_namespaces``" (all namespaces), we currently set the ``Atom``
1819 array to be:
1821 .. code-block:: c
1823   HeaderData.atom_count = 1;
1824   HeaderData.atoms[0].type = eAtomTypeDIEOffset;
1825   HeaderData.atoms[0].form = DW_FORM_data4;
1827 This defines the contents to be the DIE offset (eAtomTypeDIEOffset) that is
1828 encoded as a 32 bit value (DW_FORM_data4).  This allows a single name to have
1829 multiple matching DIEs in a single file, which could come up with an inlined
1830 function for instance.  Future tables could include more information about the
1831 DIE such as flags indicating if the DIE is a function, method, block,
1832 or inlined.
1834 The KeyType for the DWARF table is a 32 bit string table offset into the
1835 ".debug_str" table.  The ".debug_str" is the string table for the DWARF which
1836 may already contain copies of all of the strings.  This helps make sure, with
1837 help from the compiler, that we reuse the strings between all of the DWARF
1838 sections and keeps the hash table size down.  Another benefit to having the
1839 compiler generate all strings as DW_FORM_strp in the debug info, is that
1840 DWARF parsing can be made much faster.
1842 After a lookup is made, we get an offset into the hash data.  The hash data
1843 needs to be able to deal with 32 bit hash collisions, so the chunk of data
1844 at the offset in the hash data consists of a triple:
1846 .. code-block:: c
1848   uint32_t str_offset
1849   uint32_t hash_data_count
1850   HashData[hash_data_count]
1852 If "str_offset" is zero, then the bucket contents are done. 99.9% of the
1853 hash data chunks contain a single item (no 32 bit hash collision):
1855 .. code-block:: none
1857   .------------.
1858   | 0x00001023 | uint32_t KeyType (.debug_str[0x0001023] => "main")
1859   | 0x00000004 | uint32_t HashData count
1860   | 0x........ | uint32_t HashData[0] DIE offset
1861   | 0x........ | uint32_t HashData[1] DIE offset
1862   | 0x........ | uint32_t HashData[2] DIE offset
1863   | 0x........ | uint32_t HashData[3] DIE offset
1864   | 0x00000000 | uint32_t KeyType (end of hash chain)
1865   `------------'
1867 If there are collisions, you will have multiple valid string offsets:
1869 .. code-block:: none
1871   .------------.
1872   | 0x00001023 | uint32_t KeyType (.debug_str[0x0001023] => "main")
1873   | 0x00000004 | uint32_t HashData count
1874   | 0x........ | uint32_t HashData[0] DIE offset
1875   | 0x........ | uint32_t HashData[1] DIE offset
1876   | 0x........ | uint32_t HashData[2] DIE offset
1877   | 0x........ | uint32_t HashData[3] DIE offset
1878   | 0x00002023 | uint32_t KeyType (.debug_str[0x0002023] => "print")
1879   | 0x00000002 | uint32_t HashData count
1880   | 0x........ | uint32_t HashData[0] DIE offset
1881   | 0x........ | uint32_t HashData[1] DIE offset
1882   | 0x00000000 | uint32_t KeyType (end of hash chain)
1883   `------------'
1885 Current testing with real world C++ binaries has shown that there is around 1
1886 32 bit hash collision per 100,000 name entries.
1888 Contents
1889 ^^^^^^^^
1891 As we said, we want to strictly define exactly what is included in the
1892 different tables.  For DWARF, we have 3 tables: "``.apple_names``",
1893 "``.apple_types``", and "``.apple_namespaces``".
1895 "``.apple_names``" sections should contain an entry for each DWARF DIE whose
1896 ``DW_TAG`` is a ``DW_TAG_label``, ``DW_TAG_inlined_subroutine``, or
1897 ``DW_TAG_subprogram`` that has address attributes: ``DW_AT_low_pc``,
1898 ``DW_AT_high_pc``, ``DW_AT_ranges`` or ``DW_AT_entry_pc``.  It also contains
1899 ``DW_TAG_variable`` DIEs that have a ``DW_OP_addr`` in the location (global and
1900 static variables).  All global and static variables should be included,
1901 including those scoped within functions and classes.  For example using the
1902 following code:
1904 .. code-block:: c
1906   static int var = 0;
1908   void f ()
1909   {
1910     static int var = 0;
1911   }
1913 Both of the static ``var`` variables would be included in the table.  All
1914 functions should emit both their full names and their basenames.  For C or C++,
1915 the full name is the mangled name (if available) which is usually in the
1916 ``DW_AT_MIPS_linkage_name`` attribute, and the ``DW_AT_name`` contains the
1917 function basename.  If global or static variables have a mangled name in a
1918 ``DW_AT_MIPS_linkage_name`` attribute, this should be emitted along with the
1919 simple name found in the ``DW_AT_name`` attribute.
1921 "``.apple_types``" sections should contain an entry for each DWARF DIE whose
1922 tag is one of:
1924 * DW_TAG_array_type
1925 * DW_TAG_class_type
1926 * DW_TAG_enumeration_type
1927 * DW_TAG_pointer_type
1928 * DW_TAG_reference_type
1929 * DW_TAG_string_type
1930 * DW_TAG_structure_type
1931 * DW_TAG_subroutine_type
1932 * DW_TAG_typedef
1933 * DW_TAG_union_type
1934 * DW_TAG_ptr_to_member_type
1935 * DW_TAG_set_type
1936 * DW_TAG_subrange_type
1937 * DW_TAG_base_type
1938 * DW_TAG_const_type
1939 * DW_TAG_immutable_type
1940 * DW_TAG_file_type
1941 * DW_TAG_namelist
1942 * DW_TAG_packed_type
1943 * DW_TAG_volatile_type
1944 * DW_TAG_restrict_type
1945 * DW_TAG_atomic_type
1946 * DW_TAG_interface_type
1947 * DW_TAG_unspecified_type
1948 * DW_TAG_shared_type
1950 Only entries with a ``DW_AT_name`` attribute are included, and the entry must
1951 not be a forward declaration (``DW_AT_declaration`` attribute with a non-zero
1952 value).  For example, using the following code:
1954 .. code-block:: c
1956   int main ()
1957   {
1958     int *b = 0;
1959     return *b;
1960   }
1962 We get a few type DIEs:
1964 .. code-block:: none
1966   0x00000067:     TAG_base_type [5]
1967                   AT_encoding( DW_ATE_signed )
1968                   AT_name( "int" )
1969                   AT_byte_size( 0x04 )
1971   0x0000006e:     TAG_pointer_type [6]
1972                   AT_type( {0x00000067} ( int ) )
1973                   AT_byte_size( 0x08 )
1975 The DW_TAG_pointer_type is not included because it does not have a ``DW_AT_name``.
1977 "``.apple_namespaces``" section should contain all ``DW_TAG_namespace`` DIEs.
1978 If we run into a namespace that has no name this is an anonymous namespace, and
1979 the name should be output as "``(anonymous namespace)``" (without the quotes).
1980 Why?  This matches the output of the ``abi::cxa_demangle()`` that is in the
1981 standard C++ library that demangles mangled names.
1984 Language Extensions and File Format Changes
1985 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1987 Objective-C Extensions
1988 """"""""""""""""""""""
1990 "``.apple_objc``" section should contain all ``DW_TAG_subprogram`` DIEs for an
1991 Objective-C class.  The name used in the hash table is the name of the
1992 Objective-C class itself.  If the Objective-C class has a category, then an
1993 entry is made for both the class name without the category, and for the class
1994 name with the category.  So if we have a DIE at offset 0x1234 with a name of
1995 method "``-[NSString(my_additions) stringWithSpecialString:]``", we would add
1996 an entry for "``NSString``" that points to DIE 0x1234, and an entry for
1997 "``NSString(my_additions)``" that points to 0x1234.  This allows us to quickly
1998 track down all Objective-C methods for an Objective-C class when doing
1999 expressions.  It is needed because of the dynamic nature of Objective-C where
2000 anyone can add methods to a class.  The DWARF for Objective-C methods is also
2001 emitted differently from C++ classes where the methods are not usually
2002 contained in the class definition, they are scattered about across one or more
2003 compile units.  Categories can also be defined in different shared libraries.
2004 So we need to be able to quickly find all of the methods and class functions
2005 given the Objective-C class name, or quickly find all methods and class
2006 functions for a class + category name.  This table does not contain any
2007 selector names, it just maps Objective-C class names (or class names +
2008 category) to all of the methods and class functions.  The selectors are added
2009 as function basenames in the "``.debug_names``" section.
2011 In the "``.apple_names``" section for Objective-C functions, the full name is
2012 the entire function name with the brackets ("``-[NSString
2013 stringWithCString:]``") and the basename is the selector only
2014 ("``stringWithCString:``").
2016 Mach-O Changes
2017 """"""""""""""
2019 The sections names for the apple hash tables are for non-mach-o files.  For
2020 mach-o files, the sections should be contained in the ``__DWARF`` segment with
2021 names as follows:
2023 * "``.apple_names``" -> "``__apple_names``"
2024 * "``.apple_types``" -> "``__apple_types``"
2025 * "``.apple_namespaces``" -> "``__apple_namespac``" (16 character limit)
2026 * "``.apple_objc``" -> "``__apple_objc``"
2028 .. _codeview:
2030 CodeView Debug Info Format
2031 ==========================
2033 LLVM supports emitting CodeView, the Microsoft debug info format, and this
2034 section describes the design and implementation of that support.
2036 Format Background
2037 -----------------
2039 CodeView as a format is clearly oriented around C++ debugging, and in C++, the
2040 majority of debug information tends to be type information. Therefore, the
2041 overriding design constraint of CodeView is the separation of type information
2042 from other "symbol" information so that type information can be efficiently
2043 merged across translation units. Both type information and symbol information is
2044 generally stored as a sequence of records, where each record begins with a
2045 16-bit record size and a 16-bit record kind.
2047 Type information is usually stored in the ``.debug$T`` section of the object
2048 file.  All other debug info, such as line info, string table, symbol info, and
2049 inlinee info, is stored in one or more ``.debug$S`` sections. There may only be
2050 one ``.debug$T`` section per object file, since all other debug info refers to
2051 it. If a PDB (enabled by the ``/Zi`` MSVC option) was used during compilation,
2052 the ``.debug$T`` section will contain only an ``LF_TYPESERVER2`` record pointing
2053 to the PDB. When using PDBs, symbol information appears to remain in the object
2054 file ``.debug$S`` sections.
2056 Type records are referred to by their index, which is the number of records in
2057 the stream before a given record plus ``0x1000``. Many common basic types, such
2058 as the basic integral types and unqualified pointers to them, are represented
2059 using type indices less than ``0x1000``. Such basic types are built in to
2060 CodeView consumers and do not require type records.
2062 Each type record may only contain type indices that are less than its own type
2063 index. This ensures that the graph of type stream references is acyclic. While
2064 the source-level type graph may contain cycles through pointer types (consider a
2065 linked list struct), these cycles are removed from the type stream by always
2066 referring to the forward declaration record of user-defined record types. Only
2067 "symbol" records in the ``.debug$S`` streams may refer to complete,
2068 non-forward-declaration type records.
2070 Working with CodeView
2071 ---------------------
2073 These are instructions for some common tasks for developers working to improve
2074 LLVM's CodeView support. Most of them revolve around using the CodeView dumper
2075 embedded in ``llvm-readobj``.
2077 * Testing MSVC's output::
2079     $ cl -c -Z7 foo.cpp # Use /Z7 to keep types in the object file
2080     $ llvm-readobj --codeview foo.obj
2082 * Getting LLVM IR debug info out of Clang::
2084     $ clang -g -gcodeview --target=x86_64-windows-msvc foo.cpp -S -emit-llvm
2086   Use this to generate LLVM IR for LLVM test cases.
2088 * Generate and dump CodeView from LLVM IR metadata::
2090     $ llc foo.ll -filetype=obj -o foo.obj
2091     $ llvm-readobj --codeview foo.obj > foo.txt
2093   Use this pattern in lit test cases and FileCheck the output of llvm-readobj
2095 Improving LLVM's CodeView support is a process of finding interesting type
2096 records, constructing a C++ test case that makes MSVC emit those records,
2097 dumping the records, understanding them, and then generating equivalent records
2098 in LLVM's backend.