[Dwarf-discuss] PROPOSAL: Constant expressions in locations lists
Tue Jun 5 08:14:44 GMT 2007
> My original proposal was (almost) exactly that, but several objected
> to that proposal on the basis that the DWARF expression stack is a
> simple stack of address-sized objects. Without a considerable
> overhaul of the DWARF expression language, it wouldn't be possible to
> describe constant values for anything other than integers no larger
> than a pointer.
That's not true. You can use DW_OP_piece (my proposal gave an example of a
two-word array described that way). It's entirely possible, though I
readily concede that it is awkward. (Also note that neither the status quo
nor the previous proposal allows a representation for an array or struct
that is partly constant and partly in described locations, as I propose
permitting via DW_OP_piece. That is really an orthogonal generalization
that could be applied to the block-constant specialty location expression too.)
> The new formulation sacrifices this ability to rematerialize a value for
> the ability to represent constant values of arbitrary type.
The proposal is presumably motivated by some real-world cases. Are there
in fact real-world cases where an address-variant value is sometimes a
constant that is very large, so that the DW_OP_piece method would be
inordinately ungainly? I don't doubt such constants exist, but I would be
surprised by the real-world examples of them arising in a variable in some
address ranges but not others. DW_AT_const_value already suffices for
large constants when a location list is not required.
I am not especially against a block-constant specialty location expression.
(I'm not convinced it's worthwhile to have a plethora of special-case
short-length operations as well as the general ULEB128 block form, it's
only an extra byte or two.) It seemed like a good opportunity to kill two
birds with one stone (three if you count DW_CFA_val_expression). My guess
is that rematerializable values are a more common real-world scenario that
would be useful to support than large constants in location subsets are a
common real-world scenario that matters to support gracefully (vs with some
discomfort and suboptimality using DW_OP_piece).
More information about the Dwarf-discuss