[Dwarf-Discuss] Semantics of DW_OP_(b)reg

Adrian Prantl aprantl@apple.com
Fri Mar 17 21:54:50 GMT 2017


> On Mar 17, 2017, at 2:49 PM, David Anderson <davea42 at linuxmail.org> wrote:
> 
> On 03/17/2017 01:18 PM, Adrian Prantl wrote:
>> Are these two expressions equivalent?
>> 1. DW_OP_breg1 0 DW_OP_breg2 0 DW_OP_plus DW_OP_stack_value
>> 2. DW_OP_reg1    DW_OP_reg2    DW_OP_plus DW_OP_stack_value
> 
> In DW4 (DW5 has same text)
> These operations name a register location. To fetch the contents of a
> register, it is necessary to
> use one of the register based addressing operations, such as DW_OP_bregx
> (see Section
> 2.5.1.2).
> 
> To me that means that 2. above cannot work.
> 
> In 1. the value of   DW_OP_breg1 0
> (for example) is  pushed on the stack.
> 
> Can someone point out
> where the standard (4 or 5 or?) states the push happens?
> Ah yes: DW5:
> 
> 2.5.1.2 Register Values
> 
> The following operations push a value onto the stack
> that is either the contents of a register or the result
> of adding the contents of a register to a given
> signed offset. DW_OP_regval_type pushes the
> contents of the register together with the given
> base type, while the other operations push the
> result of adding the contents of a register
> to a given signed offset together with the generic type.
> 
> Notice that DW_OP_reg<n> is NOT in the list where something
> gets pushed on the stack.
> 
> Comments/correction?
> DavidA.

Would you say that the example in Appendix D, pg 291, line 23
  DW_OP_entry_value 1 DW_OP_reg1 DW_OP_stack_value
is incorrect, because DW_OP_ref is not allowed outside of a register location description?

-- adrian



More information about the Dwarf-discuss mailing list