diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp index 1cd1f5a79dcf..dc1757251019 100644 --- a/js/src/builtin/TestingFunctions.cpp +++ b/js/src/builtin/TestingFunctions.cpp @@ -2527,7 +2527,7 @@ testingFunc_inIon(JSContext* cx, unsigned argc, Value* vp) ScriptFrameIter iter(cx); if (!iter.done() && iter.isIon()) { // Reset the counter of the IonScript's script. - jit::JSJitFrameIter jitIter(cx); + jit::JSJitFrameIter jitIter(cx->activation()->asJit()); ++jitIter; jitIter.script()->resetWarmUpResetCounter(); } else { diff --git a/js/src/jit/BaselineBailouts.cpp b/js/src/jit/BaselineBailouts.cpp index c7536cb993b4..3a91cf020e3e 100644 --- a/js/src/jit/BaselineBailouts.cpp +++ b/js/src/jit/BaselineBailouts.cpp @@ -1900,7 +1900,7 @@ jit::FinishBailoutToBaseline(BaselineBailoutInfo* bailoutInfo) RootedScript outerScript(cx, nullptr); MOZ_ASSERT(cx->currentlyRunningInJit()); - JSJitFrameIter iter(cx); + JSJitFrameIter iter(cx->activation()->asJit()); uint8_t* outerFp = nullptr; // Iter currently points at the exit frame. Get the previous frame @@ -1962,7 +1962,7 @@ jit::FinishBailoutToBaseline(BaselineBailoutInfo* bailoutInfo) // on. JitActivation* act = cx->activation()->asJit(); if (act->hasRematerializedFrame(outerFp)) { - JSJitFrameIter iter(cx); + JSJitFrameIter iter(cx->activation()->asJit()); size_t inlineDepth = numFrames; bool ok = true; while (inlineDepth > 0) { diff --git a/js/src/jit/BaselineDebugModeOSR.cpp b/js/src/jit/BaselineDebugModeOSR.cpp index f8ff5f237fd0..5a6d2d4b9a11 100644 --- a/js/src/jit/BaselineDebugModeOSR.cpp +++ b/js/src/jit/BaselineDebugModeOSR.cpp @@ -1186,7 +1186,7 @@ JitRuntime::generateBaselineDebugModeOSRHandler(JSContext* cx, uint32_t* noFrame /* static */ void DebugModeOSRVolatileJitFrameIter::forwardLiveIterators(const CooperatingContext& cx, - uint8_t* oldAddr, uint8_t* newAddr) + uint8_t* oldAddr, uint8_t* newAddr) { DebugModeOSRVolatileJitFrameIter* iter; for (iter = cx.context()->liveVolatileJitFrameIter_; iter; iter = iter->prev) diff --git a/js/src/jit/BaselineFrame.cpp b/js/src/jit/BaselineFrame.cpp index 4b31580815ff..7f8c619ebd42 100644 --- a/js/src/jit/BaselineFrame.cpp +++ b/js/src/jit/BaselineFrame.cpp @@ -142,7 +142,7 @@ BaselineFrame::initForOsr(InterpreterFrame* fp, uint32_t numStackValues) // debugger, wants a valid return address, but it's okay to just pick one. // In debug mode there's always at least 1 ICEntry (since there are always // debug prologue/epilogue calls). - JSJitFrameIter frame(cx); + JSJitFrameIter frame(cx->activation()->asJit()); MOZ_ASSERT(frame.returnAddress() == nullptr); BaselineScript* baseline = fp->script()->baselineScript(); frame.current()->setReturnAddress(baseline->returnAddressForIC(baseline->icEntry(0))); diff --git a/js/src/jit/IonCacheIRCompiler.cpp b/js/src/jit/IonCacheIRCompiler.cpp index b8a53f776083..83c5a9274fc3 100644 --- a/js/src/jit/IonCacheIRCompiler.cpp +++ b/js/src/jit/IonCacheIRCompiler.cpp @@ -327,7 +327,7 @@ CacheRegisterAllocator::restoreIonLiveRegisters(MacroAssembler& masm, LiveRegist static void* GetReturnAddressToIonCode(JSContext* cx) { - JSJitFrameIter frame(cx); + JSJitFrameIter frame(cx->activation()->asJit()); MOZ_ASSERT(frame.type() == JitFrame_Exit, "An exit frame is expected as update functions are called with a VMFunction."); diff --git a/js/src/jit/JSJitFrameIter.cpp b/js/src/jit/JSJitFrameIter.cpp index f1406a867ff1..88c57f15c029 100644 --- a/js/src/jit/JSJitFrameIter.cpp +++ b/js/src/jit/JSJitFrameIter.cpp @@ -31,11 +31,6 @@ JSJitFrameIter::JSJitFrameIter(const JitActivation* activation) } } -JSJitFrameIter::JSJitFrameIter(JSContext* cx) - : JSJitFrameIter(cx->activation()->asJit()) -{ -} - bool JSJitFrameIter::checkInvalidation() const { diff --git a/js/src/jit/JSJitFrameIter.h b/js/src/jit/JSJitFrameIter.h index fe55e99e833b..1ac3d99a0268 100644 --- a/js/src/jit/JSJitFrameIter.h +++ b/js/src/jit/JSJitFrameIter.h @@ -112,7 +112,6 @@ class JSJitFrameIter public: // See comment above the class. explicit JSJitFrameIter(const JitActivation* activation); - explicit JSJitFrameIter(JSContext* cx); // Used only by DebugModeOSRVolatileJitFrameIter. void exchangeReturnAddressIfMatch(uint8_t* oldAddr, uint8_t* newAddr) { diff --git a/js/src/jit/JitFrames-inl.h b/js/src/jit/JitFrames-inl.h index 251714e62f8c..7f1efbae77c4 100644 --- a/js/src/jit/JitFrames-inl.h +++ b/js/src/jit/JitFrames-inl.h @@ -29,7 +29,7 @@ SafepointIndex::resolve() inline BaselineFrame* GetTopBaselineFrame(JSContext* cx) { - JSJitFrameIter frame(cx); + JSJitFrameIter frame(cx->activation()->asJit()); MOZ_ASSERT(frame.type() == JitFrame_Exit); ++frame; if (frame.isBaselineStub()) diff --git a/js/src/jit/JitFrames.cpp b/js/src/jit/JitFrames.cpp index 7011ad84dfc8..01e685b9e5b3 100644 --- a/js/src/jit/JitFrames.cpp +++ b/js/src/jit/JitFrames.cpp @@ -746,7 +746,7 @@ HandleException(ResumeFromException* rfe) // see this frame when they use ScriptFrameIter, and (2) // ScriptFrameIter does not crash when accessing an IonScript // that's destroyed by the ionScript->decref call. - EnsureBareExitFrame(cx, current); + EnsureBareExitFrame(cx->activation()->asJit(), current); } if (overrecursed) { @@ -763,11 +763,11 @@ HandleException(ResumeFromException* rfe) // Turns a JitFrameLayout into an ExitFrameLayout. Note that it has to be a // bare exit frame so it's ignored by TraceJitExitFrame. void -EnsureBareExitFrame(JSContext* cx, JitFrameLayout* frame) +EnsureBareExitFrame(JitActivation* act, JitFrameLayout* frame) { ExitFrameLayout* exitFrame = reinterpret_cast(frame); - if (cx->activation()->asJit()->jsExitFP() == (uint8_t*)frame) { + if (act->jsExitFP() == (uint8_t*)frame) { // If we already called this function for the current frame, do // nothing. MOZ_ASSERT(exitFrame->isBareExit()); @@ -775,17 +775,17 @@ EnsureBareExitFrame(JSContext* cx, JitFrameLayout* frame) } #ifdef DEBUG - JSJitFrameIter iter(cx); + JSJitFrameIter iter(act); while (!iter.isScripted()) ++iter; MOZ_ASSERT(iter.current() == frame, "|frame| must be the top JS frame"); - MOZ_ASSERT(!!cx->activation()->asJit()->jsExitFP()); - MOZ_ASSERT((uint8_t*)exitFrame->footer() >= cx->activation()->asJit()->jsExitFP(), + MOZ_ASSERT(!!act->jsExitFP()); + MOZ_ASSERT((uint8_t*)exitFrame->footer() >= act->jsExitFP(), "Must have space for ExitFooterFrame before jsExitFP"); #endif - cx->activation()->asJit()->setJSExitFP((uint8_t*)frame); + act->setJSExitFP((uint8_t*)frame); exitFrame->footer()->setBareExitFrame(); MOZ_ASSERT(exitFrame->isBareExit()); } diff --git a/js/src/jit/JitFrames.h b/js/src/jit/JitFrames.h index 1b616645dbee..ff313d503ca3 100644 --- a/js/src/jit/JitFrames.h +++ b/js/src/jit/JitFrames.h @@ -284,7 +284,7 @@ struct ResumeFromException void HandleException(ResumeFromException* rfe); -void EnsureBareExitFrame(JSContext* cx, JitFrameLayout* frame); +void EnsureBareExitFrame(JitActivation* act, JitFrameLayout* frame); void TraceJitActivations(JSContext* cx, const CooperatingContext& target, JSTracer* trc); @@ -312,7 +312,7 @@ MakeFrameDescriptor(uint32_t frameSize, FrameType type, uint32_t headerSize) inline JSScript* GetTopJitJSScript(JSContext* cx) { - JSJitFrameIter frame(cx); + JSJitFrameIter frame(cx->activation()->asJit()); MOZ_ASSERT(frame.type() == JitFrame_Exit); ++frame; diff --git a/js/src/jit/VMFunctions.cpp b/js/src/jit/VMFunctions.cpp index 28d37b990d47..b0a9755a5bd8 100644 --- a/js/src/jit/VMFunctions.cpp +++ b/js/src/jit/VMFunctions.cpp @@ -391,7 +391,7 @@ ArrayPushDense(JSContext* cx, HandleArrayObject arr, HandleValue v, uint32_t* le // possible the setOrExtendDenseElements call already invalidated the // IonScript. JSJitFrameIter::ionScript works when the script is invalidated // so we use that instead. - JSJitFrameIter frame(cx); + JSJitFrameIter frame(cx->activation()->asJit()); MOZ_ASSERT(frame.type() == JitFrame_Exit); ++frame; IonScript* ionScript = frame.ionScript(); @@ -872,7 +872,7 @@ DebugEpilogue(JSContext* cx, BaselineFrame* frame, jsbytecode* pc, bool ok) // Pop this frame by updating packedExitFP, so that the exception // handling code will start at the previous frame. JitFrameLayout* prefix = frame->framePrefix(); - EnsureBareExitFrame(cx, prefix); + EnsureBareExitFrame(cx->activation()->asJit(), prefix); return false; }