зеркало из https://github.com/mozilla/gecko-dev.git
Bug 636296 - Fix forceReturn trampoline on Win64/Solaris (r=dvander)
--HG-- extra : rebase_source : 85846343b38031931adafb7e44bc8983fdd3472c
This commit is contained in:
Родитель
26d7f10534
Коммит
b26af94399
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче