Fix DwarfFrameParser, decodeDwarfExpression and DwarfResult 596/head
authorSasha @leela <sasha@cs.wisc.edu>
Thu, 9 May 2019 21:19:44 +0000 (16:19 -0500)
committerSasha @leela <sasha@cs.wisc.edu>
Thu, 9 May 2019 21:19:44 +0000 (16:19 -0500)
commit874b3b27cc4c039f029fa4f15b0104e138a5a456
tree5a2ac7372594986938ffffe7fca1fb5831235f79
parent1bd663ff8ff13220c11a6b0cfc0af96d8fddf45f
Fix DwarfFrameParser, decodeDwarfExpression and DwarfResult

After porting Dyninst to use libdw, DwarfFrameParser missed dealing
with important Dwarf operations that would decode rules for findind
registers values. These rules were not properly decoded by Dyninst
decodeDwarfExpression, neither were being dealt by DwarFrameParser.
This fix properly retrieves libdw Dwarf operations and decodes them,
making it possible to DebugStepper work, which wasn't even before the
port, when lidwarf was being used on Dyninst 9.3.

Basically, Dwarf frame info can be a simple dwarf expression, representing
a value or a memory address, a location description, or a location list.
Libdw gives the consumer an array of dwarf operations that describes how
to find the value they're looking for, as opposed to libdwarf who gives
the consumer many out parameters that lead to different ways to find a
value. This important change made DwarfFrameParser work only partially
after the port. And this fix came to implement the cases that were not
being considered.
dwarf/h/dwarfFrameParser.h
dwarf/h/dwarfHandle.h
dwarf/h/dwarfResult.h
dwarf/src/dwarfExprParser.C
dwarf/src/dwarfFrameParser.C
dwarf/src/dwarfResult.C
dyninstAPI/src/stackwalk-aarch64.C
stackwalk/src/dbginfo-stepper.C
stackwalk/src/linux-aarch64-swk.C