Branch: refs/heads/fix-sw-stepper
Home: https://github.com/dyninst/dyninst
Commit: 874b3b27cc4c039f029fa4f15b0104e138a5a456
https://github.com/dyninst/dyninst/commit/874b3b27cc4c039f029fa4f15b0104e138a5a456
Author: Sasha @leela <sasha@xxxxxxxxxxx>
Date: 2019-05-09 (Thu, 09 May 2019)
Changed paths:
M dwarf/h/dwarfFrameParser.h
M dwarf/h/dwarfHandle.h
M dwarf/h/dwarfResult.h
M dwarf/src/dwarfExprParser.C
M dwarf/src/dwarfFrameParser.C
M dwarf/src/dwarfResult.C
M dyninstAPI/src/stackwalk-aarch64.C
M stackwalk/src/dbginfo-stepper.C
M stackwalk/src/linux-aarch64-swk.C
Log Message:
-----------
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.
|