From b26af943994b09fc3cfe6260221126e13a277f6e Mon Sep 17 00:00:00 2001 From: Makoto Kato Date: Mon, 28 Mar 2011 17:33:53 -0700 Subject: [PATCH] Bug 636296 - Fix forceReturn trampoline on Win64/Solaris (r=dvander) --HG-- extra : rebase_source : 85846343b38031931adafb7e44bc8983fdd3472c --- js/src/methodjit/InvokeHelpers.cpp | 8 ++------ js/src/methodjit/MethodJIT.h | 12 +++++++----- js/src/methodjit/StubCalls.cpp | 16 ++-------------- 3 files changed, 11 insertions(+), 25 deletions(-) diff --git a/js/src/methodjit/InvokeHelpers.cpp b/js/src/methodjit/InvokeHelpers.cpp index 25304b5564c0..24153ba1dbc2 100644 --- a/js/src/methodjit/InvokeHelpers.cpp +++ b/js/src/methodjit/InvokeHelpers.cpp @@ -523,8 +523,7 @@ js_InternalThrow(VMFrame &f) case JSTRAP_RETURN: cx->clearPendingException(); cx->fp()->setReturnValue(rval); - return JS_FUNC_TO_DATA_PTR(void *, - cx->jaegerCompartment()->forceReturnTrampoline()); + return cx->jaegerCompartment()->forceReturnFromExternC(); case JSTRAP_THROW: cx->setPendingException(rval); @@ -1044,10 +1043,7 @@ RunTracer(VMFrame &f) if (FrameIsFinished(cx)) { if (!HandleFinishedFrame(f, entryFrame)) THROWV(NULL); - - void *retPtr = JS_FUNC_TO_DATA_PTR(void *, - cx->jaegerCompartment()->forceReturnTrampoline()); - *f.returnAddressLocation() = retPtr; + *f.returnAddressLocation() = cx->jaegerCompartment()->forceReturnFromFastCall(); return NULL; } diff --git a/js/src/methodjit/MethodJIT.h b/js/src/methodjit/MethodJIT.h index 32e7f75c7fff..54ae53532cbd 100644 --- a/js/src/methodjit/MethodJIT.h +++ b/js/src/methodjit/MethodJIT.h @@ -200,15 +200,17 @@ class JaegerCompartment { activeFrame_ = activeFrame_->previous; } - Trampolines::TrampolinePtr forceReturnTrampoline() const { - return trampolines.forceReturn; + void *forceReturnFromExternC() const { + return JS_FUNC_TO_DATA_PTR(void *, trampolines.forceReturn); } + void *forceReturnFromFastCall() const { #if (defined(JS_NO_FASTCALL) && defined(JS_CPU_X86)) || defined(_WIN64) - Trampolines::TrampolinePtr forceReturnFastTrampoline() const { - return trampolines.forceReturnFast; - } + return JS_FUNC_TO_DATA_PTR(void *, trampolines.forceReturnFast); +#else + return JS_FUNC_TO_DATA_PTR(void *, trampolines.forceReturn); #endif + } }; /* diff --git a/js/src/methodjit/StubCalls.cpp b/js/src/methodjit/StubCalls.cpp index b56a8610e9d6..fad8baf6c361 100644 --- a/js/src/methodjit/StubCalls.cpp +++ b/js/src/methodjit/StubCalls.cpp @@ -1178,13 +1178,7 @@ stubs::Debugger(VMFrame &f, jsbytecode *pc) case JSTRAP_RETURN: f.cx->clearPendingException(); f.cx->fp()->setReturnValue(rval); -#if (defined(JS_NO_FASTCALL) && defined(JS_CPU_X86)) || defined(_WIN64) - *f.returnAddressLocation() = JS_FUNC_TO_DATA_PTR(void *, - f.cx->jaegerCompartment()->forceReturnFastTrampoline()); -#else - *f.returnAddressLocation() = JS_FUNC_TO_DATA_PTR(void *, - f.cx->jaegerCompartment()->forceReturnTrampoline()); -#endif + *f.returnAddressLocation() = f.cx->jaegerCompartment()->forceReturnFromFastCall(); break; case JSTRAP_ERROR: @@ -1238,13 +1232,7 @@ stubs::Trap(VMFrame &f, uint32 trapTypes) case JSTRAP_RETURN: f.cx->clearPendingException(); f.cx->fp()->setReturnValue(rval); -#if (defined(JS_NO_FASTCALL) && defined(JS_CPU_X86)) || defined(_WIN64) - *f.returnAddressLocation() = JS_FUNC_TO_DATA_PTR(void *, - f.cx->jaegerCompartment()->forceReturnFastTrampoline()); -#else - *f.returnAddressLocation() = JS_FUNC_TO_DATA_PTR(void *, - f.cx->jaegerCompartment()->forceReturnTrampoline()); -#endif + *f.returnAddressLocation() = f.cx->jaegerCompartment()->forceReturnFromFastCall(); break; case JSTRAP_ERROR: