You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[libunwind] Fix execution flow imbalance when using C++ Exceptions
This patch should fix tracing support when using C++ Exceptions.
When unwinding C++ Exceptions, libunwind would have a first searching
phase to detect its caller landing pad using the personality function,
and a second phase that returns to the landing pad and restore the
register context by also updating the link register to point to the
landing pad address found inthe first phase.
Since it changes the link register value and returns all the frames
that have been called in libunwind, it causes an imbalance in the execution
flow which breaks Apple Processor Trace analysis and affects its
clients, like Instruments.app.
This patch addresses the issue by generating the right amount of `ret`
instructions for every function called in libcxx & libunwind to
rebalance the execution flow, right before returning to the catch block.
rdar://131181678
rdar://131622012
Signed-off-by: Med Ismail Bennani <[email protected]>
0 commit comments