Bug 636296 - Fix forceReturn trampoline on Win64/Solaris (r=dvander)

--HG--
extra : rebase_source : 85846343b38031931adafb7e44bc8983fdd3472c
This commit is contained in:
Makoto Kato 2011-03-28 17:33:53 -07:00
parent 8d4385b7fe
commit 7a5360fad1
3 changed files with 11 additions and 25 deletions

View File

@ -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;
}

View File

@ -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
}
};
/*

View File

@ -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: