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

New upstream version 2.17.91

parent d51d87de
......@@ -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.17.90</p></div>
<div><p class="releaseinfo">for WebKit2GTK+ 2.17.91</p></div>
</div>
<hr>
</div>
......
......@@ -177,7 +177,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 (90)
<pre class="programlisting">#define WEBKIT_MICRO_VERSION (91)
</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.17.90</p></div>
<div><p class="releaseinfo">for WebKitDOMGTK+ 2.17.91</p></div>
</div>
<hr>
</div>
......
==================
WebKitGTK+ 2.17.91
==================
What's new in WebKitGTK+ 2.17.91?
- Fix proxy HTTP authentication for HTTPS requests.
- Stop kinetic scrolling when a zero movement is reached.
- Fix UI process crash when selecting text.
- Fix UI process crash when loading a favicon.
- Properly handle WebDriver click command on option elements.
- Fix web process crash when resizing the window with accelerated compositing enabled.
- Fix crashes in 32 bit systems due to incorrect use of GVariant.
- Fix several crashes and rendering issues.
==================
WebKitGTK+ 2.17.90
==================
......
......@@ -1158,11 +1158,31 @@ list(APPEND JavaScriptCore_HEADERS
${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h
)
if ((${CMAKE_SYSTEM_NAME} STREQUAL "Linux"))
if (WTF_CPU_X86)
set(OFFLINE_ASM_BACKEND "X86")
elseif (WTF_CPU_X86_64)
set(OFFLINE_ASM_BACKEND "X86_64")
elseif (WTF_CPU_ARM64)
set(OFFLINE_ASM_BACKEND "ARM64")
elseif (ARM_THUMB2_DETECTED)
set(OFFLINE_ASM_BACKEND "ARMv7")
elseif (ARM_TRADITIONAL_DETECTED)
set(OFFLINE_ASM_BACKEND "ARMv7_TRADITIONAL")
elseif (WTF_CPU_MIPS)
set(OFFLINE_ASM_BACKEND "MIPS")
endif ()
if (NOT ENABLE_JIT)
set(OFFLINE_ASM_BACKEND "C_LOOP")
endif ()
endif ()
add_custom_command(
OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb
DEPENDS ${LLINT_ASM} ${OFFLINE_ASM} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm
COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb -I${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/ ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb -I${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/ ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h ${OFFLINE_ASM_BACKEND}
VERBATIM)
# We add the header files directly to the ADD_EXECUTABLE call instead of setting the
......
......@@ -839,7 +839,7 @@ bool CodeBlock::finishCreation(VM& vm, ScriptExecutable* ownerExecutable, Unlink
CodeBlock::~CodeBlock()
{
if (m_vm->m_perBytecodeProfiler)
if (UNLIKELY(m_vm->m_perBytecodeProfiler))
m_vm->m_perBytecodeProfiler->notifyDestruction(this);
if (unlinkedCodeBlock()->didOptimize() == MixedTriState)
......@@ -877,12 +877,13 @@ void CodeBlock::setConstantIdentifierSetRegisters(VM& vm, const Vector<ConstantI
ExecState* exec = globalObject->globalExec();
for (const auto& entry : constants) {
const IdentifierSet& set = entry.first;
Structure* setStructure = globalObject->setStructure();
RETURN_IF_EXCEPTION(scope, void());
JSSet* jsSet = JSSet::create(exec, vm, setStructure);
JSSet* jsSet = JSSet::create(exec, vm, setStructure, set.size());
RETURN_IF_EXCEPTION(scope, void());
const IdentifierSet& set = entry.first;
for (auto setEntry : set) {
JSString* jsString = jsOwnedString(&vm, setEntry.get());
jsSet->add(exec, jsString);
......@@ -1916,7 +1917,8 @@ void CodeBlock::jettison(Profiler::JettisonReason reason, ReoptimizationMode mod
#if ENABLE(DFG_JIT)
if (reason != Profiler::JettisonDueToOldAge) {
if (Profiler::Compilation* compilation = jitCode()->dfgCommon()->compilation.get())
Profiler::Compilation* compilation = jitCode()->dfgCommon()->compilation.get();
if (UNLIKELY(compilation))
compilation->setJettisonReason(reason, detail);
// This accomplishes (1), and does its own book-keeping about whether it has already happened.
......
......@@ -1316,7 +1316,7 @@ ByteCodeParser::Terminality ByteCodeParser::handleCall(
unsigned nextOffset = m_currentIndex + instructionSize;
if (handleInlining(callTarget, result, callLinkStatus, registerOffset, virtualRegisterForArgument(0, registerOffset), VirtualRegister(), 0, argumentCountIncludingThis, nextOffset, op, kind, prediction)) {
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedCall();
return NonTerminal;
}
......@@ -1354,7 +1354,7 @@ ByteCodeParser::Terminality ByteCodeParser::handleVarargsCall(Instruction* pc, N
if (callLinkStatus.canOptimize()
&& handleInlining(callTarget, result, callLinkStatus, firstFreeReg, VirtualRegister(thisReg), VirtualRegister(arguments), firstVarArgOffset, 0, m_currentIndex + OPCODE_LENGTH(op_call_varargs), op, InlineCallFrame::varargsKindFor(callMode), prediction)) {
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedCall();
return NonTerminal;
}
......@@ -3717,7 +3717,7 @@ void ByteCodeParser::handleGetById(
if (getById != TryGetById && getByIdStatus.isModuleNamespace()) {
if (handleModuleNamespaceLoad(destinationOperand, prediction, base, getByIdStatus)) {
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedGetById();
return;
}
......@@ -3731,7 +3731,7 @@ void ByteCodeParser::handleGetById(
GetByIdVariant variant = getByIdStatus[0];
ASSERT(variant.domAttribute());
if (handleDOMJITGetter(destinationOperand, variant, base, identifierNumber, prediction)) {
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedGetById();
return;
}
......@@ -3782,7 +3782,7 @@ void ByteCodeParser::handleGetById(
cases.append(MultiGetByOffsetCase(*m_graph.addStructureSet(variant.structureSet()), method));
}
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedGetById();
// 2) Emit a MultiGetByOffset
......@@ -3804,7 +3804,7 @@ void ByteCodeParser::handleGetById(
return;
}
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedGetById();
ASSERT(type == AccessType::Get || !variant.callLinkStatus());
......@@ -3903,7 +3903,7 @@ void ByteCodeParser::handlePutById(
}
}
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedPutById();
for (const PutByIdVariant& variant : putByIdStatus.variants()) {
......@@ -3927,7 +3927,7 @@ void ByteCodeParser::handlePutById(
switch (variant.kind()) {
case PutByIdVariant::Replace: {
store(base, identifierNumber, variant, value);
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedPutById();
return;
}
......@@ -3994,7 +3994,7 @@ void ByteCodeParser::handlePutById(
// https://bugs.webkit.org/show_bug.cgi?id=142924.
addToGraph(PutStructure, OpInfo(transition), base);
if (m_graph.compilation())
if (UNLIKELY(m_graph.compilation()))
m_graph.compilation()->noticeInlinedPutById();
return;
}
......@@ -4124,7 +4124,7 @@ bool ByteCodeParser::parseBlock(unsigned limit)
if (Options::verboseDFGByteCodeParsing())
dataLog(" parsing ", currentCodeOrigin(), ": ", opcodeID, "\n");
if (m_graph.compilation()) {
if (UNLIKELY(m_graph.compilation())) {
addToGraph(CountExecution, OpInfo(m_graph.compilation()->executionCounterFor(
Profiler::OriginStack(*m_vm->m_perBytecodeProfiler, m_codeBlock, currentCodeOrigin()))));
}
......@@ -6061,7 +6061,7 @@ void ByteCodeParser::parseCodeBlock()
CodeBlock* codeBlock = m_inlineStackTop->m_codeBlock;
if (m_graph.compilation()) {
if (UNLIKELY(m_graph.compilation())) {
m_graph.compilation()->addProfiledBytecodes(
*m_vm->m_perBytecodeProfiler, m_inlineStackTop->m_profiledBlock);
}
......
......@@ -56,7 +56,7 @@ JITCompiler::JITCompiler(Graph& dfg)
, m_blockHeads(dfg.numBlocks())
, m_pcToCodeOriginMapBuilder(dfg.m_vm)
{
if (shouldDumpDisassembly() || m_graph.m_vm.m_perBytecodeProfiler)
if (UNLIKELY(shouldDumpDisassembly() || m_graph.m_vm.m_perBytecodeProfiler))
m_disassembler = std::make_unique<Disassembler>(dfg);
#if ENABLE(FTL_JIT)
m_jitCode->tierUpInLoopHierarchy = WTFMove(m_graph.m_plan.tierUpInLoopHierarchy);
......@@ -72,7 +72,7 @@ JITCompiler::~JITCompiler()
void JITCompiler::linkOSRExits()
{
ASSERT(m_jitCode->osrExit.size() == m_exitCompilationInfo.size());
if (m_graph.compilation()) {
if (UNLIKELY(m_graph.compilation())) {
for (unsigned i = 0; i < m_jitCode->osrExit.size(); ++i) {
OSRExitCompilationInfo& info = m_exitCompilationInfo[i];
Vector<Label> labels;
......@@ -317,7 +317,7 @@ void JITCompiler::link(LinkBuffer& linkBuffer)
}
}
if (m_graph.compilation()) {
if (UNLIKELY(m_graph.compilation())) {
ASSERT(m_exitSiteLabels.size() == m_jitCode->osrExit.size());
for (unsigned i = 0; i < m_exitSiteLabels.size(); ++i) {
Vector<Label>& labels = m_exitSiteLabels[i];
......@@ -528,7 +528,7 @@ void JITCompiler::disassemble(LinkBuffer& linkBuffer)
linkBuffer.didAlreadyDisassemble();
}
if (m_graph.m_plan.compilation)
if (UNLIKELY(m_graph.m_plan.compilation))
m_disassembler->reportToProfiler(m_graph.m_plan.compilation.get(), linkBuffer);
}
......
......@@ -90,7 +90,7 @@ void JITFinalizer::finalizeCommon()
m_jitCode->optimizeAfterWarmUp(m_plan.codeBlock);
#endif // ENABLE(FTL_JIT)
if (m_plan.compilation)
if (UNLIKELY(m_plan.compilation))
m_plan.vm->m_perBytecodeProfiler->addCompilation(m_plan.codeBlock, *m_plan.compilation);
if (!m_plan.willTryToTierUp)
......
......@@ -196,7 +196,7 @@ void JIT_OPERATION OSRExit::compileOSRExit(ExecState* exec)
jit.jitAssertHasValidCallFrame();
if (vm->m_perBytecodeProfiler && codeBlock->jitCode()->dfgCommon()->compilation) {
if (UNLIKELY(vm->m_perBytecodeProfiler && codeBlock->jitCode()->dfgCommon()->compilation)) {
Profiler::Database& database = *vm->m_perBytecodeProfiler;
Profiler::Compilation* compilation = codeBlock->jitCode()->dfgCommon()->compilation.get();
......
......@@ -144,7 +144,7 @@ Plan::Plan(CodeBlock* passedCodeBlock, CodeBlock* profiledDFGCodeBlock,
, mode(mode)
, osrEntryBytecodeIndex(osrEntryBytecodeIndex)
, mustHandleValues(mustHandleValues)
, compilation(vm->m_perBytecodeProfiler ? adoptRef(new Profiler::Compilation(vm->m_perBytecodeProfiler->ensureBytecodesFor(codeBlock), profilerCompilationKindForMode(mode))) : 0)
, compilation(UNLIKELY(vm->m_perBytecodeProfiler) ? adoptRef(new Profiler::Compilation(vm->m_perBytecodeProfiler->ensureBytecodesFor(codeBlock), profilerCompilationKindForMode(mode))) : nullptr)
, inlineCallFrames(adoptRef(new InlineCallFrameSet()))
, identifiers(codeBlock)
, weakReferences(codeBlock)
......
......@@ -89,7 +89,7 @@ bool JITFinalizer::finalizeCommon()
m_plan.codeBlock->setJITCode(*jitCode);
if (m_plan.compilation)
if (UNLIKELY(m_plan.compilation))
m_plan.vm->m_perBytecodeProfiler->addCompilation(m_plan.codeBlock, *m_plan.compilation);
return true;
......
......@@ -68,7 +68,8 @@ void link(State& state)
CCallHelpers::Address frame = CCallHelpers::Address(
CCallHelpers::stackPointerRegister, -static_cast<int32_t>(AssemblyHelpers::prologueStackPointerDelta()));
if (Profiler::Compilation* compilation = graph.compilation()) {
Profiler::Compilation* compilation = graph.compilation();
if (UNLIKELY(compilation)) {
compilation->addDescription(
Profiler::OriginStack(),
toCString("Generated FTL JIT code for ", CodeBlockWithJITType(codeBlock, JITCode::FTLJIT), ", instruction count = ", graph.m_codeBlock->instructionCount(), ":\n"));
......
......@@ -248,7 +248,7 @@ static void compileStub(
jit.popToRestore(GPRInfo::regT0);
jit.checkStackPointerAlignment();
if (vm->m_perBytecodeProfiler && jitCode->dfgCommon()->compilation) {
if (UNLIKELY(vm->m_perBytecodeProfiler && jitCode->dfgCommon()->compilation)) {
Profiler::Database& database = *vm->m_perBytecodeProfiler;
Profiler::Compilation* compilation = jitCode->dfgCommon()->compilation.get();
......
......@@ -187,14 +187,16 @@ TargetListing RemoteInspector::listingForInspectionTarget(const RemoteInspection
return nullptr;
ASSERT(target.type() == RemoteInspectionTarget::Type::Web || target.type() == RemoteInspectionTarget::Type::JavaScript);
return g_variant_new("(tsssb)", target.targetIdentifier(), target.type() == RemoteInspectionTarget::Type::Web ? "Web" : "JavaScript",
return g_variant_new("(tsssb)", static_cast<guint64>(target.targetIdentifier()),
target.type() == RemoteInspectionTarget::Type::Web ? "Web" : "JavaScript",
target.name().utf8().data(), target.type() == RemoteInspectionTarget::Type::Web ? target.url().utf8().data() : "null",
target.hasLocalDebugger());
}
TargetListing RemoteInspector::listingForAutomationTarget(const RemoteAutomationTarget& target) const
{
return g_variant_new("(tsssb)", target.targetIdentifier(), "Automation", target.name().utf8().data(), "null", target.isPaired());
return g_variant_new("(tsssb)", static_cast<guint64>(target.targetIdentifier()),
"Automation", target.name().utf8().data(), "null", target.isPaired());
}
void RemoteInspector::pushListingsNow()
......@@ -274,7 +276,7 @@ void RemoteInspector::sendMessageToRemote(unsigned targetIdentifier, const Strin
g_dbus_connection_call(m_dbusConnection.get(), nullptr,
INSPECTOR_DBUS_OBJECT_PATH, INSPECTOR_DBUS_INTERFACE, "SendMessageToFrontend",
g_variant_new("(ts)", targetIdentifier, message.utf8().data()),
g_variant_new("(ts)", static_cast<guint64>(targetIdentifier), message.utf8().data()),
nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START,
-1, m_cancellable.get(), dbusConnectionCallAsyncReadyCallback, nullptr);
}
......
......@@ -322,7 +322,7 @@ Interpreter::Interpreter(VM& vm)
{
#if !ASSERT_DISABLED
static std::once_flag assertOnceKey;
std::call_once(assertOnceKey, [this] {
std::call_once(assertOnceKey, [] {
for (unsigned i = 0; i < NUMBER_OF_BYTECODE_IDS; ++i) {
OpcodeID opcodeID = static_cast<OpcodeID>(i);
RELEASE_ASSERT(getOpcodeID(getOpcode(opcodeID)) == opcodeID);
......
......@@ -243,7 +243,7 @@ void JIT::privateCompileMainPass()
OpcodeID opcodeID = Interpreter::getOpcodeID(currentInstruction->u.opcode);
if (m_compilation) {
if (UNLIKELY(m_compilation)) {
add64(
TrustedImm32(1),
AbsoluteAddress(m_compilation->executionCounterFor(Profiler::OriginStack(Profiler::Origin(
......@@ -611,9 +611,9 @@ void JIT::compileWithoutLinking(JITCompilationEffort effort)
break;
}
if (Options::dumpDisassembly() || (m_vm->m_perBytecodeProfiler && Options::disassembleBaselineForProfiler()))
if (UNLIKELY(Options::dumpDisassembly() || (m_vm->m_perBytecodeProfiler && Options::disassembleBaselineForProfiler())))
m_disassembler = std::make_unique<JITDisassembler>(m_codeBlock);
if (m_vm->m_perBytecodeProfiler) {
if (UNLIKELY(m_vm->m_perBytecodeProfiler)) {
m_compilation = adoptRef(
new Profiler::Compilation(
m_vm->m_perBytecodeProfiler->ensureBytecodesFor(m_codeBlock),
......@@ -841,7 +841,7 @@ CompilationResult JIT::link()
m_disassembler->dump(patchBuffer);
patchBuffer.didAlreadyDisassemble();
}
if (m_compilation) {
if (UNLIKELY(m_compilation)) {
if (Options::disassembleBaselineForProfiler())
m_disassembler->reportToProfiler(m_compilation.get(), patchBuffer);
m_vm->m_perBytecodeProfiler->addCompilation(m_codeBlock, *m_compilation);
......
......@@ -956,7 +956,6 @@ SlowPathReturnType JIT_OPERATION operationLinkCall(ExecState* execCallee, CallLi
JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, callee, scope, kind, *codeBlockSlot);
ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
if (error) {
throwException(exec, throwScope, error);
return encodeResult(
vm->getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
reinterpret_cast<void*>(KeepTheFrame));
......@@ -1014,11 +1013,9 @@ void JIT_OPERATION operationLinkDirectCall(ExecState* exec, CallLinkInfo* callLi
RELEASE_ASSERT(isCall(kind) || functionExecutable->constructAbility() != ConstructAbility::CannotConstruct);
JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, callee, scope, kind, codeBlock);
ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
if (error) {
throwException(exec, throwScope, error);
ASSERT_UNUSED(throwScope, throwScope.exception() == reinterpret_cast<Exception*>(error));
if (error)
return;
}
ArityCheckMode arity;
unsigned argumentStackSlots = callLinkInfo->maxNumArguments();
if (argumentStackSlots < static_cast<size_t>(codeBlock->numParameters()))
......@@ -1061,8 +1058,8 @@ inline SlowPathReturnType virtualForWithFunction(
CodeBlock** codeBlockSlot = execCallee->addressOfCodeBlock();
JSObject* error = functionExecutable->prepareForExecution<FunctionExecutable>(*vm, function, scope, kind, *codeBlockSlot);
ASSERT(throwScope.exception() == reinterpret_cast<Exception*>(error));
if (error) {
throwException(exec, throwScope, error);
return encodeResult(
vm->getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
reinterpret_cast<void*>(KeepTheFrame));
......
......@@ -4883,7 +4883,7 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseUnaryExpress
failWithMessage("Cannot parse subexpression of ", operatorString(true, lastOperator), "operator");
failWithMessage("Cannot parse member expression");
}
if (UNLIKELY(lastOperator && context.isNewTarget(expr)))
if (UNLIKELY(isUpdateOp(static_cast<JSTokenType>(lastOperator)) && context.isNewTarget(expr)))
internalFailWithMessage(false, "new.target can't come after a prefix operator");
bool isEvalOrArguments = false;
if (strictMode() && !m_syntaxAlreadyValidated) {
......
......@@ -132,7 +132,7 @@ void ArrayBufferContents::transferTo(ArrayBufferContents& other)
other.m_sizeInBytes = m_sizeInBytes;
other.m_destructor = WTFMove(m_destructor);
other.m_shared = m_shared;
clear();
reset();
}
void ArrayBufferContents::copyTo(ArrayBufferContents& other)
......
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