﻿=====================================
CodeView Type Records
=====================================


.. contents::
   :local:

.. _types_intro:

Introduction
============

This document describes the usage and serialization format of the various
CodeView type records that LLVM understands.  This document does not describe
every single CodeView type record that is defined.  In some cases, this is
because the records are clearly deprecated and can only appear in very old
software (e.g. the 16-bit types).  On other cases, it is because the records
have never been observed in practice.  This could be because they are only
generated for non-C++ code (e.g. Visual Basic, C#), or because they have been
made obsolete by newer records, or any number of other reasons.  However, the
records we describe here should cover 99% of type records that one can expect
to encounter when dealing with modern C++ toolchains.

Record Categories
=================

We can think of a sequence of CodeView type records as an array of variable length
`leaf records`.  Each such record describes its own length as part of a fixed-size
header, as well as the kind of record it is.  Leaf records are either padded to 4
bytes (if this type stream appears in a TPI/IPI stream of a PDB) or not padded at
all (if this type stream appears in the ``.debug$T`` section of an object file).
Padding is implemented by inserting a decreasing sequence of `<_padding_records>`
that terminates with ``LF_PAD0``.

The final category of record is a ``member record``.  One particular leaf type -- 
``LF_FIELDLIST`` -- contains a series of embedded records.  While the outer
``LF_FIELDLIST`` describes its length (like any other leaf record), the embedded
records -- called ``member records`` do not.

.. _leaf_types:

Leaf Records
------------

All leaf records begin with the following 4 byte prefix:

.. code-block:: c++

  struct RecordHeader {
    uint16_t RecordLen;  // Record length, not including this 2 byte field.
    uint16_t RecordKind; // Record kind enum.
  };

LF_POINTER (0x1002)
^^^^^^^^^^^^^^^^^^^

**Usage:** Describes a pointer to another type.

**Layout:**

.. code-block:: none

  .--------------------.-- +0
  |    Referent Type   |
  .--------------------.-- +4
  |     Attributes     |
  .--------------------.-- +8
  |  Member Ptr Info   |       Only present if |Attributes| indicates this is a member pointer.
  .--------------------.-- +E

Attributes is a bitfield with the following layout:

.. code-block:: none

    .-----------------------------------------------------------------------------------------------------.
    |     Unused                   |  Flags  |       Size       |   Modifiers   |  Mode   |      Kind     |
    .-----------------------------------------------------------------------------------------------------.
    |                              |         |                  |               |         |               |
   0x100                         +0x16     +0x13               +0xD            +0x8      +0x5            +0x0

where the various fields are defined by the following enums:

.. code-block:: c++

  enum class PointerKind : uint8_t {
    Near16 = 0x00,                // 16 bit pointer
    Far16 = 0x01,                 // 16:16 far pointer
    Huge16 = 0x02,                // 16:16 huge pointer
    BasedOnSegment = 0x03,        // based on segment
    BasedOnValue = 0x04,          // based on value of base
    BasedOnSegmentValue = 0x05,   // based on segment value of base
    BasedOnAddress = 0x06,        // based on address of base
    BasedOnSegmentAddress = 0x07, // based on segment address of base
    BasedOnType = 0x08,           // based on type
    BasedOnSelf = 0x09,           // based on self
    Near32 = 0x0a,                // 32 bit pointer
    Far32 = 0x0b,                 // 16:32 pointer
    Near64 = 0x0c                 // 64 bit pointer
  };
  enum class PointerMode : uint8_t {
    Pointer = 0x00,                 // "normal" pointer
    LValueReference = 0x01,         // "old" reference
    PointerToDataMember = 0x02,     // pointer to data member
    PointerToMemberFunction = 0x03, // pointer to member function
    RValueReference = 0x04          // r-value reference
  };
  enum class PointerModifiers : uint8_t {
    None = 0x00,                    // "normal" pointer
    Flat32 = 0x01,                  // "flat" pointer
    Volatile = 0x02,                // pointer is marked volatile
    Const = 0x04,                   // pointer is marked const
    Unaligned = 0x08,               // pointer is marked unaligned
    Restrict = 0x10,                // pointer is marked restrict
  };
  enum class PointerFlags : uint8_t {
    WinRTSmartPointer = 0x01,       // pointer is a WinRT smart pointer
    LValueRefThisPointer = 0x02,    // pointer is a 'this' pointer of a member function with ref qualifier (e.g. void X::foo() &)
    RValueRefThisPointer = 0x04     // pointer is a 'this' pointer of a member function with ref qualifier (e.g. void X::foo() &&)
  };

The ``Size`` field of the Attributes bitmask is a 1-byte value indicating the
pointer size.  For example, a `void*` would have a size of either 4 or 8 depending
on the target architecture.  On the other hand, if ``Mode`` indicates that this is
a pointer to member function or pointer to data member, then the size can be any
implementation defined number.

The ``Member Ptr Info`` field of the ``LF_POINTER`` record is only present if the
attributes indicate that this is a pointer to member.

Note that "plain" pointers to primitive types are not represented by ``LF_POINTER``
records, they are indicated by special reserved :ref:`TypeIndex values <type_indices>`.



LF_MODIFIER (0x1001)
^^^^^^^^^^^^^^^^^^^^

LF_PROCEDURE (0x1008)
^^^^^^^^^^^^^^^^^^^^^

LF_MFUNCTION (0x1009)
^^^^^^^^^^^^^^^^^^^^^

LF_LABEL (0x000e)
^^^^^^^^^^^^^^^^^

LF_ARGLIST (0x1201)
^^^^^^^^^^^^^^^^^^^

LF_FIELDLIST (0x1203)
^^^^^^^^^^^^^^^^^^^^^

LF_ARRAY (0x1503)
^^^^^^^^^^^^^^^^^

LF_CLASS (0x1504)
^^^^^^^^^^^^^^^^^

LF_STRUCTURE (0x1505)
^^^^^^^^^^^^^^^^^^^^^

LF_INTERFACE (0x1519)
^^^^^^^^^^^^^^^^^^^^^

LF_UNION (0x1506)
^^^^^^^^^^^^^^^^^

LF_ENUM (0x1507)
^^^^^^^^^^^^^^^^

LF_TYPESERVER2 (0x1515)
^^^^^^^^^^^^^^^^^^^^^^^

LF_VFTABLE (0x151d)
^^^^^^^^^^^^^^^^^^^

LF_VTSHAPE (0x000a)
^^^^^^^^^^^^^^^^^^^

LF_BITFIELD (0x1205)
^^^^^^^^^^^^^^^^^^^^

LF_FUNC_ID (0x1601)
^^^^^^^^^^^^^^^^^^^

LF_MFUNC_ID (0x1602)
^^^^^^^^^^^^^^^^^^^^

LF_BUILDINFO (0x1603)
^^^^^^^^^^^^^^^^^^^^^

LF_SUBSTR_LIST (0x1604)
^^^^^^^^^^^^^^^^^^^^^^^

LF_STRING_ID (0x1605)
^^^^^^^^^^^^^^^^^^^^^

LF_UDT_SRC_LINE (0x1606)
^^^^^^^^^^^^^^^^^^^^^^^^

LF_UDT_MOD_SRC_LINE (0x1607)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

LF_METHODLIST (0x1206)
^^^^^^^^^^^^^^^^^^^^^^

LF_PRECOMP (0x1509)
^^^^^^^^^^^^^^^^^^^

LF_ENDPRECOMP (0x0014)
^^^^^^^^^^^^^^^^^^^^^^

.. _member_types:

Member Records
--------------

LF_BCLASS (0x1400)
^^^^^^^^^^^^^^^^^^

LF_BINTERFACE (0x151a)
^^^^^^^^^^^^^^^^^^^^^^

LF_VBCLASS (0x1401)
^^^^^^^^^^^^^^^^^^^

LF_IVBCLASS (0x1402)
^^^^^^^^^^^^^^^^^^^^

LF_VFUNCTAB (0x1409)
^^^^^^^^^^^^^^^^^^^^

LF_STMEMBER (0x150e)
^^^^^^^^^^^^^^^^^^^^

LF_METHOD (0x150f)
^^^^^^^^^^^^^^^^^^

LF_MEMBER (0x150d)
^^^^^^^^^^^^^^^^^^

LF_NESTTYPE (0x1510)
^^^^^^^^^^^^^^^^^^^^

LF_ONEMETHOD (0x1511)
^^^^^^^^^^^^^^^^^^^^^

LF_ENUMERATE (0x1502)
^^^^^^^^^^^^^^^^^^^^^

LF_INDEX (0x1404)
^^^^^^^^^^^^^^^^^

.. _padding_records:

Padding Records
---------------

LF_PADn (0xf0 + n)
^^^^^^^^^^^^^^^^^^
