mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-18 12:09:38 +00:00
The ARM stuff already calls the Resume function, not the Resume_or_Rethrow. It
turns out that it could cause an infinite loop in some situations. If this code is triggered and it converts a cleanup into a catchall, but that cleanup was in already in a cleanup, then the _Unwind_SjLj_Resume could infinite loop. I.e., the code doesn't consume the exception object and passes it on to _Unwind_SjLj_Resume. But _USjLjR expects it to be consumed (since it's landing at a catchall instead of a cleanup). So it uses the values that are presently there, which are the values that tell it to jump to the fake landing pad. <rdar://problem/9508402> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132381 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c20bdf194a
commit
edac4923dc
@ -252,10 +252,7 @@ bool DwarfEHPrepare::HandleURoRInvokes() {
|
||||
|
||||
if (!URoR) {
|
||||
URoR = F->getParent()->getFunction("_Unwind_Resume_or_Rethrow");
|
||||
if (!URoR) {
|
||||
URoR = F->getParent()->getFunction("_Unwind_SjLj_Resume");
|
||||
if (!URoR) return CleanupSelectors(CatchAllSels);
|
||||
}
|
||||
if (!URoR) return CleanupSelectors(CatchAllSels);
|
||||
}
|
||||
|
||||
SmallPtrSet<InvokeInst*, 32> URoRInvokes;
|
||||
|
Loading…
x
Reference in New Issue
Block a user