Linux: Experimental fix for exception propagation out of the recompiler; this version is based on the theory that the cause is GCC optimizing out exception handling because it sees the inline asm "call DispatcherReg;" as a no-throw(). So I removed the asm and replaced it with a direct C++ invocation. This should work since the new rec never exits except via catch() clauses anyway, so pushing/popping clobbered registers isn't needed.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1973 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-10-07 02:44:37 +00:00
parent 8de443878a
commit 6583b1623b
1 changed files with 1 additions and 24 deletions

View File

@ -600,30 +600,7 @@ static void recExecute()
}
#else // _MSC_VER
__asm__ __volatile__
(
// We should be able to rely on GAS syntax (the register clobber list) as a
// replacement for manual push/pop of unpreserved registers.
// EBP note: As I feared, EBP is "required" for C++ excepion handling in Linux, and trying
// to issue a clobber specifier for it causes an error. We really need to find a way to
// disable EBP regalloc in iCore. --air
".intel_syntax noprefix\n"
//"push ebx\n"
//"push esi\n"
//"push edi\n"
"push ebp\n"
"call DispatcherReg\n"
"pop ebp\n"
//"pop edi\n"
//"pop esi\n"
//"pop ebx\n"
".att_syntax\n"
: : : "eax", "ebx", "ecx", "edx", "esi", "edi", "memory" );
DispatcherReg();
#endif
}
catch( Exception::ForceDispatcherReg& )