Breakpad: Generate unwind plans from STACK CFI records
authorPavel Labath <pavel@labath.sk>
Mon, 13 May 2019 11:25:35 +0000 (11:25 +0000)
committerPavel Labath <pavel@labath.sk>
Mon, 13 May 2019 11:25:35 +0000 (11:25 +0000)
commit1211baa51c504173c58c7282fe60a0f1d4a78c08
tree46cfef7d53450c9731eabfd2076e75e27f820a98
parent6dcef8fc0c671002c017374b48b09be08bf516f1
Breakpad: Generate unwind plans from STACK CFI records

Summary:
This patch implements the GetUnwindPlan interface (added in the previous
patch) for SymbolFileBreakpad, and uses it to generate unwind plans from
STACK CFI records in breakpad files.

We first perform a light-weight parse of the breakpad in order to build
up a map of regions covered by the unwind info so that we can later jump
to the right record when we need to unwind a specific function.

The actual parsing is relatively straight-forward, as the STACK CFI records
are just another (text) form of the eh_frame unwind instructions, and
the same goes for lldb's UnwindPlans. The newly-introduced
PostfixExpression API is used to convert the breakpad postfix
expressions into DWARF. The generated dwarf expressions are stored in a
BumpPtrAllocator, as the UnwindPlan does not take ownership of the
expression data it references (usually this is static data in an object
file, so special ownership is needed).

At this moment the generated unwind plans aren't used in the actual
unwind machinery (only in the image show-unwind command), but that is
coming in a separate patch.

Reviewers: amccarth, clayborg, markmentovai

Subscribers: aprantl, jasonmolenda, lldb-commits

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

llvm-svn: 360574
lldb/lit/SymbolFile/Breakpad/Inputs/stack-cfi-parsing.syms [new file with mode: 0644]
lldb/lit/SymbolFile/Breakpad/Inputs/stack-cfi-parsing.yaml [new file with mode: 0644]
lldb/lit/SymbolFile/Breakpad/stack-cfi-parsing.test [new file with mode: 0644]
lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h