On Tue, Mar 09, 2021 at 03:22:35PM -0800, David Blaikie wrote: > So, when the consumer evaluates DW_OP_GNU_parameter_ref, it handles it > > similarly to DW_OP_entry_value, unwinds to caller if it can identify it, > > and just looks up if some value is specified for it in that particular > > caller. > > > > Could you help me understand more how DW_OP_GNU_parameter_ref > works/differently from DW_OP_entry_value?
DW_OP_entry_value refers to a register or memory in which a parameter is passed. When a parameter is not passed at all, there is no register or memory to which it can refer to. So, DW_OP_GNU_parameter_ref instead refers to the DW_TAG_formal_parameter DIE and the consumer needs to find a DW_TAG_call_site_parameter that refers to the same DIE. > > I think GCC doesn't do that, instead it would if considered beneficial > > copy the function to a non-exported one and optimize away the parameters in > > there (etc.). > > > Ah, OK - in which case there would be no DWARF for the copy? And the > original function would look as though it were "optimized away" (ie: not > have any DW_AT_low/high_pc, etc)? No, there is DWARF for the copy. The original user function is the abstract origin and then it has two (or more) DW_TAG_subprogram DIEs that refer to that (and refer to DW_TAG_formal_parameter and DW_TAG_variable etc.) in it. Jakub _______________________________________________ Dwarf-Discuss mailing list Dwarf-Discuss@lists.dwarfstd.org http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org