PostfixExpression: Introduce InitialValueNode
authorPavel Labath <pavel@labath.sk>
Tue, 30 Apr 2019 13:33:18 +0000 (13:33 +0000)
committerPavel Labath <pavel@labath.sk>
Tue, 30 Apr 2019 13:33:18 +0000 (13:33 +0000)
commit03db32b3032e50278b9793c0b8167eed44539fb1
tree31d974688f7212cc69502f9d8e809b87878e7a19
parent123e04b8a8269a19d3c3c51d0576e6394bee21d9
PostfixExpression: Introduce InitialValueNode

Summary:
This node represents can be used to refer to the initial value, which is
sometimes pushed onto the DWARF stack as the "input" to the DWARF
expression. The typical use case (and the reason why I'm introducing it)
is that the "Canonical Frame Address" is passed this way to the DWARF
expressions computing the values of registers during frame unwind.

The nodes are converted into dwarf by keeping track of DWARF stack depth
an any given point, and then copying the initial value from the bottom
of the stack via the DW_OP_pick opcode. This could be made more
efficient for simple expressions, but here I chose to start with the
most general implementation possible.

Reviewers: amccarth, clayborg, aleksandr.urakov

Subscribers: aprantl, jasonmolenda, lldb-commits, markmentovai

Differential Revision: https://reviews.llvm.org/D61183

llvm-svn: 359560
lldb/include/lldb/Symbol/PostfixExpression.h
lldb/source/Symbol/PostfixExpression.cpp
lldb/unittests/Symbol/PostfixExpressionTest.cpp