RESOLVED FIXED 149228
Interpreter::unwind() shouldn't be responsible for filtering out uncatchable exceptions
https://bugs.webkit.org/show_bug.cgi?id=149228
Summary Interpreter::unwind() shouldn't be responsible for filtering out uncatchable ...
Saam Barati
Reported 2015-09-16 13:07:10 PDT
op_catch should do this.
Attachments
patch (18.74 KB, patch)
2015-09-16 17:58 PDT, Saam Barati
no flags
patch (20.09 KB, patch)
2015-09-16 18:29 PDT, Saam Barati
no flags
patch (20.35 KB, patch)
2015-09-16 18:50 PDT, Saam Barati
mark.lam: review+
Saam Barati
Comment 1 2015-09-16 17:58:34 PDT
WebKit Commit Bot
Comment 2 2015-09-16 18:00:36 PDT
Attachment 261343 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1462: The parameter name "profiler" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/interpreter/Interpreter.cpp:657: An else statement can be removed when the prior "if" concludes with a return, break, continue or goto statement. [readability/control_flow] [4] ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:2145: An else statement can be removed when the prior "if" concludes with a return, break, continue or goto statement. [readability/control_flow] [4] Total errors found: 3 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Geoffrey Garen
Comment 3 2015-09-16 18:29:14 PDT
Comment on attachment 261343 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=261343&action=review > Source/JavaScriptCore/ChangeLog:15 > + the exception further down the call stack. This is necessary > + in a later patch that will implement exception handling > + in the DFG, and part of that patch includes exception > + handling that doesn't go through genericUnwind. This patch > + enables that by destroying the notion that all exception Can you explain a little more about this? Why does the DFG sometimes want to call into genericUnwind and sometimes want not to?
Saam Barati
Comment 4 2015-09-16 18:29:25 PDT
WebKit Commit Bot
Comment 5 2015-09-16 18:30:55 PDT
Attachment 261345 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1462: The parameter name "profiler" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/interpreter/Interpreter.cpp:657: An else statement can be removed when the prior "if" concludes with a return, break, continue or goto statement. [readability/control_flow] [4] ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:2145: An else statement can be removed when the prior "if" concludes with a return, break, continue or goto statement. [readability/control_flow] [4] ERROR: Source/WebCore/ChangeLog:8: You should remove the 'No new tests' and either add and list tests, or explain why no new tests were possible. [changelog/nonewtests] [5] Total errors found: 4 in 19 files If any of these errors are false positives, please file a bug against check-webkit-style.
Saam Barati
Comment 6 2015-09-16 18:50:00 PDT
Created attachment 261349 [details] patch fix style
WebKit Commit Bot
Comment 7 2015-09-16 18:53:21 PDT
Attachment 261349 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1462: The parameter name "profiler" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:2147: An else statement can be removed when the prior "if" concludes with a return, break, continue or goto statement. [readability/control_flow] [4] Total errors found: 2 in 19 files If any of these errors are false positives, please file a bug against check-webkit-style.
Mark Lam
Comment 8 2015-09-17 09:38:29 PDT
Comment on attachment 261349 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=261349&action=review r=me. Since you're changing the LLINT, please do a test run of the JSC tests on the cloop build as well to make sure nothing broke. Thanks. > Source/JavaScriptCore/ChangeLog:14 > + the exception further down the call stack. This is necessary > + in a later patch that will implement exception handling > + in the DFG, and part of that patch includes exception > + handling that doesn't go through genericUnwind. This patch I think you can provide a little more detail to motivate this. How about something like: ... This is necessary in a later patch that will implement exception handling in the DFG. The DFG may determine that an exception thrown in a function (or an inlined callee) is caught by a catch block in the sane function, and optimize away the call to genericUnwind altogether. ... > Source/JavaScriptCore/interpreter/Interpreter.cpp:658 > + if (!m_isTermination) { > + if (m_codeBlock && !isWebAssemblyExecutable(m_codeBlock->ownerExecutable())) > + m_handler = m_codeBlock->handlerForBytecodeOffset(bytecodeOffset); > + else > + m_handler = nullptr; > + } > + > + if (!m_isTermination && m_handler) > + return StackVisitor::Done; nit, but I suggest reducing this further to: m_handler = nullptr; if (!m_isTermination) { if (m_codeBlock && !isWebAssemblyExecutable(m_codeBlock->ownerExecutable())) m_handler = m_codeBlock->handlerForBytecodeOffset(bytecodeOffset); } if (m_handler) return StackVisitor::Done; > Source/JavaScriptCore/interpreter/Interpreter.cpp:741 > > ASSERT(vm.exception() && vm.exception()->stack().size()); Above these lines, there's a check for: if (exceptionValue.isObject()) isTermination = isTerminatedExecutionException(exception); You can now remove the "if (exceptionValue.isObject())" check. > Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1468 > + genericUnwind(&vm, exec); > + pc = returnToThrow(exec); > + LLINT_RETURN_TWO(pc, bitwise_cast<void*>(static_cast<uintptr_t>(1))); Why not just do a "LLINT_RETURN_TWO(pc, 1);" here instead and let llint_throw_from_slow_path_trampoline take care of calling genericUnwind()? > Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:1846 > + dispatch(0) # go to exception handler because this is a terminating exception. Why not just do a "jmp _llint_throw_from_slow_path_trampoline" here? > Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1736 > + dispatch(0) # go to exception handler because this is a terminating exception. Why not just do a "jmp _llint_throw_from_slow_path_trampoline" here?
Saam Barati
Comment 9 2015-09-17 11:31:58 PDT
Note You need to log in before you can comment on or make changes to this bug.