Changeset 157954 in webkit
- Timestamp:
- Oct 24, 2013, 2:23:04 PM (13 years ago)
- Location:
- branches/safari-537.73-branch
- Files:
-
- 3 added
- 11 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/js/dfg-activation-register-overwritten-in-throw-expected.txt (added)
-
LayoutTests/fast/js/dfg-activation-register-overwritten-in-throw.html (added)
-
LayoutTests/fast/js/script-tests/dfg-activation-register-overwritten-in-throw.js (added)
-
Source/JavaScriptCore/ChangeLog (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGAbstractState.cpp (modified) (3 diffs)
-
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGFixupPhase.cpp (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGNode.h (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGNodeType.h (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-537.73-branch/LayoutTests/ChangeLog
r157765 r157954 1 2013-10-24 Oliver Hunt <oliver@apple.com> 2 3 <https://webkit.org/b/119860> Crash during exception unwinding 4 5 Reviewed by Filip Pizlo. 6 7 Add a test 8 9 * fast/js/dfg-activation-register-overwritten-in-throw-expected.txt: Added. 10 * fast/js/dfg-activation-register-overwritten-in-throw.html: Added. 11 * fast/js/script-tests/dfg-activation-register-overwritten-in-throw.js: Added. 12 (g): 13 1 14 2013-10-21 Lucas Forschler <lforschler@apple.com> 2 15 -
branches/safari-537.73-branch/Source/JavaScriptCore/ChangeLog
r157765 r157954 1 2013-10-24 Oliver Hunt <oliver@apple.com> 2 3 <https://webkit.org/b/119860> Crash during exception unwinding 4 5 Reviewed by Filip Pizlo. 6 7 Add an "Unreachable" NodeType, and then rearrange op_throw and op_throw_reference_error 8 to plant Throw or ThrowReferenceError followed by a flush and then the Unreachable node. 9 10 We need this so that Throw and ThrowReferenceError no longer need to be treated as 11 terminals and the subsequent flush keeps the activation (and other registers) live. 12 13 * dfg/DFGAbstractInterpreterInlines.h: 14 (JSC::DFG::::executeEffects): 15 * dfg/DFGByteCodeParser.cpp: 16 (JSC::DFG::ByteCodeParser::parseBlock): 17 * dfg/DFGClobberize.h: 18 (JSC::DFG::clobberize): 19 * dfg/DFGFixupPhase.cpp: 20 (JSC::DFG::FixupPhase::fixupNode): 21 * dfg/DFGNode.h: 22 (JSC::DFG::Node::isTerminal): 23 * dfg/DFGNodeType.h: 24 * dfg/DFGPredictionPropagationPhase.cpp: 25 (JSC::DFG::PredictionPropagationPhase::propagate): 26 * dfg/DFGSafeToExecute.h: 27 (JSC::DFG::safeToExecute): 28 * dfg/DFGSpeculativeJIT32_64.cpp: 29 (JSC::DFG::SpeculativeJIT::compile): 30 * dfg/DFGSpeculativeJIT64.cpp: 31 (JSC::DFG::SpeculativeJIT::compile): 32 1 33 2013-10-21 Lucas Forschler <lforschler@apple.com> 2 34 -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGAbstractState.cpp
r153675 r157954 1530 1530 forNode(node).set(SpecBoolean); 1531 1531 break; 1532 1532 1533 1533 case Phi: 1534 1534 case Flush: … … 1551 1551 clobberWorld(node->codeOrigin, indexInBlock); 1552 1552 forNode(node).makeTop(); 1553 break; 1554 1555 case Unreachable: 1556 RELEASE_ASSERT_NOT_REACHED(); 1553 1557 break; 1554 1558 … … 1778 1782 1779 1783 case Return: 1780 case Throw: 1781 case ThrowReferenceError: 1784 case Unreachable: 1782 1785 ASSERT(basicBlock->cfaBranchDirection == InvalidBranchDirection); 1783 1786 return false; -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r153626 r157954 3032 3032 3033 3033 case op_throw: 3034 addToGraph(Throw, get(currentInstruction[1].u.operand)); 3034 3035 flushAllArgumentsAndCapturedVariablesInInlineStack(); 3035 addToGraph( Throw, get(currentInstruction[1].u.operand));3036 addToGraph(Unreachable); 3036 3037 LAST_OPCODE(op_throw); 3037 3038 3038 3039 case op_throw_static_error: 3040 addToGraph(ThrowReferenceError); 3039 3041 flushAllArgumentsAndCapturedVariablesInInlineStack(); 3040 addToGraph( ThrowReferenceError);3042 addToGraph(Unreachable); 3041 3043 LAST_OPCODE(op_throw_static_error); 3042 3044 -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp
r148696 r157954 435 435 switch (node->op()) { 436 436 case Return: 437 case Throw: 438 case ThrowReferenceError: 437 case Unreachable: 439 438 case ForceOSRExit: 440 439 // Do nothing. These nodes will already do the right thing. -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
r153090 r157954 874 874 case ForceOSRExit: 875 875 case CheckWatchdogTimer: 876 case Unreachable: 876 877 break; 877 878 #else -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGNode.h
r152799 r157954 677 677 case Branch: 678 678 case Return: 679 case Throw: 680 case ThrowReferenceError: 679 case Unreachable: 681 680 return true; 682 681 default: -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGNodeType.h
r149162 r157954 251 251 macro(NewFunctionExpression, NodeResultJS) \ 252 252 \ 253 /* These aren't terminals but always exit */ \ 254 macro(Throw, NodeMustGenerate) \ 255 macro(ThrowReferenceError, NodeMustGenerate) \ 256 \ 253 257 /* Block terminals. */\ 254 258 macro(Jump, NodeMustGenerate) \ 255 259 macro(Branch, NodeMustGenerate) \ 256 260 macro(Return, NodeMustGenerate) \ 257 macro(Throw, NodeMustGenerate) \ 258 macro(ThrowReferenceError, NodeMustGenerate) \ 261 macro(Unreachable, NodeMustGenerate) \ 259 262 \ 260 263 macro(GarbageValue, NodeResultJS | NodeClobbersWorld) \ -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
r153442 r157954 540 540 case PutGlobalVarCheck: 541 541 case CheckWatchdogTimer: 542 case Unreachable: 542 543 break; 543 544 -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r153802 r157954 4956 4956 break; 4957 4957 4958 case Unreachable: 4959 RELEASE_ASSERT_NOT_REACHED(); 4960 break; 4961 4958 4962 case Nop: 4959 4963 case LastNodeType: -
branches/safari-537.73-branch/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r153803 r157954 4790 4790 noResult(node); 4791 4791 break; 4792 4793 case Unreachable: 4794 RELEASE_ASSERT_NOT_REACHED(); 4795 break; 4792 4796 4793 4797 case Nop:
Note:
See TracChangeset
for help on using the changeset viewer.