[libc++abi] Simplify __gxx_personality_v0
authorFangrui Song <i@maskray.me>
Thu, 7 Jan 2021 22:05:46 +0000 (14:05 -0800)
committerFangrui Song <i@maskray.me>
Thu, 7 Jan 2021 22:05:46 +0000 (14:05 -0800)
commit85f86e8a3cf9e05347691fdde30e9e98a6657d92
tree7030bae1fcac98290f5b342684642e0655bc18e4
parent63b42a0514567d24df617e4587e80e4564ebf120
[libc++abi] Simplify __gxx_personality_v0

In three cases we call `scan_eh_tab` to parse LSDA:

* `actions & _UA_SEARCH_PHASE`
* `actions & _UA_CLEANUP_PHASE && actions & _UA_HANDLER_FRAME && !native_exception`
* `actions & _UA_CLEANUP_PHASE && !(actions & _UA_HANDLER_FRAME)`

Check
`actions & _UA_CLEANUP_PHASE && actions & _UA_HANDLER_FRAME && native_exception` first,
then we can move three `scan_eh_tab` into one place.

Another simplification is that we can check whether the result of `scan_eh_tab`
is `_UA_CONTINUE_UNWIND` or `_UA_FATAL_PHASE1_ERROR` first. Then many of the
original checks will be dead and can thus be deleted.

Reviewed By: #libc_abi, ldionne

Differential Revision: https://reviews.llvm.org/D93186
libcxxabi/src/cxa_personality.cpp