Changeset 154156 in webkit for trunk/Source/JavaScriptCore
- Timestamp:
- Aug 15, 2013, 6:47:41 PM (12 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r154143 r154156 1 2013-08-15 Mark Lam <[email protected]> 2 3 Fix crash when performing activation tearoff. 4 https://bugs.webkit.org/show_bug.cgi?id=119848 5 6 Reviewed by Oliver Hunt. 7 8 The activation tearoff crash was due to a bug in the baseline JIT. 9 If we have a scenario where the a baseline JIT frame calls a LLINT 10 frame, an exception may be thrown while in the LLINT. 11 12 Interpreter::throwException() which handles the exception will unwind 13 all frames until it finds a catcher or sees a host frame. When we 14 return from the LLINT to the baseline JIT code, the baseline JIT code 15 errorneously sets topCallFrame to the value in its call frame register, 16 and starts unwinding the stack frames that have already been unwound. 17 18 The fix is: 19 1. Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException. 20 This is a more accurate description of what this runtime function 21 is supposed to do i.e. it handles the exception which include doing 22 nothing (if there are no more frames to unwind). 23 2. Fix up topCallFrame values so that the HostCallFrameFlag is never 24 set on it. 25 3. Reloading the call frame register from topCallFrame when we're 26 returning from a callee and detect exception handling in progress. 27 28 * interpreter/Interpreter.cpp: 29 (JSC::Interpreter::unwindCallFrame): 30 - Ensure that topCallFrame is not set with the HostCallFrameFlag. 31 (JSC::Interpreter::getStackTrace): 32 * interpreter/Interpreter.h: 33 (JSC::TopCallFrameSetter::TopCallFrameSetter): 34 (JSC::TopCallFrameSetter::~TopCallFrameSetter): 35 (JSC::NativeCallFrameTracer::NativeCallFrameTracer): 36 - Ensure that topCallFrame is not set with the HostCallFrameFlag. 37 * jit/JIT.h: 38 * jit/JITExceptions.cpp: 39 (JSC::uncaughtExceptionHandler): 40 - Convenience function to get the handler for uncaught exceptions. 41 * jit/JITExceptions.h: 42 * jit/JITInlines.h: 43 (JSC::JIT::reloadCallFrameFromTopCallFrame): 44 * jit/JITOpcodes32_64.cpp: 45 (JSC::JIT::privateCompileCTINativeCall): 46 - Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException. 47 * jit/JITStubs.cpp: 48 (JSC::throwExceptionFromOpCall): 49 - Ensure that topCallFrame is not set with the HostCallFrameFlag. 50 (JSC::cti_vm_handle_exception): 51 - Check for the case when there are no more frames to unwind. 52 * jit/JITStubs.h: 53 * jit/JITStubsARM.h: 54 * jit/JITStubsARMv7.h: 55 * jit/JITStubsMIPS.h: 56 * jit/JITStubsSH4.h: 57 * jit/JITStubsX86.h: 58 * jit/JITStubsX86_64.h: 59 - Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException. 60 * jit/SlowPathCall.h: 61 (JSC::JITSlowPathCall::call): 62 - reload cfr from topcallFrame when handling an exception. 63 - Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException. 64 * jit/ThunkGenerators.cpp: 65 (JSC::nativeForGenerator): 66 * llint/LowLevelInterpreter32_64.asm: 67 * llint/LowLevelInterpreter64.asm: 68 - reload cfr from topcallFrame when handling an exception. 69 * runtime/VM.cpp: 70 (JSC::VM::VM): 71 - Ensure that topCallFrame is not set with the HostCallFrameFlag. 72 1 73 2013-08-15 Filip Pizlo <[email protected]> 2 74 -
trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp
r154038 r154156 399 399 400 400 CallFrame* callerFrame = callFrame->callerFrame(); 401 callFrame->vm().topCallFrame = callerFrame ;401 callFrame->vm().topCallFrame = callerFrame->removeHostCallFrameFlag(); 402 402 return !callerFrame->hasHostCallFrameFlag(); 403 403 } … … 532 532 { 533 533 VM& vm = m_vm; 534 CallFrame* callFrame = vm.topCallFrame->removeHostCallFrameFlag(); 534 ASSERT(!vm.topCallFrame->hasHostCallFrameFlag()); 535 CallFrame* callFrame = vm.topCallFrame; 535 536 if (!callFrame) 536 537 return; -
trunk/Source/JavaScriptCore/interpreter/Interpreter.h
r153825 r154156 136 136 class TopCallFrameSetter { 137 137 public: 138 TopCallFrameSetter(VM& global, CallFrame* callFrame) 139 : vm(global) 140 , oldCallFrame(global.topCallFrame) 141 { 142 global.topCallFrame = callFrame; 138 TopCallFrameSetter(VM& currentVM, CallFrame* callFrame) 139 : vm(currentVM) 140 , oldCallFrame(currentVM.topCallFrame) 141 { 142 ASSERT(!callFrame->hasHostCallFrameFlag()); 143 currentVM.topCallFrame = callFrame; 143 144 } 144 145 145 146 ~TopCallFrameSetter() 146 147 { 148 ASSERT(!oldCallFrame->hasHostCallFrameFlag()); 147 149 vm.topCallFrame = oldCallFrame; 148 150 } … … 154 156 class NativeCallFrameTracer { 155 157 public: 156 ALWAYS_INLINE NativeCallFrameTracer(VM* global, CallFrame* callFrame)157 { 158 ASSERT( global);158 ALWAYS_INLINE NativeCallFrameTracer(VM* vm, CallFrame* callFrame) 159 { 160 ASSERT(vm); 159 161 ASSERT(callFrame); 160 global->topCallFrame = callFrame; 162 ASSERT(!callFrame->hasHostCallFrameFlag()); 163 vm->topCallFrame = callFrame; 161 164 } 162 165 }; -
trunk/Source/JavaScriptCore/jit/JIT.h
r154127 r154156 839 839 void restoreArgumentReferenceForTrampoline(); 840 840 void updateTopCallFrame(); 841 void reloadCallFrameFromTopCallFrame(); 841 842 842 843 Call emitNakedCall(CodePtr function = CodePtr()); -
trunk/Source/JavaScriptCore/jit/JITExceptions.cpp
r153646 r154156 61 61 #endif 62 62 63 ExceptionHandler uncaughtExceptionHandler() 64 { 65 void* catchRoutine = FunctionPtr(LLInt::getCodePtr(ctiOpThrowNotCaught)).value(); 66 ExceptionHandler exceptionHandler = { 0, catchRoutine}; 67 return exceptionHandler; 68 } 69 63 70 ExceptionHandler genericThrow(VM* vm, ExecState* callFrame, JSValue exceptionValue, unsigned vPCIndex) 64 71 { -
trunk/Source/JavaScriptCore/jit/JITExceptions.h
r153646 r154156 58 58 #endif 59 59 60 ExceptionHandler uncaughtExceptionHandler(); 60 61 ExceptionHandler genericThrow(VM*, ExecState*, JSValue exceptionValue, unsigned vPCIndex); 61 62 -
trunk/Source/JavaScriptCore/jit/JITInlines.h
r153231 r154156 192 192 } 193 193 194 ALWAYS_INLINE void JIT::reloadCallFrameFromTopCallFrame() 195 { 196 loadPtr(&m_vm->topCallFrame, callFrameRegister); 197 } 198 194 199 ALWAYS_INLINE void JIT::restoreArgumentReferenceForTrampoline() 195 200 { -
trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
r153237 r154156 171 171 storePtr(callFrameRegister, &m_vm->topCallFrame); 172 172 173 move(TrustedImmPtr(FunctionPtr(ctiVM ThrowTrampolineSlowpath).value()), regT1);173 move(TrustedImmPtr(FunctionPtr(ctiVMHandleException).value()), regT1); 174 174 jump(regT1); 175 175 -
trunk/Source/JavaScriptCore/jit/JITStubs.cpp
r154016 r154156 418 418 template<typename T> static T throwExceptionFromOpCall(JITStackFrame& jitStackFrame, CallFrame* newCallFrame, ReturnAddressPtr& returnAddressSlot, ErrorFunctor& createError ) 419 419 { 420 CallFrame* callFrame = newCallFrame->callerFrame() ;420 CallFrame* callFrame = newCallFrame->callerFrame()->removeHostCallFrameFlag(); 421 421 jitStackFrame.callFrame = callFrame; 422 422 callFrame->vm().topCallFrame = callFrame; … … 2160 2160 2161 2161 #if USE(JSVALUE32_64) 2162 EncodedExceptionHandler JIT_STUB cti_vm_throw_slowpath(CallFrame* callFrame) 2163 { 2162 EncodedExceptionHandler JIT_STUB cti_vm_handle_exception(CallFrame* callFrame) 2163 { 2164 ASSERT(!callFrame->hasHostCallFrameFlag()); 2165 if (!callFrame) { 2166 // The entire stack has already been unwound. Nothing more to handle. 2167 return uncaughtExceptionHandler(); 2168 } 2169 2164 2170 VM* vm = callFrame->codeBlock()->vm(); 2165 2171 vm->topCallFrame = callFrame; … … 2167 2173 } 2168 2174 #else 2169 ExceptionHandler JIT_STUB cti_vm_throw_slowpath(CallFrame* callFrame) 2170 { 2175 ExceptionHandler JIT_STUB cti_vm_handle_exception(CallFrame* callFrame) 2176 { 2177 ASSERT(!callFrame->hasHostCallFrameFlag()); 2178 if (!callFrame) { 2179 // The entire stack has already been unwound. Nothing more to handle. 2180 return uncaughtExceptionHandler(); 2181 } 2182 2171 2183 VM* vm = callFrame->codeBlock()->vm(); 2172 2184 vm->topCallFrame = callFrame; -
trunk/Source/JavaScriptCore/jit/JITStubs.h
r154052 r154156 311 311 312 312 extern "C" void ctiVMThrowTrampoline(); 313 extern "C" void ctiVM ThrowTrampolineSlowpath();313 extern "C" void ctiVMHandleException(); 314 314 extern "C" void ctiOpThrowNotCaught(); 315 315 extern "C" EncodedJSValue ctiTrampoline(void* code, JSStack*, CallFrame*, void* /*unused1*/, void* /*unused2*/, VM*); … … 424 424 425 425 #if USE(JSVALUE32_64) 426 EncodedExceptionHandler JIT_STUB cti_vm_ throw_slowpath(CallFrame*) REFERENCED_FROM_ASM WTF_INTERNAL;426 EncodedExceptionHandler JIT_STUB cti_vm_handle_exception(CallFrame*) REFERENCED_FROM_ASM WTF_INTERNAL; 427 427 #else 428 ExceptionHandler JIT_STUB cti_vm_ throw_slowpath(CallFrame*) REFERENCED_FROM_ASM WTF_INTERNAL;428 ExceptionHandler JIT_STUB cti_vm_handle_exception(CallFrame*) REFERENCED_FROM_ASM WTF_INTERNAL; 429 429 #endif 430 430 -
trunk/Source/JavaScriptCore/jit/JITStubsARM.h
r153745 r154156 199 199 asm ( 200 200 ".text" "\n" 201 ".globl " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"202 HIDE_SYMBOL(ctiVM ThrowTrampolineSlowpath) "\n"203 INLINE_ARM_FUNCTION(ctiVM ThrowTrampolineSlowpath)204 SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) ":" "\n"201 ".globl " SYMBOL_STRING(ctiVMHandleException) "\n" 202 HIDE_SYMBOL(ctiVMHandleException) "\n" 203 INLINE_ARM_FUNCTION(ctiVMHandleException) 204 SYMBOL_STRING(ctiVMHandleException) ":" "\n" 205 205 "mov r0, r5" "\n" 206 "bl " SYMBOL_STRING(cti_vm_ throw_slowpath) "\n"207 // When cti_vm_ throw_slowpathreturns, r0 has callFrame and r1 has handler address206 "bl " SYMBOL_STRING(cti_vm_handle_exception) "\n" 207 // When cti_vm_handle_exception returns, r0 has callFrame and r1 has handler address 208 208 "mov r5, r0" "\n" 209 209 "bx r1" "\n" … … 460 460 MSVC_BEGIN( EXPORT ctiVMThrowTrampoline) 461 461 MSVC_BEGIN( EXPORT ctiOpThrowNotCaught) 462 MSVC_BEGIN( EXPORT ctiVM ThrowTrampolineSlowpath)463 MSVC_BEGIN( IMPORT cti_vm_ throw_slowpath)462 MSVC_BEGIN( EXPORT ctiVMHandleException) 463 MSVC_BEGIN( IMPORT cti_vm_handle_exception) 464 464 MSVC_BEGIN() 465 465 MSVC_BEGIN(ctiTrampoline PROC) … … 489 489 MSVC_BEGIN(ctiVMThrowTrampoline ENDP) 490 490 MSVC_BEGIN() 491 MSVC_BEGIN(ctiVM ThrowTrampolineSlowpathPROC)491 MSVC_BEGIN(ctiVMHandleException PROC) 492 492 MSVC_BEGIN( mov r0, r5) 493 MSVC_BEGIN( bl cti_vm_ throw_slowpath)493 MSVC_BEGIN( bl cti_vm_handle_exception) 494 494 MSVC_BEGIN( mov r5, r0) 495 495 MSVC_BEGIN( bx r1) 496 MSVC_BEGIN(ctiVM ThrowTrampolineSlowpathENDP)496 MSVC_BEGIN(ctiVMHandleException ENDP) 497 497 MSVC_BEGIN() 498 498 -
trunk/Source/JavaScriptCore/jit/JITStubsARMv7.h
r153762 r154156 271 271 ".text" "\n" 272 272 ".align 2" "\n" 273 ".globl " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"274 HIDE_SYMBOL(ctiVM ThrowTrampolineSlowpath) "\n"273 ".globl " SYMBOL_STRING(ctiVMHandleException) "\n" 274 HIDE_SYMBOL(ctiVMHandleException) "\n" 275 275 ".thumb" "\n" 276 ".thumb_func " THUMB_FUNC_PARAM(ctiVM ThrowTrampolineSlowpath) "\n"277 SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) ":" "\n"276 ".thumb_func " THUMB_FUNC_PARAM(ctiVMHandleException) "\n" 277 SYMBOL_STRING(ctiVMHandleException) ":" "\n" 278 278 "mov r0, r5" "\n" 279 "bl " LOCAL_REFERENCE(cti_vm_ throw_slowpath) "\n"280 // When cti_vm_ throw_slowpathreturns, r0 has callFrame and r1 has handler address279 "bl " LOCAL_REFERENCE(cti_vm_handle_exception) "\n" 280 // When cti_vm_handle_exception returns, r0 has callFrame and r1 has handler address 281 281 "mov r5, r0" "\n" 282 282 "bx r1" "\n" -
trunk/Source/JavaScriptCore/jit/JITStubsMIPS.h
r153659 r154156 135 135 ".set nomacro" "\n" 136 136 ".set nomips16" "\n" 137 ".globl " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"138 ".ent " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"139 SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) ":" "\n"137 ".globl " SYMBOL_STRING(ctiVMHandleException) "\n" 138 ".ent " SYMBOL_STRING(ctiVMHandleException) "\n" 139 SYMBOL_STRING(ctiVMHandleException) ":" "\n" 140 140 #if WTF_MIPS_PIC 141 141 ".set macro" "\n" 142 142 ".cpload $25" "\n" 143 "la $25," SYMBOL_STRING(cti_vm_ throw_slowpath) "\n"144 ".set nomacro" "\n" 145 "bal " SYMBOL_STRING(cti_vm_ throw_slowpath) "\n"143 "la $25," SYMBOL_STRING(cti_vm_handle_exception) "\n" 144 ".set nomacro" "\n" 145 "bal " SYMBOL_STRING(cti_vm_handle_exception) "\n" 146 146 "move $4,$16" "\n" 147 147 #else 148 "jal " SYMBOL_STRING(cti_vm_ throw_slowpath) "\n"148 "jal " SYMBOL_STRING(cti_vm_handle_exception) "\n" 149 149 "move $4,$16" "\n" 150 150 #endif 151 // When cti_vm_ throw_slowpathreturns, v0 has callFrame and v1 has handler address151 // When cti_vm_handle_exception returns, v0 has callFrame and v1 has handler address 152 152 "move $16,$2 " "\n" 153 153 "jr $3" "\n" … … 155 155 ".set reorder" "\n" 156 156 ".set macro" "\n" 157 ".end " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"157 ".end " SYMBOL_STRING(ctiVMHandleException) "\n" 158 158 ); 159 159 -
trunk/Source/JavaScriptCore/jit/JITStubsSH4.h
r154052 r154156 108 108 109 109 asm volatile ( 110 ".globl " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"111 HIDE_SYMBOL(ctiVM ThrowTrampolineSlowpath) "\n"112 SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) ":" "\n"113 "mov.l .L2"SYMBOL_STRING(cti_vm_ throw_slowpath)",r0" "\n"110 ".globl " SYMBOL_STRING(ctiVMHandleExceptiom) "\n" 111 HIDE_SYMBOL(ctiVMHandleExceptiom) "\n" 112 SYMBOL_STRING(ctiVMHandleExceptiom) ":" "\n" 113 "mov.l .L2"SYMBOL_STRING(cti_vm_handle_exception)",r0" "\n" 114 114 "mov r14, r4" "\n" 115 115 "mov.l @(r0,r12),r11" "\n" 116 116 "jsr @r11" "\n" 117 // When cti_vm_ throw_slowpathreturns, r0 has callFrame and r1 has handler address117 // When cti_vm_handle_exception returns, r0 has callFrame and r1 has handler address 118 118 "nop" "\n" 119 119 "mov r0, r14" "\n" … … 122 122 "nop" "\n" 123 123 ".align 2" "\n" 124 ".L2"SYMBOL_STRING(cti_vm_ throw_slowpath)":.long " SYMBOL_STRING(cti_vm_throw_slowpath)"@GOT \n"124 ".L2"SYMBOL_STRING(cti_vm_handle_exception)":.long " SYMBOL_STRING(cti_vm_handle_exception)"@GOT \n" 125 125 ); 126 126 -
trunk/Source/JavaScriptCore/jit/JITStubsX86.h
r153527 r154156 87 87 88 88 asm ( 89 ".globl " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"90 HIDE_SYMBOL(ctiVM ThrowTrampolineSlowpath) "\n"91 SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) ":" "\n"89 ".globl " SYMBOL_STRING(ctiVMHandleException) "\n" 90 HIDE_SYMBOL(ctiVMHandleException) "\n" 91 SYMBOL_STRING(ctiVMHandleException) ":" "\n" 92 92 "movl %edi, %ecx" "\n" 93 "call " LOCAL_REFERENCE(cti_vm_ throw_slowpath) "\n"94 // When cti_vm_ throw_slowpathreturns, eax has callFrame and edx has handler address93 "call " LOCAL_REFERENCE(cti_vm_handle_exception) "\n" 94 // When cti_vm_handle_exception returns, eax has callFrame and edx has handler address 95 95 "jmp *%edx" "\n" 96 96 ); … … 305 305 } 306 306 307 __declspec(naked) void ctiVM ThrowTrampolineSlowpath()307 __declspec(naked) void ctiVMHandleException() 308 308 { 309 309 __asm { 310 310 mov ecx, edi; 311 call cti_vm_ throw_slowpath;312 // When cti_vm_ throw_slowpathreturns, eax has callFrame and edx has handler address311 call cti_vm_handle_exception; 312 // When cti_vm_handle_exception returns, eax has callFrame and edx has handler address 313 313 jmp edx 314 314 } -
trunk/Source/JavaScriptCore/jit/JITStubsX86_64.h
r153222 r154156 100 100 101 101 asm ( 102 ".globl " SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) "\n"103 HIDE_SYMBOL(ctiVM ThrowTrampolineSlowpath) "\n"104 SYMBOL_STRING(ctiVM ThrowTrampolineSlowpath) ":" "\n"102 ".globl " SYMBOL_STRING(ctiVMHandleException) "\n" 103 HIDE_SYMBOL(ctiVMHandleException) "\n" 104 SYMBOL_STRING(ctiVMHandleException) ":" "\n" 105 105 "movq %r13, %rdi" "\n" 106 "call " LOCAL_REFERENCE(cti_vm_ throw_slowpath) "\n"107 // When cti_vm_ throw_slowpathreturns, rax has callFrame and rdx has handler address106 "call " LOCAL_REFERENCE(cti_vm_handle_exception) "\n" 107 // When cti_vm_handle_exception returns, rax has callFrame and rdx has handler address 108 108 "jmp *%rdx" "\n" 109 109 ); -
trunk/Source/JavaScriptCore/jit/SlowPathCall.h
r154075 r154156 89 89 JIT::Jump noException = m_jit->branchTest64(JIT::Zero, JIT::AbsoluteAddress(&m_jit->m_codeBlock->vm()->exception)); 90 90 #endif 91 m_jit->move(JIT::TrustedImmPtr(FunctionPtr(ctiVMThrowTrampolineSlowpath).value()), JIT::regT1); 91 m_jit->reloadCallFrameFromTopCallFrame(); 92 m_jit->move(JIT::TrustedImmPtr(FunctionPtr(ctiVMHandleException).value()), JIT::regT1); 92 93 m_jit->jump(JIT::regT1); 93 94 noException.link(m_jit); -
trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp
r153232 r154156 403 403 jit.storePtr(JSInterfaceJIT::callFrameRegister, &vm->topCallFrame); 404 404 405 jit.move(JSInterfaceJIT::TrustedImmPtr(FunctionPtr(ctiVM ThrowTrampolineSlowpath).value()), JSInterfaceJIT::regT1);405 jit.move(JSInterfaceJIT::TrustedImmPtr(FunctionPtr(ctiVMHandleException).value()), JSInterfaceJIT::regT1); 406 406 jit.jump(JSInterfaceJIT::regT1); 407 407 -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
r154095 r154156 1781 1781 # This essentially emulates the JIT's throwing protocol. 1782 1782 loadp JITStackFrame::vm[sp], t1 1783 loadp VM::topCallFrame[t1], cfr 1783 1784 loadp VM::callFrameForThrow[t1], t0 1784 1785 jmp VM::targetMachinePCForThrow[t1] … … 1788 1789 preserveReturnAddressAfterCall(t2) 1789 1790 loadp JITStackFrame::vm[sp], t1 1791 loadp VM::topCallFrame[t1], cfr 1790 1792 loadp VM::callFrameForThrow[t1], t0 1791 1793 jmp VM::targetMachinePCForThrow[t1] -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
r154095 r154156 1595 1595 # This essentially emulates the JIT's throwing protocol. 1596 1596 loadp JITStackFrame::vm[sp], t1 1597 loadp VM::topCallFrame[t1], cfr 1597 1598 loadp VM::callFrameForThrow[t1], t0 1598 1599 jmp VM::targetMachinePCForThrow[t1] … … 1602 1603 preserveReturnAddressAfterCall(t2) 1603 1604 loadp JITStackFrame::vm[sp], t1 1605 loadp VM::topCallFrame[t1], cfr 1604 1606 loadp VM::callFrameForThrow[t1], t0 1605 1607 jmp VM::targetMachinePCForThrow[t1] -
trunk/Source/JavaScriptCore/runtime/VM.cpp
r154127 r154156 144 144 , vmType(vmType) 145 145 , clientData(0) 146 , topCallFrame(CallFrame::noCaller() )146 , topCallFrame(CallFrame::noCaller()->removeHostCallFrameFlag()) 147 147 , arrayConstructorTable(fastNew<HashTable>(JSC::arrayConstructorTable)) 148 148 , arrayPrototypeTable(fastNew<HashTable>(JSC::arrayPrototypeTable))
Note:
See TracChangeset
for help on using the changeset viewer.