[Fuzzer] Improve crash unwinding on Fuchsia

Authored by phosek on Jul 18 2018, 12:20 PM.


[Fuzzer] Improve crash unwinding on Fuchsia

Fuchsia doesn't have signals; instead it expects processes to have a
dedicated exception thread that binds to the process' exception port and
waits for exception packets to be delivered. On the other hand,
libFuzzer and sanitizer_common use expect to collect crash information
via libunwind from the same thread that caused the exception.

The long term fix is to improve support for remote unwinding in
libunbwind, plumb this through sanitizer_common and libFuzzer, and
handle the exception exclusively on the exception thread. In the
meantime, this revision has the exception thread "resurrect" the
crashing thread by:

  • saving its general purpose register state onto the crashing thread's stack,
  • setting the crashing thread's program counter to an assembly trampoline with the CFI information needed by libunwind, and
  • resuming the crashed thread.

Patch By: aarongreen

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

llvm-svn: 337418


phosekJul 18 2018, 12:20 PM
Differential Revision
D48509: Improve crash unwinding on Fuchsia
rG3a37cb54e02c: [analyzer] Remove a debug print that was accidentally left around.