From 6583b1623b6e146b94a9e184b44f0178805eb5d0 Mon Sep 17 00:00:00 2001 From: "Jake.Stine" Date: Wed, 7 Oct 2009 02:44:37 +0000 Subject: [PATCH] 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 --- pcsx2/x86/ix86-32/iR5900-32.cpp | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/pcsx2/x86/ix86-32/iR5900-32.cpp b/pcsx2/x86/ix86-32/iR5900-32.cpp index c697ff3c4d..5d64f48c1f 100644 --- a/pcsx2/x86/ix86-32/iR5900-32.cpp +++ b/pcsx2/x86/ix86-32/iR5900-32.cpp @@ -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& )