Commit d89422a1 authored by Alberto Garcia's avatar Alberto Garcia
Browse files

New upstream version 2.22.4

parent 8b3568f8
......@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">JavaScriptCore GLib Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">for JavaScriptCore 2.22.3</p></div>
<div><p class="releaseinfo">for JavaScriptCore 2.22.4</p></div>
</div>
<hr>
</div>
......
......@@ -175,7 +175,7 @@ have included when compiling your code.</p>
<hr>
<div class="refsect2">
<a name="JSC-MICRO-VERSION:CAPS"></a><h3>JSC_MICRO_VERSION</h3>
<pre class="programlisting">#define JSC_MICRO_VERSION (3)
<pre class="programlisting">#define JSC_MICRO_VERSION (4)
</pre>
</div>
</div>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKit2GTK+ Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">for WebKit2GTK+ 2.22.3</p></div>
<div><p class="releaseinfo">for WebKit2GTK+ 2.22.4</p></div>
</div>
<hr>
</div>
......
......@@ -213,7 +213,7 @@ against at application run time.</p>
<hr>
<div class="refsect2">
<a name="WEBKIT-MICRO-VERSION:CAPS"></a><h3>WEBKIT_MICRO_VERSION</h3>
<pre class="programlisting">#define WEBKIT_MICRO_VERSION (3)
<pre class="programlisting">#define WEBKIT_MICRO_VERSION (4)
</pre>
<p>Like <a class="link" href="webkit2gtk-4.0-WebKitVersion.html#webkit-get-micro-version" title="webkit_get_micro_version ()"><code class="function">webkit_get_micro_version()</code></a>, but from the headers used at
application compile time, rather than from the library linked
......
......@@ -14,7 +14,7 @@
<div class="titlepage">
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKitDOMGTK+ Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">for WebKitDOMGTK+ 2.22.3</p></div>
<div><p class="releaseinfo">for WebKitDOMGTK+ 2.22.4</p></div>
</div>
<hr>
</div>
......
=================
WebKitGTK+ 2.22.4
=================
What's new in WebKitGTK+ 2.22.4?
- Expose ENABLE_MEDIA_SOURCE as a public build option.
- Fix a crash when using Cairo versions between 1.15 and 1.16.0
- Fix the build with -DLOG_DISABLED=0.
- Fix the build with ENABLE_VIDEO=OFF and ENABLE_WEB_AUDIO=OFF.
- Fix debug builds of JavaScriptCore.
- Fix several crashes and rendering issues.
=================
WebKitGTK+ 2.22.3
=================
......
......@@ -611,7 +611,9 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
interpreter/AbstractPC.h
interpreter/CallFrame.h
interpreter/CallFrameInlines.h
interpreter/CalleeBits.h
interpreter/EntryFrame.h
interpreter/FrameTracers.h
interpreter/Register.h
interpreter/ShadowChicken.h
......
......@@ -715,7 +715,6 @@ runtime/CodeCache.cpp
runtime/CodeSpecializationKind.cpp
runtime/CommonIdentifiers.cpp
runtime/CommonSlowPaths.cpp
runtime/CommonSlowPathsExceptions.cpp
runtime/CompilationResult.cpp
tools/CompilerTimingScope.cpp
runtime/Completion.cpp
......
......@@ -2920,8 +2920,7 @@ RegisterID* BytecodeGenerator::emitGetByVal(RegisterID* dst, RegisterID* base, R
break;
}
ASSERT(context.type() == ForInContext::StructureForInContextType);
StructureForInContext& structureContext = static_cast<StructureForInContext&>(context);
StructureForInContext& structureContext = context.asStructureForInContext();
UnlinkedValueProfile profile = emitProfiledOpcode(op_get_direct_pname);
instructions().append(kill(dst));
instructions().append(base->index());
......
/*
* Copyright (C) 2008-2017 Apple Inc. All rights reserved.
* Copyright (C) 2008-2018 Apple Inc. All rights reserved.
* Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
* Copyright (C) 2001 Peter Kelly (pmk@post.com)
*
......@@ -686,6 +686,7 @@ void Debugger::pauseIfNeeded(CallFrame* callFrame)
{
VM& vm = m_vm;
auto scope = DECLARE_THROW_SCOPE(vm);
ASSERT(callFrame);
if (m_isPaused)
return;
......
/*
* Copyright (C) 2008-2017 Apple Inc. All Rights Reserved.
* Copyright (C) 2008-2018 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -213,7 +213,7 @@ bool CallFrame::isAnyWasmCallee()
return false;
}
CallFrame* CallFrame::callerFrame(EntryFrame*& currEntryFrame)
CallFrame* CallFrame::callerFrame(EntryFrame*& currEntryFrame) const
{
if (callerFrameOrEntryFrame() == currEntryFrame) {
VMEntryRecord* currVMEntryRecord = vmEntryRecord(currEntryFrame);
......@@ -223,7 +223,7 @@ CallFrame* CallFrame::callerFrame(EntryFrame*& currEntryFrame)
return static_cast<CallFrame*>(callerFrameOrEntryFrame());
}
SUPPRESS_ASAN CallFrame* CallFrame::unsafeCallerFrame(EntryFrame*& currEntryFrame)
SUPPRESS_ASAN CallFrame* CallFrame::unsafeCallerFrame(EntryFrame*& currEntryFrame) const
{
if (unsafeCallerFrameOrEntryFrame() == currEntryFrame) {
VMEntryRecord* currVMEntryRecord = vmEntryRecord(currEntryFrame);
......@@ -337,4 +337,22 @@ const char* CallFrame::describeFrame()
return buffer;
}
void CallFrame::convertToStackOverflowFrame(VM& vm)
{
ASSERT(!isGlobalExec());
EntryFrame* entryFrame = vm.topEntryFrame;
CallFrame* throwOriginFrame = this;
do {
throwOriginFrame = throwOriginFrame->callerFrame(entryFrame);
} while (throwOriginFrame && throwOriginFrame->callee().isWasm());
JSObject* originCallee = throwOriginFrame ? throwOriginFrame->jsCallee() : vmEntryRecord(vm.topEntryFrame)->callee();
JSObject* stackOverflowCallee = originCallee->globalObject()->stackOverflowFrameCallee();
setCodeBlock(nullptr);
setCallee(stackOverflowCallee);
setArgumentCountIncludingThis(0);
}
} // namespace JSC
......@@ -140,8 +140,8 @@ namespace JSC {
void* callerFrameOrEntryFrame() const { return callerFrameAndPC().callerFrame; }
SUPPRESS_ASAN void* unsafeCallerFrameOrEntryFrame() const { return unsafeCallerFrameAndPC().callerFrame; }
CallFrame* unsafeCallerFrame(EntryFrame*&);
JS_EXPORT_PRIVATE CallFrame* callerFrame(EntryFrame*&);
CallFrame* unsafeCallerFrame(EntryFrame*&) const;
JS_EXPORT_PRIVATE CallFrame* callerFrame(EntryFrame*&) const;
JS_EXPORT_PRIVATE SourceOrigin callerSourceOrigin();
......@@ -256,6 +256,10 @@ namespace JSC {
return callerFrameAndPC().callerFrame == noCaller() && callerFrameAndPC().pc == nullptr;
}
void convertToStackOverflowFrame(VM&);
inline bool isStackOverflowFrame() const;
inline bool isWasmFrame() const;
void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[CallFrameSlot::argumentCount].payload() = count; }
void setCallee(JSObject* callee) { static_cast<Register*>(this)[CallFrameSlot::callee] = callee; }
void setCodeBlock(CodeBlock* codeBlock) { static_cast<Register*>(this)[CallFrameSlot::codeBlock] = codeBlock; }
......@@ -268,7 +272,7 @@ namespace JSC {
// FIXME: This method is improper. We rely on the fact that we can call it with a null
// receiver. We should always be using StackVisitor directly.
// It's only valid to call this from a non-wasm top frame.
template <typename Functor> void iterate(const Functor& functor)
template <StackVisitor::EmptyEntryFrameAction action = StackVisitor::ContinueIfTopEntryFrameIsEmpty, typename Functor> void iterate(const Functor& functor)
{
VM* vm;
void* rawThis = this;
......@@ -277,7 +281,7 @@ namespace JSC {
vm = &this->vm();
} else
vm = nullptr;
StackVisitor::visit<Functor>(this, vm, functor);
StackVisitor::visit<action, Functor>(this, vm, functor);
}
void dump(PrintStream&);
......
/*
* Copyright (C) 2013 Apple Inc. All rights reserved.
* Copyright (C) 2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -20,19 +20,25 @@
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
namespace JSC {
#include "CallFrame.h"
class ExecState;
class JSObject;
namespace JSC {
namespace CommonSlowPaths {
inline bool CallFrame::isStackOverflowFrame() const
{
if (callee().isWasm())
return false;
return jsCallee() == jsCallee()->globalObject()->stackOverflowFrameCallee();
}
// Throw the currently active exception in the context of the caller's call frame.
void interpreterThrowInCaller(ExecState* callerFrame, JSObject*);
inline bool CallFrame::isWasmFrame() const
{
return callee().isWasm();
}
} } // namespace JSC::CommonSlowPaths
} // namespace JSC
/*
* Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
* Copyright (C) 2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -20,37 +20,31 @@
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "CommonSlowPathsExceptions.h"
#pragma once
#include "CallFrame.h"
#include "CodeBlock.h"
#include "FrameTracers.h"
#include "Interpreter.h"
#include "JITExceptions.h"
#include "LLIntCommon.h"
#include "JSCInlines.h"
#include "StackAlignment.h"
#include "VMEntryRecord.h"
#if LLINT_TRACING
#include "Exception.h"
#endif
namespace JSC { namespace CommonSlowPaths {
namespace JSC {
void interpreterThrowInCaller(ExecState* exec, JSObject* error)
{
VM* vm = &exec->vm();
NativeCallFrameTracer tracer(vm, exec);
auto scope = DECLARE_THROW_SCOPE(*vm);
struct EntryFrame {
#if ENABLE(JIT) && NUMBER_OF_CALLEE_SAVES_REGISTERS > 0
static ptrdiff_t vmEntryRecordOffset()
{
EntryFrame* fakeEntryFrame = reinterpret_cast<EntryFrame*>(0x1000);
VMEntryRecord* record = vmEntryRecord(fakeEntryFrame);
return static_cast<ptrdiff_t>(
reinterpret_cast<char*>(record) - reinterpret_cast<char*>(fakeEntryFrame));
}
throwException(exec, scope, error);
#if LLINT_TRACING
if (UNLIKELY(Options::traceLLIntSlowPath()))
dataLog("Throwing exception ", JSValue(scope.exception()), ".\n");
static ptrdiff_t calleeSaveRegistersBufferOffset()
{
return vmEntryRecordOffset() + OBJECT_OFFSETOF(VMEntryRecord, calleeSaveRegistersBuffer);
}
#endif
}
};
} } // namespace JSC::LLInt
} // namespace JSC
/*
* Copyright (C) 2016-2017 Apple Inc. All rights reserved.
* Copyright (C) 2016-2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -93,30 +93,4 @@ public:
}
};
class NativeCallFrameTracerWithRestore {
public:
ALWAYS_INLINE NativeCallFrameTracerWithRestore(VM* vm, EntryFrame* EntryFrame, CallFrame* callFrame)
: m_vm(vm)
{
ASSERT(vm);
ASSERT(callFrame);
assertStackPointerIsAligned();
m_savedTopEntryFrame = vm->topEntryFrame;
m_savedTopCallFrame = vm->topCallFrame;
vm->topEntryFrame = EntryFrame;
vm->topCallFrame = callFrame;
}
ALWAYS_INLINE ~NativeCallFrameTracerWithRestore()
{
m_vm->topEntryFrame = m_savedTopEntryFrame;
m_vm->topCallFrame = m_savedTopCallFrame;
}
private:
VM* m_vm;
EntryFrame* m_savedTopEntryFrame;
CallFrame* m_savedTopCallFrame;
};
}
} // namespace JSC
......@@ -718,18 +718,11 @@ private:
HandlerInfo*& m_handler;
};
NEVER_INLINE HandlerInfo* Interpreter::unwind(VM& vm, CallFrame*& callFrame, Exception* exception, UnwindStart unwindStart)
NEVER_INLINE HandlerInfo* Interpreter::unwind(VM& vm, CallFrame*& callFrame, Exception* exception)
{
auto scope = DECLARE_CATCH_SCOPE(vm);
if (unwindStart == UnwindFromCallerFrame) {
if (callFrame->callerFrameOrEntryFrame() == vm.topEntryFrame)
return nullptr;
callFrame = callFrame->callerFrame();
vm.topCallFrame = callFrame;
}
ASSERT(reinterpret_cast<void*>(callFrame) != vm.topEntryFrame);
CodeBlock* codeBlock = callFrame->codeBlock();
JSValue exceptionValue = exception->value();
......@@ -740,12 +733,12 @@ NEVER_INLINE HandlerInfo* Interpreter::unwind(VM& vm, CallFrame*& callFrame, Exc
if (exceptionValue.isEmpty() || (exceptionValue.isCell() && !exceptionValue.asCell()))
exceptionValue = jsNull();
EXCEPTION_ASSERT_UNUSED(scope, scope.exception() && (!Options::exceptionStackTraceLimit() || scope.exception()->stack().size()));
EXCEPTION_ASSERT_UNUSED(scope, scope.exception());
// Calculate an exception handler vPC, unwinding call frames as necessary.
HandlerInfo* handler = nullptr;
UnwindFunctor functor(vm, callFrame, isTerminatedExecutionException(vm, exception), codeBlock, handler);
StackVisitor::visit(callFrame, &vm, functor);
StackVisitor::visit<StackVisitor::TerminateIfTopEntryFrameIsEmpty>(callFrame, &vm, functor);
if (!handler)
return nullptr;
......
......@@ -64,8 +64,6 @@ namespace JSC {
struct ProtoCallFrame;
struct UnlinkedInstruction;
enum UnwindStart : uint8_t { UnwindFromCurrentFrame, UnwindFromCallerFrame };
enum DebugHookType {
WillExecuteProgram,
DidExecuteProgram,
......@@ -116,8 +114,8 @@ namespace JSC {
JSValue execute(EvalExecutable*, CallFrame*, JSValue thisValue, JSScope*);
void getArgumentsData(CallFrame*, JSFunction*&, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc);
NEVER_INLINE HandlerInfo* unwind(VM&, CallFrame*&, Exception*, UnwindStart);
NEVER_INLINE HandlerInfo* unwind(VM&, CallFrame*&, Exception*);
void notifyDebuggerOfExceptionToBeThrown(VM&, CallFrame*, Exception*);
NEVER_INLINE void debug(CallFrame*, DebugHookType);
static String stackTraceAsString(VM&, const Vector<StackFrame>&);
......
/*
* Copyright (C) 2013, 2015-2017 Apple Inc. All rights reserved.
* Copyright (C) 2013-2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -44,13 +44,18 @@ StackVisitor::StackVisitor(CallFrame* startFrame, VM* vm)
CallFrame* topFrame;
if (startFrame) {
ASSERT(vm);
ASSERT(!vm->topCallFrame || reinterpret_cast<void*>(vm->topCallFrame) != vm->topEntryFrame);
m_frame.m_entryFrame = vm->topEntryFrame;
topFrame = vm->topCallFrame;
if (topFrame && static_cast<void*>(m_frame.m_entryFrame) == static_cast<void*>(topFrame)) {
topFrame = vmEntryRecord(m_frame.m_entryFrame)->m_prevTopCallFrame;
m_frame.m_entryFrame = vmEntryRecord(m_frame.m_entryFrame)->m_prevTopEntryFrame;
if (topFrame && topFrame->isStackOverflowFrame()) {
topFrame = topFrame->callerFrame(m_frame.m_entryFrame);
m_topEntryFrameIsEmpty = (m_frame.m_entryFrame != vm->topEntryFrame);
if (startFrame == vm->topCallFrame)
startFrame = topFrame;
}
} else {
m_frame.m_entryFrame = 0;
topFrame = 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment