diff options
Diffstat (limited to 'llvm/docs/SourceLevelDebugging.rst')
-rw-r--r-- | llvm/docs/SourceLevelDebugging.rst | 201 |
1 files changed, 90 insertions, 111 deletions
diff --git a/llvm/docs/SourceLevelDebugging.rst b/llvm/docs/SourceLevelDebugging.rst index 6bdfea0e27b..8acd90122b4 100644 --- a/llvm/docs/SourceLevelDebugging.rst +++ b/llvm/docs/SourceLevelDebugging.rst @@ -186,15 +186,11 @@ the simple data types ``i32``, ``i1``, ``float``, ``double``, ``mdstring`` and ... } -Most of the string and integer fields in descriptors are packed into a single, -null-separated ``mdstring``. The first field of the header is always an -``i32`` containing the DWARF tag value identifying the content of the -descriptor. - -For clarity of definition in this document, these header fields are described -below split inside an imaginary ``DIHeader`` construct. This is invalid -assembly syntax. In valid IR, these fields are stringified and concatenated, -separated by ``\00``. +<a name="LLVMDebugVersion">The first field of a descriptor is always an +``i32`` containing a tag value identifying the content of the descriptor. +The remaining fields are specific to the descriptor. The values of tags are +loosely bound to the tag values of DWARF information entries. However, that +does not restrict the use of the information supplied to DWARF targets. The details of the various descriptors follow. @@ -204,22 +200,20 @@ Compile unit descriptors .. code-block:: llvm !0 = metadata !{ - DIHeader( - i32, ;; Tag = 17 (DW_TAG_compile_unit) - i32, ;; DWARF language identifier (ex. DW_LANG_C89) - mdstring, ;; Producer (ex. "4.0.1 LLVM (LLVM research group)") - i1, ;; True if this is optimized. - mdstring, ;; Flags - i32, ;; Runtime version - mdstring, ;; Split debug filename - i32 ;; Debug info emission kind (1 = Full Debug Info, 2 = Line Tables Only) - ), + i32, ;; Tag = 17 (DW_TAG_compile_unit) metadata, ;; Source directory (including trailing slash) & file pair - metadata, ;; List of enums types - metadata, ;; List of retained types - metadata, ;; List of subprograms - metadata, ;; List of global variables + i32, ;; DWARF language identifier (ex. DW_LANG_C89) + metadata ;; Producer (ex. "4.0.1 LLVM (LLVM research group)") + i1, ;; True if this is optimized. + metadata, ;; Flags + i32 ;; Runtime version + metadata ;; List of enums types + metadata ;; List of retained types + metadata ;; List of subprograms + metadata ;; List of global variables metadata ;; List of imported entities + metadata ;; Split debug filename + i32 ;; Debug info emission kind (1 = Full Debug Info, 2 = Line Tables Only) } These descriptors contain a source language ID for the file (we use the DWARF @@ -242,10 +236,8 @@ File descriptors .. code-block:: llvm !0 = metadata !{ - DIHeader( - i32 ;; Tag = 41 (DW_TAG_file_type) - ), - metadata ;; Source directory (including trailing slash) & file pair + i32, ;; Tag = 41 (DW_TAG_file_type) + metadata, ;; Source directory (including trailing slash) & file pair } These descriptors contain information for a file. Global variables and top @@ -263,18 +255,17 @@ Global variable descriptors .. code-block:: llvm !1 = metadata !{ - DIHeader( - i32, ;; Tag = 52 (DW_TAG_variable) - mdstring, ;; Name - mdstring, ;; Display name (fully qualified C++ name) - mdstring, ;; MIPS linkage name (for C++) - i32, ;; Line number where defined - i1, ;; True if the global is local to compile unit (static) - i1 ;; True if the global is defined in the compile unit (not extern) - ), + i32, ;; Tag = 52 (DW_TAG_variable) + i32, ;; Unused field. metadata, ;; Reference to context descriptor + metadata, ;; Name + metadata, ;; Display name (fully qualified C++ name) + metadata, ;; MIPS linkage name (for C++) metadata, ;; Reference to file where defined + i32, ;; Line number where defined metadata, ;; Reference to type descriptor + i1, ;; True if the global is local to compile unit (static) + i1, ;; True if the global is defined in the compile unit (not extern) {}*, ;; Reference to the global variable metadata, ;; The static member declaration, if any } @@ -291,29 +282,27 @@ Subprogram descriptors .. code-block:: llvm !2 = metadata !{ - DIHeader( - i32, ;; Tag = 46 (DW_TAG_subprogram) - mdstring, ;; Name - mdstring, ;; Display name (fully qualified C++ name) - mdstring, ;; MIPS linkage name (for C++) - i32, ;; Line number where defined - i1, ;; True if the global is local to compile unit (static) - i1, ;; True if the global is defined in the compile unit (not extern) - i32, ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual - i32, ;; Index into a virtual function - i32, ;; Flags - Artificial, Private, Protected, Explicit, Prototyped. - i1, ;; isOptimized - i32 ;; Line number where the scope of the subprogram begins - ), + i32, ;; Tag = 46 (DW_TAG_subprogram) metadata, ;; Source directory (including trailing slash) & file pair metadata, ;; Reference to context descriptor + metadata, ;; Name + metadata, ;; Display name (fully qualified C++ name) + metadata, ;; MIPS linkage name (for C++) + i32, ;; Line number where defined metadata, ;; Reference to type descriptor + i1, ;; True if the global is local to compile unit (static) + i1, ;; True if the global is defined in the compile unit (not extern) + i32, ;; Virtuality, e.g. dwarf::DW_VIRTUALITY__virtual + i32, ;; Index into a virtual function metadata, ;; indicates which base type contains the vtable pointer for the ;; derived class + i32, ;; Flags - Artificial, Private, Protected, Explicit, Prototyped. + i1, ;; isOptimized {}*, ;; Reference to the LLVM function metadata, ;; Lists function template parameters metadata, ;; Function declaration descriptor - metadata ;; List of function variables + metadata, ;; List of function variables + i32 ;; Line number where the scope of the subprogram begins } These descriptors provide debug information about functions, methods and @@ -326,14 +315,12 @@ Block descriptors .. code-block:: llvm !3 = metadata !{ - DIHeader( - i32, ;; Tag = 11 (DW_TAG_lexical_block) - i32, ;; Line number - i32, ;; Column number - i32 ;; Unique ID to identify blocks from a template function - ), + i32, ;; Tag = 11 (DW_TAG_lexical_block) metadata, ;; Source directory (including trailing slash) & file pair - metadata ;; Reference to context descriptor + metadata, ;; Reference to context descriptor + i32, ;; Line number + i32, ;; Column number + i32 ;; Unique ID to identify blocks from a template function } This descriptor provides debug information about nested blocks within a @@ -343,12 +330,10 @@ lexical blocks at same depth. .. code-block:: llvm !3 = metadata !{ - DIHeader( - i32, ;; Tag = 11 (DW_TAG_lexical_block) - i32 ;; DWARF path discriminator value - ), + i32, ;; Tag = 11 (DW_TAG_lexical_block) metadata, ;; Source directory (including trailing slash) & file pair metadata ;; Reference to the scope we're annotating with a file change + i32, ;; DWARF path discriminator value } This descriptor provides a wrapper around a lexical scope to handle file @@ -362,18 +347,16 @@ Basic type descriptors .. code-block:: llvm !4 = metadata !{ - DIHeader( - i32, ;; Tag = 36 (DW_TAG_base_type) - mdstring, ;; Name (may be "" for anonymous types) - i32, ;; Line number where defined (may be 0) - i64, ;; Size in bits - i64, ;; Alignment in bits - i64, ;; Offset in bits - i32, ;; Flags - i32 ;; DWARF type encoding - ), + i32, ;; Tag = 36 (DW_TAG_base_type) metadata, ;; Source directory (including trailing slash) & file pair (may be null) - metadata ;; Reference to context + metadata, ;; Reference to context + metadata, ;; Name (may be "" for anonymous types) + i32, ;; Line number where defined (may be 0) + i64, ;; Size in bits + i64, ;; Alignment in bits + i64, ;; Offset in bits + i32, ;; Flags + i32 ;; DWARF type encoding } These descriptors define primitive types used in the code. Example ``int``, @@ -407,19 +390,22 @@ Derived type descriptors .. code-block:: llvm !5 = metadata !{ - DIHeader( - i32, ;; Tag (see below) - mdstring, ;; Name (may be "" for anonymous types) - i32, ;; Line number where defined (may be 0) - i64, ;; Size in bits - i64, ;; Alignment in bits - i64, ;; Offset in bits - i32 ;; Flags to encode attributes, e.g. private - ), + i32, ;; Tag (see below) metadata, ;; Source directory (including trailing slash) & file pair (may be null) metadata, ;; Reference to context + metadata, ;; Name (may be "" for anonymous types) + i32, ;; Line number where defined (may be 0) + i64, ;; Size in bits + i64, ;; Alignment in bits + i64, ;; Offset in bits + i32, ;; Flags to encode attributes, e.g. private metadata, ;; Reference to type derived from - metadata ;; (optional) Objective C property node + metadata, ;; (optional) Name of the Objective C property associated with + ;; Objective-C an ivar, or the type of which this + ;; pointer-to-member is pointing to members of. + metadata, ;; (optional) Name of the Objective C property getter selector. + metadata, ;; (optional) Name of the Objective C property setter selector. + i32 ;; (optional) Objective C property attributes. } These descriptors are used to define types derived from other types. The value @@ -467,23 +453,21 @@ Composite type descriptors .. code-block:: llvm !6 = metadata !{ - DIHeader( - i32, ;; Tag (see below) - mdstring, ;; Name (may be "" for anonymous types) - i32, ;; Line number where defined (may be 0) - i64, ;; Size in bits - i64, ;; Alignment in bits - i64, ;; Offset in bits - i32, ;; Flags - i32 ;; Runtime languages - ), + i32, ;; Tag (see below) metadata, ;; Source directory (including trailing slash) & file pair (may be null) metadata, ;; Reference to context + metadata, ;; Name (may be "" for anonymous types) + i32, ;; Line number where defined (may be 0) + i64, ;; Size in bits + i64, ;; Alignment in bits + i64, ;; Offset in bits + i32, ;; Flags metadata, ;; Reference to type derived from metadata, ;; Reference to array of member descriptors + i32, ;; Runtime languages metadata, ;; Base type containing the vtable pointer for this type metadata, ;; Template parameters - mdstring ;; A unique identifier for type uniquing purpose (may be null) + metadata ;; A unique identifier for type uniquing purpose (may be null) } These descriptors are used to define types that are composed of 0 or more @@ -545,11 +529,9 @@ Subrange descriptors .. code-block:: llvm !42 = metadata !{ - DIHeader( - i32, ;; Tag = 33 (DW_TAG_subrange_type) - i64, ;; Low value - i64 ;; High value - ) + i32, ;; Tag = 33 (DW_TAG_subrange_type) + i64, ;; Low value + i64 ;; High value } These descriptors are used to define ranges of array subscripts for an array @@ -566,11 +548,9 @@ Enumerator descriptors .. code-block:: llvm !6 = metadata !{ - DIHeader( - i32, ;; Tag = 40 (DW_TAG_enumerator) - mdstring, ;; Name - i64 ;; Value - ) + i32, ;; Tag = 40 (DW_TAG_enumerator) + metadata, ;; Name + i64 ;; Value } These descriptors are used to define members of an enumeration :ref:`composite @@ -582,17 +562,16 @@ Local variables .. code-block:: llvm !7 = metadata !{ - DIHeader( - i32, ;; Tag (see below) - mdstring, ;; Name - i32, ;; 24 bit - Line number where defined - ;; 8 bit - Argument number. 1 indicates 1st argument. - i32 ;; flags - ), + i32, ;; Tag (see below) metadata, ;; Context + metadata, ;; Name metadata, ;; Reference to file where defined + i32, ;; 24 bit - Line number where defined + ;; 8 bit - Argument number. 1 indicates 1st argument. metadata, ;; Reference to the type descriptor + i32, ;; flags metadata ;; (optional) Reference to inline location + metadata ;; (optional) Reference to a complex expression. } These descriptors are used to define variables local to a sub program. The |