Support for leaf functions which don't touch any callee-saved registers

for Windows x64 stacks.

According to https://reviews.llvm.org/D2474, LLVM does't generate unwind info for leaf function which doesn't touch any callee-saved
registers. According to MSDN, leaf functions can be unwound simply by
simulating a return.

Change-Id: Ic0503e2aca90b0ba5799133ea8439f1b5f2eefda
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3489332
Reviewed-by: Mark Mentovai <mark@chromium.org>
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
This commit is contained in:
Ivan Penkov 2022-02-24 20:49:43 +00:00
parent 88f5fc451e
commit 622a582fa6
3 changed files with 53 additions and 4 deletions

View file

@ -90,6 +90,11 @@ class StackwalkerAMD64 : public Stackwalker {
// of the returned frame. Return NULL on failure.
StackFrameAMD64* GetCallerByStackScan(const vector<StackFrame*>& frames);
// Trying to simulate a return. The caller takes ownership of the returned
// frame. Return NULL on failure.
StackFrameAMD64* GetCallerBySimulatingReturn(
const vector<StackFrame*>& frames);
// Stores the CPU context corresponding to the innermost stack frame to
// be returned by GetContextFrame.
const MDRawContextAMD64* context_;