Issue 170427.1: Location View Numbering
Author: | Alexandre Oliva |
---|---|
Champion: | Mark Wielaard |
Date submitted: | 2017-04-27 |
Date revised: | |
Date closed: | 2024-12-09 |
Type: | Enhancement |
Status: | Deferred |
DWARF version: | 6 |
Section 6.2, pg. 149-160.
This proposal introduces a new implicit column to the line number table, namely "view numbers", so that multiple program states can be identified at the same program counter, and extends loclists with means to add view numbers to address ranges, enabling locations to start or end at specific views.
This may improve debug information, enabling generators to indicate inlined entry points and preferred breakpoints for statements even if instructions associated with the corresponding source locations were not emitted at the given PC, and to emit variable locations that indicate the initial values of inlined arguments, and side effects of operations as they would be expected to take effect from the source code, even when multiple statements have their side effects all encoded at the same PC: with view numbers, debug information consumers may be able to logically advance the perceived program state, so as to reflect user-expected changes specified in the source code, even if the operations were reordered or optimized out in the executable code.
View numbers
In Section 6.2, page 149, line 4: change "with one row" to "with at least one row". Before line 11, add a bullet "a view number, identifying a logical program state".
In Section 6.2.2, page 150, add to Table 6.3, between address
and
op_index
, a new register named view
, defined as "An unsigned
integer that identifies each distinct entry associated with the same
address in the line number matrix."
In Section 6.2.2, page 152, add before line 1 the following sentence:
"The address
and view
registers, taken together, identify a logical
state within the source program."
In Section 6.2.3, page 153, add to Table 6.4 a line "view
| 0" after
address.
In Section 6.2.5, page 160, add a Subsection "6.2.5.0 View Numbers":
View numbers identify multiple logical states of the source program that are all associated with the same address in the program.
View numbers are computed as a side effect of line number opcodes, observing the following rules:
opcodes that modify the address register (with the exception of
DW_LNS_fixed_advance_pc
) simultaneously reset theview
register to zeroopcodes that append a row to the matrix subsequently increment the
view
registerRationale: location lists can refer to
address
andview
, notop_index
, so views are reset at address changes, not atop_index
changes. Opcodes that advanceop_index
only will only reset the view when they happen to advance theaddress
, e.g. by exceedingmaximum_operations_per_instruction
inop_index
.
DW_LNS_fixed_advance_pc
is the only opcode that may change the address without resetting the view. It is available for compilers to use when an address change is uncertain, e.g., when advancing past opcodes that may expand to an empty sequence, e.g. possibly-empty alignment sequences, optional no-operation opcodes or the like.
In Section 6.2.5.1, page 160, insert before item 3: "Reset the view
register if the value of the address register changed in 2.", and
after item 3: "Increment the view
register"
In Section 6.2.5.2, page 162, 1. DW_LNS_copy
, line 10, add after
"Then it": "increments the view
register, ".
In Section 6.2.5.2, page 162, append to the description of
2. DW_LNS_advance_pc
: "Then, if the value of the address
register
changed, it resets the view
register to zero."
In Section 6.2.5.2, page 163, append to the first paragraph of
8. DW_LNS_const_add_pc
: ", and it resets the view
register to zero if
the value of the address
register changed."
In Section 6.2.5.2, page 163, add a third paragraph to
9. DW_LNS_fixed_advance_pc
: "This is the only address-changing opcode
that does NOT reset the view
register. It helps compilers that emit
line number programs to determine view numbers even when advancing
past opcodes that might expand to nothing."
In Section 6.2.5.3, page 164, in 2. DW_LNE_set_address
, change
"op_index
register" to "view
and op_index
registers".
Views in loclists
In Section 2.6.2, page 43, add a bullet before "Default location description":
- View description. This kind of entry must precede a Bounded location description, and it augments the starting and ending address of the Bounded location description with [view numbers|link to 6.2.5.0]. The addresses of a bounded location description that is not preceded by a view description are argumented with view number zero.
In Section 2.6.2, page 45, add before 6. DW_LLE_default_location
:
6.
DW_LLE_view_pair
This is the only form of view description, and it has two unsigned LEB128 operands. The first and second values specify respectively the view numbers that augment the starting and ending addresses of the bounded location description the view description precedes.
In Section 7.7.3, add to Table 7.10 the following entry:
DW_LLE_view_pair
| 0x09
2024-12-09: Noted that GCC produces view numbers by default (and has for a few years), but there is no consumer support or experience. Voted to defer this proposal until there is consumer experience.