||.debug_frame DW_OP_call_ref allowance
||Accepted with modification
Section 6.4, pg 131
> 6.4.2 Call Frame Instructions
> DW_OP_call2, DW_OP_call4 and DW_OP_call_ref operators are not meaningful in
> an operand of these instructions because there is no mapping from call frame
> information to any corresponding debugging compilation unit information,
> thus there is no way to interpret the call offset.
DW_OP_call_ref is absolute intended for cross-CU references. There is no need
to know "corresponding debugging compilation unit" to interpret
DW_OP_call_ref. (It applies also to DW_OP_implicit_pointer now.)
DWARF-4 also states:
> 6.4.1 Structure of Call Frame Information
> 5. address_size (ubyte)
> If a compilation unit exists for this frame, its address size must match the
> address size here.
So is there any "corresponding debugging compilation unit" or not? This
paragraph states there is such "exists for" - "corresponding" (expecting just
by matching the FDE address range to DW_AT_low_pc/DW_AT_high_pc/DW_AT_ranges).
6.4.2, bullet 1:
DW_OP_call2, DW_OP_call4 and DW_OP_call_ref operators are not
allowed in an operand of these instructions because
the call frame information must not depend on other
Accepted with modifications -- May 15, 2012.