HomePhabricator

[WebAssembly] Use Windows EH instructions for Wasm EH

Description

[WebAssembly] Use Windows EH instructions for Wasm EH

Summary:
Because wasm control flow needs to be structured, using WinEH
instructions to support wasm EH brings several benefits. This patch
makes wasm EH uses Windows EH instructions, with some changes:

  1. Because wasm uses a single catch block to catch all C++ exceptions, this merges all catch clauses into a single catchpad, within which we test the EH selector as in Itanium EH.
  2. Generates a call to __clang_call_terminate in case a cleanup throws. Wasm does not have a runtime to handle this.
  3. In case there is no catch-all clause, inserts a call to __cxa_rethrow at the end of a catchpad in order to unwind to an enclosing EH scope.

Reviewers: majnemer, dschuff

Subscribers: jfb, sbc100, jgravelle-google, sunfish, cfe-commits

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

Details

Committed
aheejinMay 31 2018, 3:18 PM
Differential Revision
D44931: [WebAssembly] Use Windows EH instructions for Wasm EH
Branches
Unknown
Tags
Unknown