[mingw-webkitgtk] Update to 2.0.4
Erik van Pienbroek
epienbro at fedoraproject.org
Fri Aug 16 21:40:24 UTC 2013
commit 88a084115e47e0c97aa86648d8797feccacf49d2
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date: Fri Aug 16 23:37:45 2013 +0200
Update to 2.0.4
- Update to 2.0.4
- Added BR: mingw{32,64}-libwebp
- Use gstreamer1
- Enable JIT
- Switch to unversioned docdirs (#993917)
.gitignore | 1 +
mingw-webkitgtk.spec | 61 +++++----
sources | 2 +-
webkit-1.9.6-wk2-tests.patch | 36 ------
webkit-dont-build-dump-render-tree.patch | 6 +-
webkitgtk-jit-mingw.patch | 92 ++++++++++++++
webkitgtk-jit-win64.patch | 196 ++++++++++++++++++++++++++++++
7 files changed, 328 insertions(+), 66 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 49a5e5e..bde3ae2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@
/webkit-1.8.3.tar.xz
/webkitgtk-1.10.1.tar.xz
/webkitgtk-1.10.2.tar.xz
+/webkitgtk-2.0.4.tar.xz
diff --git a/mingw-webkitgtk.spec b/mingw-webkitgtk.spec
index ea9fa04..8922ab4 100644
--- a/mingw-webkitgtk.spec
+++ b/mingw-webkitgtk.spec
@@ -4,11 +4,11 @@
## "LICENSE") so this short macro allows us to distinguish them by using their
## directory names (from the source tree) as prefixes for the files.
%global add_to_doc_files32() \
- mkdir -p %{buildroot}%{_docdir}/mingw32-webkitgtk-%{version} ||: ; \
- cp -p %1 %{buildroot}%{_docdir}/mingw32-webkitgtk-%{version}/$(echo '%1' | sed -e 's!/!.!g')
+ mkdir -p %{buildroot}%{_docdir}/mingw32-webkitgtk ||: ; \
+ cp -p %1 %{buildroot}%{_docdir}/mingw32-webkitgtk/$(echo '%1' | sed -e 's!/!.!g')
%global add_to_doc_files64() \
- mkdir -p %{buildroot}%{_docdir}/mingw64-webkitgtk-%{version} ||: ; \
- cp -p %1 %{buildroot}%{_docdir}/mingw64-webkitgtk-%{version}/$(echo '%1' | sed -e 's!/!.!g')
+ mkdir -p %{buildroot}%{_docdir}/mingw64-webkitgtk ||: ; \
+ cp -p %1 %{buildroot}%{_docdir}/mingw64-webkitgtk/$(echo '%1' | sed -e 's!/!.!g')
#define svn_revision 41071
@@ -24,8 +24,8 @@
%bcond_with debug
Name: mingw-webkitgtk
-Version: 1.10.2
-Release: 6%{?dist}
+Version: 2.0.4
+Release: 1%{?dist}
Summary: MinGW Windows web content engine library
Group: Development/Libraries
@@ -34,13 +34,13 @@ URL: http://webkit.org/
Source0: http://webkitgtk.org/releases/webkitgtk-%{version}.tar.xz
-# Disable WebKit2 tests when building WebKit1
-# https://lists.webkit.org/pipermail/webkit-gtk/2012-August/001204.html
-Patch1: webkit-1.9.6-wk2-tests.patch
-# The DumpRenderTree tool fails to compile for version 1.3.13
-# as it depends on internal symbols which aren't exported in
-# the .dll so it's safe to skip building this tool
-Patch2: webkit-dont-build-dump-render-tree.patch
+# Skip building the DumpRenderTree tool which requires internal symbols that
+# aren't exported in the .dll.
+Patch2: webkit-dont-build-dump-render-tree.patch
+#https://bugs.webkit.org/show_bug.cgi?id=107965
+Patch7: webkitgtk-jit-win64.patch
+#https://bugs.webkit.org/show_bug.cgi?id=114580
+Patch8: webkitgtk-jit-mingw.patch
BuildArch: noarch
@@ -73,8 +73,9 @@ BuildRequires: mingw32-sqlite
BuildRequires: mingw32-libxslt
BuildRequires: mingw32-pthreads
BuildRequires: mingw32-enchant
-BuildRequires: mingw32-gstreamer
-BuildRequires: mingw32-gstreamer-plugins-base
+BuildRequires: mingw32-gstreamer1
+BuildRequires: mingw32-gstreamer1-plugins-base
+BuildRequires: mingw32-libwebp
BuildRequires: mingw64-filesystem >= 95
BuildRequires: mingw64-gcc
@@ -91,8 +92,9 @@ BuildRequires: mingw64-sqlite
BuildRequires: mingw64-libxslt
BuildRequires: mingw64-pthreads
BuildRequires: mingw64-enchant
-BuildRequires: mingw64-gstreamer
-BuildRequires: mingw64-gstreamer-plugins-base
+BuildRequires: mingw64-gstreamer1
+BuildRequires: mingw64-gstreamer1-plugins-base
+BuildRequires: mingw64-libwebp
%description
@@ -146,8 +148,10 @@ Static version of the MinGW Windows WebKitGTK+ library.
%prep
%setup -qn "webkitgtk-%{version}"
-%patch1 -p1 -b .disable_wk2
%patch2 -p0 -b .dumprendertree
+%patch7 -p1 -b .jit-win64
+%patch8 -p1 -b .jit-mingw
+
autoreconf --verbose --install -I Source/autotools
@@ -159,16 +163,12 @@ autoreconf --verbose --install -I Source/autotools
%mingw_configure \
--with-target=win32 \
--with-gtk=2.0 \
- --with-font-backend=freetype \
- --with-unicode-backend=icu \
--enable-static --enable-shared \
+ --with-acceleration-backend=none \
+ --disable-credential-storage \
--disable-geolocation \
- --disable-jit \
- --disable-plugin-process \
--disable-webkit2 \
- --disable-gtk-doc-html \
-%{?with_coverage: --enable-coverage } \
-%{?with_debug: --enable-debug }
+ --disable-gtk-doc-html
%mingw_make %{?_smp_mflags} V=1
@@ -214,7 +214,7 @@ find $RPM_BUILD_ROOT -name "*.la" -delete
# Win32
%files -n mingw32-webkitgtk -f mingw32-webkitgtk-2.0.lang
-%{_docdir}/mingw32-webkitgtk-%{version}/
+%{_docdir}/mingw32-webkitgtk/
%{mingw32_bindir}/jsc-1.exe
%{mingw32_bindir}/GtkLauncher.exe
%{mingw32_bindir}/libjavascriptcoregtk-1.0-0.dll
@@ -232,7 +232,7 @@ find $RPM_BUILD_ROOT -name "*.la" -delete
# Win64
%files -n mingw64-webkitgtk -f mingw64-webkitgtk-2.0.lang
-%{_docdir}/mingw64-webkitgtk-%{version}/
+%{_docdir}/mingw64-webkitgtk/
%{mingw64_bindir}/jsc-1.exe
%{mingw64_bindir}/GtkLauncher.exe
%{mingw64_bindir}/libjavascriptcoregtk-1.0-0.dll
@@ -250,6 +250,13 @@ find $RPM_BUILD_ROOT -name "*.la" -delete
%changelog
+* Fri Aug 16 2013 Erik van Pienbroek <epienbro at fedoraproject.org> - 2.0.4-1
+- Update to 2.0.4
+- Added BR: mingw{32,64}-libwebp
+- Use gstreamer1
+- Enable JIT
+- Switch to unversioned docdirs (#993917)
+
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.10.2-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/sources b/sources
index 9c1ffda..cd5ab26 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7b1a652af1eb11bee5bf7209e9ff67e6 webkitgtk-1.10.2.tar.xz
+413be319ba171feed9348d1bede6b0a7 webkitgtk-2.0.4.tar.xz
diff --git a/webkit-dont-build-dump-render-tree.patch b/webkit-dont-build-dump-render-tree.patch
index b988404..2ba0da0 100644
--- a/webkit-dont-build-dump-render-tree.patch
+++ b/webkit-dont-build-dump-render-tree.patch
@@ -1,8 +1,10 @@
--- Tools/GNUmakefile.am
+++ Tools/GNUmakefile.am
-@@ -1,5 +1,4 @@
+@@ -3,7 +3,6 @@
+
+ if ENABLE_WEBKIT1
noinst_PROGRAMS += \
- Programs/DumpRenderTree \
Programs/GtkLauncher
+ endif
- # GtkLauncher
diff --git a/webkitgtk-jit-mingw.patch b/webkitgtk-jit-mingw.patch
new file mode 100644
index 0000000..c8daffb
--- /dev/null
+++ b/webkitgtk-jit-mingw.patch
@@ -0,0 +1,92 @@
+diff --git a/Source/JavaScriptCore/jit/JITStubs.cpp b/Source/JavaScriptCore/jit/JITStubs.cpp
+index d3da846..052292f 100644
+--- a/Source/JavaScriptCore/jit/JITStubs.cpp
++++ b/Source/JavaScriptCore/jit/JITStubs.cpp
+@@ -368,7 +368,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
+
+ #else // USE(JSVALUE32_64)
+
+-#if COMPILER(GCC) && CPU(X86_64)
++#if COMPILER(GCC) && CPU(X86_64) && !OS(WINDOWS)
+
+ // These ASSERTs remind you that, if you change the layout of JITStackFrame, you
+ // need to change the assembly trampolines below to match.
+@@ -437,6 +437,75 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
+ "ret" "\n"
+ );
+
++#elif COMPILER(GCC) && CPU(X86_64) && OS(WINDOWS)
++
++// These ASSERTs remind you that, if you change the layout of JITStackFrame, you
++// need to change the assembly trampolines below to match.
++COMPILE_ASSERT(offsetof(struct JITStackFrame, code) % 16 == 0x0, JITStackFrame_maintains_16byte_stack_alignment);
++COMPILE_ASSERT(offsetof(struct JITStackFrame, savedRBX) == 0x58, JITStackFrame_stub_argument_space_matches_ctiTrampoline);
++
++asm (
++".text\n"
++".globl " SYMBOL_STRING(ctiTrampoline) "\n"
++HIDE_SYMBOL(ctiTrampoline) "\n"
++SYMBOL_STRING(ctiTrampoline) ":" "\n"
++ // Dump register parameters to their home address
++ "movq %r9, 0x20(%rsp)" "\n"
++ "movq %r8, 0x18(%rsp)" "\n"
++ "movq %rdx, 0x10(%rsp)" "\n"
++ "movq %rcx, 0x8(%rsp)" "\n"
++
++ "pushq %rbp" "\n"
++ "movq %rsp, %rbp" "\n"
++ "pushq %r12" "\n"
++ "pushq %r13" "\n"
++ "pushq %r14" "\n"
++ "pushq %r15" "\n"
++ "pushq %rbx" "\n"
++
++ // Decrease rsp to point to the start of our JITStackFrame
++ "subq $0x58, %rsp" "\n"
++ "movq $512, %r12" "\n"
++ "movq $0xFFFF000000000000, %r14" "\n"
++ "movq $0xFFFF000000000002, %r15" "\n"
++ "movq %r8, %r13" "\n"
++ "call *%rcx" "\n"
++ "addq $0x58, %rsp" "\n"
++ "popq %rbx" "\n"
++ "popq %r15" "\n"
++ "popq %r14" "\n"
++ "popq %r13" "\n"
++ "popq %r12" "\n"
++ "popq %rbp" "\n"
++ "ret" "\n"
++".globl " SYMBOL_STRING(ctiTrampolineEnd) "\n"
++HIDE_SYMBOL(ctiTrampolineEnd) "\n"
++SYMBOL_STRING(ctiTrampolineEnd) ":" "\n"
++);
++
++asm (
++".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
++HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
++SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
++ "movq %rsp, %rcx" "\n"
++ "call " LOCAL_REFERENCE(cti_vm_throw) "\n"
++ "int3" "\n"
++);
++
++asm (
++".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
++HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
++SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
++ "addq $0x58, %rsp" "\n"
++ "popq %rbx" "\n"
++ "popq %r15" "\n"
++ "popq %r14" "\n"
++ "popq %r13" "\n"
++ "popq %r12" "\n"
++ "popq %rbp" "\n"
++ "ret" "\n"
++);
++
+ #elif COMPILER(MSVC) && CPU(X86_64)
+
+ // These ASSERTs remind you that, if you change the layout of JITStackFrame, you
+--
+1.8.2.1
+
diff --git a/webkitgtk-jit-win64.patch b/webkitgtk-jit-win64.patch
new file mode 100644
index 0000000..dbc77fc
--- /dev/null
+++ b/webkitgtk-jit-win64.patch
@@ -0,0 +1,196 @@
+diff --git a/Source/JavaScriptCore/jit/JITStubs.cpp b/Source/JavaScriptCore/jit/JITStubs.cpp
+index 04f597d..d3da846 100644
+--- a/Source/JavaScriptCore/jit/JITStubs.cpp
++++ b/Source/JavaScriptCore/jit/JITStubs.cpp
+@@ -437,6 +437,13 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
+ "ret" "\n"
+ );
+
++#elif COMPILER(MSVC) && CPU(X86_64)
++
++// These ASSERTs remind you that, if you change the layout of JITStackFrame, you
++// need to change the assembly trampolines in JITStubsMSVC64.asm to match.
++COMPILE_ASSERT(offsetof(struct JITStackFrame, code) % 16 == 0x0, JITStackFrame_maintains_16byte_stack_alignment);
++COMPILE_ASSERT(offsetof(struct JITStackFrame, savedRBX) == 0x58, JITStackFrame_stub_argument_space_matches_ctiTrampoline);
++
+ #else
+ #error "JIT not supported on this platform."
+ #endif
+diff --git a/Source/JavaScriptCore/jit/JITStubs.h b/Source/JavaScriptCore/jit/JITStubs.h
+index f7a30d4..c3f29d0 100644
+--- a/Source/JavaScriptCore/jit/JITStubs.h
++++ b/Source/JavaScriptCore/jit/JITStubs.h
+@@ -87,7 +87,7 @@ union JITStubArg {
+ ArrayAllocationProfile* arrayAllocationProfile() { return static_cast<ArrayAllocationProfile*>(asPointer); }
+ };
+
+-#if CPU(X86_64)
++#if !OS(WINDOWS) && CPU(X86_64)
+ struct JITStackFrame {
+ void* reserved; // Unused
+ JITStubArg args[6];
+@@ -111,6 +111,34 @@ struct JITStackFrame {
+ // When JIT code makes a call, it pushes its return address just below the rest of the stack.
+ ReturnAddressPtr* returnAddressSlot() { return reinterpret_cast<ReturnAddressPtr*>(this) - 1; }
+ };
++#elif OS(WINDOWS) && CPU(X86_64)
++struct JITStackFrame {
++ void* shadow[4]; // Shadow space reserved for a callee's parameters home addresses
++ void* reserved; // Unused, also maintains the 16-bytes stack alignment
++ JITStubArg args[6];
++
++ void* savedRBX;
++ void* savedR15;
++ void* savedR14;
++ void* savedR13;
++ void* savedR12;
++ void* savedRBP;
++ void* savedRIP;
++
++ // Home addresses for our register passed parameters
++ // http://msdn.microsoft.com/en-us/library/ew5tede7.aspx
++ void* code;
++ JSStack* stack;
++ CallFrame* callFrame;
++ void* unused1;
++
++ // Passed on the stack
++ void* unused2;
++ JSGlobalData* globalData;
++
++ // When JIT code makes a call, it pushes its return address just below the rest of the stack.
++ ReturnAddressPtr* returnAddressSlot() { return reinterpret_cast<ReturnAddressPtr*>(this) - 1; }
++};
+ #elif CPU(X86)
+ #if COMPILER(MSVC) || (OS(WINDOWS) && COMPILER(GCC))
+ #pragma pack(push)
+diff --git a/Source/JavaScriptCore/jit/JSInterfaceJIT.h b/Source/JavaScriptCore/jit/JSInterfaceJIT.h
+index 48ad6b2..401e43c 100644
+--- a/Source/JavaScriptCore/jit/JSInterfaceJIT.h
++++ b/Source/JavaScriptCore/jit/JSInterfaceJIT.h
+@@ -57,8 +57,13 @@ namespace JSC {
+ #if CPU(X86_64)
+ static const RegisterID returnValueRegister = X86Registers::eax;
+ static const RegisterID cachedResultRegister = X86Registers::eax;
++#if !OS(WINDOWS)
+ static const RegisterID firstArgumentRegister = X86Registers::edi;
+
++#else
++ static const RegisterID firstArgumentRegister = X86Registers::ecx;
++#endif
++
+ #if ENABLE(VALUE_PROFILER)
+ static const RegisterID bucketCounterRegister = X86Registers::r10;
+ #endif
+diff --git a/Source/JavaScriptCore/jit/ThunkGenerators.cpp b/Source/JavaScriptCore/jit/ThunkGenerators.cpp
+index e4eb384..ac9d3d2 100644
+--- a/Source/JavaScriptCore/jit/ThunkGenerators.cpp
++++ b/Source/JavaScriptCore/jit/ThunkGenerators.cpp
+@@ -264,6 +264,7 @@ static MacroAssemblerCodeRef nativeForGenerator(JSGlobalData* globalData, CodeSp
+ jit.peek(JSInterfaceJIT::regT1);
+ jit.emitPutToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ReturnPC);
+
++#if !OS(WINDOWS)
+ // Calling convention: f(edi, esi, edx, ecx, ...);
+ // Host function signature: f(ExecState*);
+ jit.move(JSInterfaceJIT::callFrameRegister, X86Registers::edi);
+@@ -276,6 +277,21 @@ static MacroAssemblerCodeRef nativeForGenerator(JSGlobalData* globalData, CodeSp
+ jit.call(JSInterfaceJIT::Address(X86Registers::r9, executableOffsetToFunction));
+
+ jit.addPtr(JSInterfaceJIT::TrustedImm32(16 - sizeof(int64_t)), JSInterfaceJIT::stackPointerRegister);
++#else
++ // Calling convention: f(ecx, edx, r8, r9, ...);
++ // Host function signature: f(ExecState*);
++ jit.move(JSInterfaceJIT::callFrameRegister, X86Registers::ecx);
++
++ // Leave space for the callee parameter home addresses and align the stack.
++ jit.subPtr(JSInterfaceJIT::TrustedImm32(4 * sizeof(int64_t) + 16 - sizeof(int64_t)), JSInterfaceJIT::stackPointerRegister);
++
++ jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, X86Registers::edx);
++ jit.loadPtr(JSInterfaceJIT::Address(X86Registers::edx, JSFunction::offsetOfExecutable()), X86Registers::r9);
++ jit.move(JSInterfaceJIT::regT0, JSInterfaceJIT::callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
++ jit.call(JSInterfaceJIT::Address(X86Registers::r9, executableOffsetToFunction));
++
++ jit.addPtr(JSInterfaceJIT::TrustedImm32(4 * sizeof(int64_t) + 16 - sizeof(int64_t)), JSInterfaceJIT::stackPointerRegister);
++#endif
+
+ #elif CPU(ARM)
+ // Load caller frame's scope chain into this callframe so that whatever we call can
+diff --git a/Source/JavaScriptCore/yarr/YarrJIT.cpp b/Source/JavaScriptCore/yarr/YarrJIT.cpp
+index e4da1e8..319cc89 100644
+--- a/Source/JavaScriptCore/yarr/YarrJIT.cpp
++++ b/Source/JavaScriptCore/yarr/YarrJIT.cpp
+@@ -87,10 +87,20 @@ class YarrGenerator : private MacroAssembler {
+ static const RegisterID returnRegister = X86Registers::eax;
+ static const RegisterID returnRegister2 = X86Registers::edx;
+ #elif CPU(X86_64)
++#if !OS(WINDOWS)
+ static const RegisterID input = X86Registers::edi;
+ static const RegisterID index = X86Registers::esi;
+ static const RegisterID length = X86Registers::edx;
+ static const RegisterID output = X86Registers::ecx;
++#else
++ // If the return value doesn't fit in 64bits, its destination is pointed by rcx and the parameters are shifted.
++ // http://msdn.microsoft.com/en-us/library/7572ztz4.aspx
++ COMPILE_ASSERT(sizeof(MatchResult) > sizeof(void*), MatchResult_does_not_fit_in_64bits);
++ static const RegisterID input = X86Registers::edx;
++ static const RegisterID index = X86Registers::r8;
++ static const RegisterID length = X86Registers::r9;
++ static const RegisterID output = X86Registers::r10;
++#endif
+
+ static const RegisterID regT0 = X86Registers::eax;
+ static const RegisterID regT1 = X86Registers::ebx;
+@@ -2514,6 +2524,10 @@ class YarrGenerator : private MacroAssembler {
+ push(X86Registers::ebp);
+ move(stackPointerRegister, X86Registers::ebp);
+ push(X86Registers::ebx);
++#if OS(WINDOWS)
++ if (compileMode == IncludeSubpatterns)
++ loadPtr(Address(X86Registers::ebp, 6 * sizeof(void*)), output);
++#endif
+ #elif CPU(X86)
+ push(X86Registers::ebp);
+ move(stackPointerRegister, X86Registers::ebp);
+@@ -2552,6 +2566,12 @@ class YarrGenerator : private MacroAssembler {
+ void generateReturn()
+ {
+ #if CPU(X86_64)
++#if OS(WINDOWS)
++ // Store the return value in the allocated space pointed by rcx.
++ store64(returnRegister, Address(X86Registers::ecx));
++ store64(returnRegister2, Address(X86Registers::ecx, sizeof(void*)));
++ move(X86Registers::ecx, returnRegister);
++#endif
+ pop(X86Registers::ebx);
+ pop(X86Registers::ebp);
+ #elif CPU(X86)
+diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h
+index 2d90359..293ffeb 100644
+--- a/Source/WTF/wtf/Platform.h
++++ b/Source/WTF/wtf/Platform.h
+@@ -756,12 +756,6 @@
+ #define ENABLE_JIT 0
+ #endif
+
+-/* JIT is not implemented for Windows 64-bit */
+-#if !defined(ENABLE_JIT) && OS(WINDOWS) && CPU(X86_64)
+-#define ENABLE_JIT 0
+-#define ENABLE_YARR_JIT 0
+-#endif
+-
+ #if !defined(ENABLE_JIT) && CPU(SH4) && PLATFORM(QT)
+ #define ENABLE_JIT 1
+ #endif
+@@ -906,7 +900,7 @@
+ /* Pick which allocator to use; we only need an executable allocator if the assembler is compiled in.
+ On x86-64 we use a single fixed mmap, on other platforms we mmap on demand. */
+ #if ENABLE(ASSEMBLER)
+-#if CPU(X86_64) || PLATFORM(IOS)
++#if CPU(X86_64) && !OS(WINDOWS) || PLATFORM(IOS)
+ #define ENABLE_EXECUTABLE_ALLOCATOR_FIXED 1
+ #else
+ #define ENABLE_EXECUTABLE_ALLOCATOR_DEMAND 1
+--
+1.8.2.1
+
More information about the scm-commits
mailing list