[webkitgtk] Update to 2.4.2 Fix for CLoop on ppc64, ppc64le and s390x

Tomas Popela tpopela at fedoraproject.org
Thu May 15 14:17:17 UTC 2014


commit c07ecba9d4d72815ebea27be5f0ebfcd621b0198
Author: Tomas Popela <tpopela at redhat.com>
Date:   Thu May 15 16:16:52 2014 +0200

    Update to 2.4.2
    Fix for CLoop on ppc64, ppc64le and s390x

 sources                           |    2 +-
 webkitgtk-2.4.1-cloop_fix.patch   |  138 +++++++++++++++++++++++++++++++++++++
 webkitgtk-2.4.1-ppc64_align.patch |   45 ++++++++++++
 webkitgtk-2.4.2-ppc64le.patch     |   69 ++++++++++++++++++
 webkitgtk.spec                    |   43 ++++++++----
 5 files changed, 283 insertions(+), 14 deletions(-)
---
diff --git a/sources b/sources
index eda5de3..083f89b 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c57ebecff1ba7663b303e21a64840c48  webkitgtk-2.4.1.tar.xz
+da2b1b0f0863f3f21bdbc0476001589f  webkitgtk-2.4.2.tar.xz
diff --git a/webkitgtk-2.4.1-cloop_fix.patch b/webkitgtk-2.4.1-cloop_fix.patch
new file mode 100644
index 0000000..c5d9668
--- /dev/null
+++ b/webkitgtk-2.4.1-cloop_fix.patch
@@ -0,0 +1,138 @@
+diff -up webkitgtk-2.4.1/Source/JavaScriptCore/interpreter/ProtoCallFrame.h.cloop_fix webkitgtk-2.4.1/Source/JavaScriptCore/interpreter/ProtoCallFrame.h
+--- webkitgtk-2.4.1/Source/JavaScriptCore/interpreter/ProtoCallFrame.h.cloop_fix	2014-04-14 08:40:44.000000000 +0200
++++ webkitgtk-2.4.1/Source/JavaScriptCore/interpreter/ProtoCallFrame.h	2014-04-30 16:10:49.120156216 +0200
+@@ -36,7 +36,7 @@ struct ProtoCallFrame {
+     Register calleeValue;
+     Register argCountAndCodeOriginValue;
+     Register thisArg;
+-    size_t paddedArgCount;
++    uint32_t paddedArgCount;
+     JSValue *args;
+ 
+     void init(CodeBlock*, JSScope*, JSObject*, JSValue, int, JSValue* otherArgs = 0);
+@@ -53,7 +53,7 @@ struct ProtoCallFrame {
+     int argumentCountIncludingThis() const { return argCountAndCodeOriginValue.payload(); }
+     int argumentCount() const { return argumentCountIncludingThis() - 1; }
+     void setArgumentCountIncludingThis(int count) { argCountAndCodeOriginValue.payload() = count; }
+-    void setPaddedArgsCount(size_t argCount) { paddedArgCount = argCount; }
++    void setPaddedArgsCount(uint32_t argCount) { paddedArgCount = argCount; }
+ 
+     void clearCurrentVPC() { argCountAndCodeOriginValue.tag() = 0; }
+     
+diff -up webkitgtk-2.4.1/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp.cloop_fix webkitgtk-2.4.1/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
+--- webkitgtk-2.4.1/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp.cloop_fix	2014-04-30 16:11:18.457540050 +0200
++++ webkitgtk-2.4.1/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp	2014-04-30 16:11:50.944965101 +0200
+@@ -1354,7 +1354,7 @@ LLINT_SLOW_PATH_DECL(slow_path_get_from_
+             CodeBlock* codeBlock = exec->codeBlock();
+             ConcurrentJITLocker locker(codeBlock->m_lock);
+             pc[5].u.structure.set(exec->vm(), codeBlock->ownerExecutable(), scope->structure());
+-            pc[6].u.operand = slot.cachedOffset();
++            pc[6].u.pointer = reinterpret_cast<void*>(slot.cachedOffset());
+         }
+     }
+ 
+@@ -1381,7 +1381,7 @@ LLINT_SLOW_PATH_DECL(slow_path_put_to_sc
+         if (slot.isCacheable() && slot.base() == scope && scope->structure()->propertyAccessesAreCacheable()) {
+             ConcurrentJITLocker locker(codeBlock->m_lock);
+             pc[5].u.structure.set(exec->vm(), codeBlock->ownerExecutable(), scope->structure());
+-            pc[6].u.operand = slot.cachedOffset();
++            pc[6].u.pointer = reinterpret_cast<void*>(slot.cachedOffset());
+         }
+     }
+ 
+diff -up webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm.cloop_fix webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
+--- webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm.cloop_fix	2014-04-14 08:40:44.000000000 +0200
++++ webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm	2014-04-30 16:12:35.648549985 +0200
+@@ -282,7 +282,7 @@ macro doCallToJavaScript(makeCall, doRet
+     storep temp3, CodeBlock+4[cfr, temp1, 8]
+     btinz temp1, .copyHeaderLoop
+ 
+-    loadi ProtoCallFrame::argCountAndCodeOriginValue[protoCallFrame], temp2
++    loadi PayloadOffset + ProtoCallFrame::argCountAndCodeOriginValue[protoCallFrame], temp2
+     subi 1, temp2
+     loadi ProtoCallFrame::paddedArgCount[protoCallFrame], temp3
+     subi 1, temp3
+@@ -2277,7 +2277,7 @@ macro loadWithStructureCheck(operand, sl
+ end
+ 
+ macro getProperty()
+-    loadisFromInstruction(6, t3)
++    loadpFromInstruction(6, t3)
+     loadPropertyAtVariableOffset(t3, t0, t1, t2)
+     valueProfile(t1, t2, 28, t0)
+     loadisFromInstruction(1, t0)
+@@ -2297,7 +2297,7 @@ end
+ 
+ macro getClosureVar()
+     loadp JSVariableObject::m_registers[t0], t0
+-    loadisFromInstruction(6, t3)
++    loadpFromInstruction(6, t3)
+     loadp TagOffset[t0, t3, 8], t1
+     loadp PayloadOffset[t0, t3, 8], t2
+     valueProfile(t1, t2, 28, t0)
+@@ -2356,7 +2356,7 @@ _llint_op_get_from_scope:
+ macro putProperty()
+     loadisFromInstruction(3, t1)
+     loadConstantOrVariable(t1, t2, t3)
+-    loadisFromInstruction(6, t1)
++    loadpFromInstruction(6, t1)
+     storePropertyAtVariableOffset(t1, t0, t2, t3)
+ end
+ 
+@@ -2374,7 +2374,7 @@ macro putClosureVar()
+     loadisFromInstruction(3, t1)
+     loadConstantOrVariable(t1, t2, t3)
+     loadp JSVariableObject::m_registers[t0], t0
+-    loadisFromInstruction(6, t1)
++    loadpFromInstruction(6, t1)
+     storei t2, TagOffset[t0, t1, 8]
+     storei t3, PayloadOffset[t0, t1, 8]
+ end
+diff -up webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm.cloop_fix webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
+--- webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm.cloop_fix	2014-04-14 08:40:44.000000000 +0200
++++ webkitgtk-2.4.1/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm	2014-04-30 16:10:49.121156229 +0200
+@@ -171,7 +171,7 @@ macro doCallToJavaScript(makeCall, doRet
+     storep temp3, CodeBlock[cfr, temp1, 8]
+     btinz temp1, .copyHeaderLoop
+ 
+-    loadi ProtoCallFrame::argCountAndCodeOriginValue[protoCallFrame], temp2
++    loadi PayloadOffset + ProtoCallFrame::argCountAndCodeOriginValue[protoCallFrame], temp2
+     subi 1, temp2
+     loadi ProtoCallFrame::paddedArgCount[protoCallFrame], temp3
+     subi 1, temp3
+@@ -2047,7 +2047,7 @@ macro loadWithStructureCheck(operand, sl
+ end
+ 
+ macro getProperty()
+-    loadisFromInstruction(6, t1)
++    loadpFromInstruction(6, t1)
+     loadPropertyAtVariableOffset(t1, t0, t2)
+     valueProfile(t2, 7, t0)
+     loadisFromInstruction(1, t0)
+@@ -2064,7 +2064,7 @@ end
+ 
+ macro getClosureVar()
+     loadp JSVariableObject::m_registers[t0], t0
+-    loadisFromInstruction(6, t1)
++    loadpFromInstruction(6, t1)
+     loadq [t0, t1, 8], t0
+     valueProfile(t0, 7, t1)
+     loadisFromInstruction(1, t1)
+@@ -2121,7 +2121,7 @@ _llint_op_get_from_scope:
+ macro putProperty()
+     loadisFromInstruction(3, t1)
+     loadConstantOrVariable(t1, t2)
+-    loadisFromInstruction(6, t1)
++    loadpFromInstruction(6, t1)
+     storePropertyAtVariableOffset(t1, t0, t2)
+ end
+ 
+@@ -2138,7 +2138,7 @@ macro putClosureVar()
+     loadisFromInstruction(3, t1)
+     loadConstantOrVariable(t1, t2)
+     loadp JSVariableObject::m_registers[t0], t0
+-    loadisFromInstruction(6, t1)
++    loadpFromInstruction(6, t1)
+     storeq t2, [t0, t1, 8]
+ end
+ 
diff --git a/webkitgtk-2.4.1-ppc64_align.patch b/webkitgtk-2.4.1-ppc64_align.patch
new file mode 100644
index 0000000..5186d60
--- /dev/null
+++ b/webkitgtk-2.4.1-ppc64_align.patch
@@ -0,0 +1,45 @@
+diff -up webkitgtk-2.4.2/Source/JavaScriptCore/heap/CopiedBlock.h.ppc64_align webkitgtk-2.4.2/Source/JavaScriptCore/heap/CopiedBlock.h
+--- webkitgtk-2.4.2/Source/JavaScriptCore/heap/CopiedBlock.h.ppc64_align	2014-05-12 08:03:53.000000000 +0200
++++ webkitgtk-2.4.2/Source/JavaScriptCore/heap/CopiedBlock.h	2014-05-14 15:16:36.946318596 +0200
+@@ -81,7 +81,7 @@ public:
+     size_t size();
+     size_t capacity();
+ 
+-    static const size_t blockSize = 32 * KB;
++    static const size_t blockSize = 64 * KB;
+ 
+     bool hasWorkList();
+     CopyWorkList& workList();
+diff -up webkitgtk-2.4.2/Source/JavaScriptCore/interpreter/JSStack.cpp.ppc64_align webkitgtk-2.4.2/Source/JavaScriptCore/interpreter/JSStack.cpp
+--- webkitgtk-2.4.2/Source/JavaScriptCore/interpreter/JSStack.cpp.ppc64_align	2014-05-12 08:03:53.000000000 +0200
++++ webkitgtk-2.4.2/Source/JavaScriptCore/interpreter/JSStack.cpp	2014-05-14 15:17:35.617171141 +0200
+@@ -49,7 +49,8 @@ JSStack::JSStack(VM& vm, size_t capacity
+ {
+     ASSERT(capacity && isPageAligned(capacity));
+ 
+-    m_reservation = PageReservation::reserve(roundUpAllocationSize(capacity * sizeof(Register), commitSize), OSAllocator::JSVMStackPages);
++    size_t commitsize = pageSize();
++    m_reservation = PageReservation::reserve(roundUpAllocationSize(capacity * sizeof(Register), commitsize), OSAllocator::JSVMStackPages);
+     updateStackLimit(highAddress());
+     m_commitEnd = highAddress();
+ 
+@@ -78,7 +79,8 @@ bool JSStack::growSlowCase(Register* new
+     // Compute the chunk size of additional memory to commit, and see if we
+     // have it is still within our budget. If not, we'll fail to grow and
+     // return false.
+-    long delta = roundUpAllocationSize(reinterpret_cast<char*>(m_commitEnd) - reinterpret_cast<char*>(newEnd), commitSize);
++    size_t commitsize = pageSize();
++    long delta = roundUpAllocationSize(reinterpret_cast<char*>(m_commitEnd) - reinterpret_cast<char*>(newEnd), commitsize);
+     if (reinterpret_cast<char*>(m_commitEnd) - delta <= reinterpret_cast<char*>(m_useableEnd))
+         return false;
+ 
+@@ -134,7 +136,8 @@ void JSStack::enableErrorStackReserve()
+ 
+ void JSStack::disableErrorStackReserve()
+ {
+-    char* useableEnd = reinterpret_cast<char*>(reservationEnd()) + commitSize;
++    size_t commitsize = pageSize();
++    char* useableEnd = reinterpret_cast<char*>(reservationEnd()) + commitsize;
+     m_useableEnd = reinterpret_cast_ptr<Register*>(useableEnd);
+ 
+     // By the time we get here, we are guaranteed to be destructing the last
diff --git a/webkitgtk-2.4.2-ppc64le.patch b/webkitgtk-2.4.2-ppc64le.patch
new file mode 100644
index 0000000..3618d98
--- /dev/null
+++ b/webkitgtk-2.4.2-ppc64le.patch
@@ -0,0 +1,69 @@
+diff -up webkitgtk-2.4.2/Source/WTF/wtf/dtoa/utils.h.ppc64le webkitgtk-2.4.2/Source/WTF/wtf/dtoa/utils.h
+--- webkitgtk-2.4.2/Source/WTF/wtf/dtoa/utils.h.ppc64le	2014-05-14 15:37:26.360159487 +0200
++++ webkitgtk-2.4.2/Source/WTF/wtf/dtoa/utils.h	2014-05-14 15:38:46.938315499 +0200
+@@ -49,7 +49,7 @@
+ defined(__ARMEL__) || \
+ defined(_MIPS_ARCH_MIPS32R2)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+-#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
++#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__)
+ #if defined(_WIN32)
+diff -up webkitgtk-2.4.2/Source/WTF/wtf/Platform.h.ppc64le webkitgtk-2.4.2/Source/WTF/wtf/Platform.h
+--- webkitgtk-2.4.2/Source/WTF/wtf/Platform.h.ppc64le	2014-05-12 08:03:53.000000000 +0200
++++ webkitgtk-2.4.2/Source/WTF/wtf/Platform.h	2014-05-14 15:39:08.402622454 +0200
+@@ -101,24 +101,38 @@
+ #endif /* MIPS */
+ 
+ /* CPU(PPC) - PowerPC 32-bit */
+-#if   defined(__ppc__)     \
++#if (  defined(__ppc__)     \
+     || defined(__PPC__)     \
+     || defined(__powerpc__) \
+     || defined(__powerpc)   \
+     || defined(__POWERPC__) \
+     || defined(_M_PPC)      \
+-    || defined(__PPC)
++    || defined(__PPC)) \
++    && defined(__BYTE_ORDER__) \
++    && (__BYTE_ORDER__==__ORDER_BIG_ENDIAN__)
+ #define WTF_CPU_PPC 1
+ #define WTF_CPU_BIG_ENDIAN 1
+ #endif
+ 
+-/* CPU(PPC64) - PowerPC 64-bit */
+-#if   defined(__ppc64__) \
+-    || defined(__PPC64__)
++/* CPU(PPC64) - PowerPC 64-bit Big Endian */
++#if (  defined(__ppc64__) \
++    || defined(__PPC64__)) \
++    && defined(__BYTE_ORDER__) \
++    && (__BYTE_ORDER__==__ORDER_BIG_ENDIAN__)
+ #define WTF_CPU_PPC64 1
+ #define WTF_CPU_BIG_ENDIAN 1
+ #endif
+ 
++/* CPU(PPC64) - PowerPC 64-bit Little Endian */
++#if (   defined(__ppc64__) \
++    || defined(__PPC64__) \
++    || defined(__ppc64le__) \
++    || defined(__PPC64LE__)) \
++    && defined(__BYTE_ORDER__) \
++    && (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)
++#define WTF_CPU_PPC64LE 1
++#endif
++
+ /* CPU(SH4) - SuperH SH-4 */
+ #if defined(__SH4__)
+ #define WTF_CPU_SH4 1
+@@ -641,7 +655,8 @@
+     || CPU(ALPHA) \
+     || CPU(ARM64) \
+     || CPU(S390X) \
+-    || CPU(PPC64)
++    || CPU(PPC64) \
++    || CPU(PPC64LE)
+ #define WTF_USE_JSVALUE64 1
+ #else
+ #define WTF_USE_JSVALUE32_64 1
diff --git a/webkitgtk.spec b/webkitgtk.spec
index 9319cc6..04a12df 100644
--- a/webkitgtk.spec
+++ b/webkitgtk.spec
@@ -9,8 +9,8 @@
 	cp -p %1  %{buildroot}%{_pkgdocdir}/$(echo '%1' | sed -e 's!/!.!g')
 
 Name:		webkitgtk
-Version:	2.4.1
-Release:	2%{?dist}
+Version:	2.4.2
+Release:	1%{?dist}
 Summary:	GTK+ Web content engine library
 
 Group:		Development/Libraries
@@ -23,7 +23,10 @@ Source0:	http://www.webkitgtk.org/releases/webkitgtk-%{version}.tar.xz
 Patch0: 	webkit-1.3.10-nspluginwrapper.patch
 # https://bugs.webkit.org/show_bug.cgi?id=103128
 Patch4:         webkit-2.1.90-double2intsPPC32.patch
-Patch10:        webkitgtk-aarch64.patch
+Patch5:         webkitgtk-aarch64.patch
+Patch6:         webkitgtk-2.4.1-cloop_fix.patch
+Patch7:         webkitgtk-2.4.1-ppc64_align.patch
+Patch8:         webkitgtk-2.4.2-ppc64le.patch
 
 BuildRequires:	bison
 BuildRequires:	chrpath
@@ -91,31 +94,41 @@ This package contains developer documentation for %{name}.
 %ifarch ppc s390
 %patch4 -p1 -b .double2intsPPC32
 %endif
-%patch10 -p1 -b .aarch64
+%ifarch aarch64
+%patch5 -p1 -b .aarch64
+%endif
+%ifarch %{power64} s390x
+%patch6 -p1 -b .cloop_fix
+%endif
+%ifarch %{power64}
+%patch7 -p1 -b .ppc64_align
+%endif
+%patch8 -p1 -b .ppc64le
 
 %build
 %ifarch s390 %{arm} ppc
 # Use linker flags to reduce memory consumption on low-mem architectures
 %global optflags %{optflags} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads
 %endif
-%ifarch s390
+
+%ifarch s390 %{arm}
 # Decrease debuginfo verbosity to reduce memory consumption even more
-%global optflags %(echo %{optflags} | sed 's/-g/-g1/')
+%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
 %endif
 
 %ifarch ppc
-# Use linker flag -relax to get WebKit2 build under ppc(32) with JIT disabled
-%global optflags %{optflags} -Wl,-relax
+# Use linker flag -relax to get WebKit build under ppc(32) with JIT disabled
+%global optflags %{optflags} -Wl,-relax -latomic
 %endif
 
-# Build with -g1 on all platforms to avoid running into 4 GB ar format limit
-# https://bugs.webkit.org/show_bug.cgi?id=91154
-%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
+%ifarch s390 s390x ppc %{power64} aarch64
+%global optflags %{optflags} -DENABLE_YARR_JIT=0
+%endif
 
-CFLAGS="%{optflags} -DLIBSOUP_I_HAVE_READ_BUG_594377_AND_KNOW_SOUP_PASSWORD_MANAGER_MIGHT_GO_AWAY" %configure                                                   \
+%configure                                                      \
                         --with-gtk=2.0                          \
                         --disable-webkit2                       \
-%ifarch s390 s390x ppc ppc64 aarch64
+%ifarch s390 s390x ppc %{power64} aarch64
                         --disable-jit                           \
 %else
                         --enable-jit                            \
@@ -201,6 +214,10 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
 %{_datadir}/gtk-doc/html/webkitgtk
 
 %changelog
+* Thu May 15 2014 Tomas Popela <tpopela at redhat.com> 2.4.2-1
+- Update to 2.4.2
+- Fix for CLoop on ppc64, ppc64le and s390x
+
 * Fri Apr 25 2014 Peter Robinson <pbrobinson at fedoraproject.org> 2.4.1-2
 - Switch over to geoclue2
 


More information about the scm-commits mailing list