[llvm] [Docs][CodeView] Document `S_LOCAL` and `S_DEFRANGE*` (PR #190156)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 4 03:13:30 PDT 2026
================
@@ -184,27 +184,156 @@ S_ENVBLOCK (0x113d)
S_LOCAL (0x113e)
^^^^^^^^^^^^^^^^
+Defines a local variable.
+This record is followed by a series of ``S_DEFRANGE*`` records that define the
+live range of this variable.
+
+All ``S_DEFRANGE*`` records consist of a header followed by
+``LocalVariableAddrRange`` and a list of ``LocalVariableAddrGap`` (until the
+record length is reached).
+
+.. code:: cpp
+
+ /// A live range of a variable.
+ struct LocalVariableAddrRange {
+ /// Starting offset in the section
+ uint32_t OffsetStart;
+ /// Index of the section
+ uint16_t ISectStart;
+ /// Size of the range
+ uint16_t Range;
+ };
+ /// A subrange of a `LocalVariableAddrRange` where a variable is _not_ live.
+ struct LocalVariableAddrGap {
+ /// Start of the range, relative to `LocalVariableAddrRange::OffsetStart`
+ uint16_t GapStartOffset;
+ /// Size of the range
+ uint16_t Range;
+ };
+
+The following records only describe the header.
+
S_DEFRANGE (0x113f)
^^^^^^^^^^^^^^^^^^^
+.. code:: cpp
+
+ struct DefrangeSymHeader {
+ /// DIA program to evaluate the value of the symbol
+ uint32_t Program;
+ };
+
S_DEFRANGE_SUBFIELD (0x1140)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+A live range of sub field of variable (e.g. ``local.i``).
+
+.. code:: cpp
+
+ struct DefrangeSubfieldSymHeader {
+ /// DIA program to evaluate the value of the symbol
+ uint32_t Program;
+ /// Offset in parent variable.
+ uint32_t OffsetInParent;
+ };
+
S_DEFRANGE_REGISTER (0x1141)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+A live range of en-registed variable.
----------------
Nerixyz wrote:
Rewrote this to "A live range of a variable living in a register".
https://github.com/llvm/llvm-project/pull/190156
More information about the llvm-commits
mailing list