HomePhabricator

Support unwinding from inline assembly

Authored by cynecx on May 13 2021, 11:05 AM.

Description

Support unwinding from inline assembly

I've taken the following steps to add unwinding support from inline assembly:

  1. Add a new unwind "attribute" (like sideeffect) to the asm syntax:
invoke void asm sideeffect unwind "call thrower", "~{dirflag},~{fpsr},~{flags}"()
    to label %exit unwind label %uexit

2.) Add Bitcode writing/reading support + LLVM-IR parsing.

3.) Emit EHLabels around inline assembly lowering (SelectionDAGBuilder + GlobalISel) when InlineAsm::canThrow is enabled.

4.) Tweak InstCombineCalls/InlineFunction pass to not mark inline assembly "calls" as nounwind.

5.) Add clang support by introducing a new clobber: "unwind", which lower to the canThrow being enabled.

6.) Don't allow unwinding callbr.

Reviewed By: Amanieu

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

Details

Committed
AmanieuMay 13 2021, 11:13 AM
Reviewer
Amanieu
Differential Revision
D95745: Support unwinding from inline assembly
Parents
rG9d3eb7885d91: [NFC] Try to fix CodeGenCXX/thunk-wrong-this.cpp test
Branches
Unknown
Tags
Unknown