summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog32
-rw-r--r--debian/patches/dyson-MachineStackMarker-stackPointer.patch89
-rw-r--r--debian/patches/dyson-MathExtras.patch29
-rw-r--r--debian/patches/dyson-solaris-amd64-memory-layout.patch487
-rw-r--r--debian/patches/dyson-use-system-malloc.patch14
-rw-r--r--debian/patches/dyson-yield.patch25
-rw-r--r--debian/patches/series5
-rwxr-xr-xdebian/rules5
8 files changed, 686 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index b0dca54..0d38a1a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -365,6 +365,17 @@ qtwebkit-opensource-src (5.3.2+dfsg-4) unstable; urgency=medium
-- Felix Geyer <fgeyer@debian.org> Wed, 01 Apr 2015 19:44:29 +0200
+qtwebkit-opensource-src (5.3.2+dfsg-3+dyson1) unstable; urgency=medium
+
+ * Package for Dyson
+ * Deleted debian/patches/dyson-offlineasm-isnan.patch (applied
+ upstream)
+ * Refreshed debian/patches/dyson-use-system-malloc.patch
+ * Refreshed debian/patches/dyson-solaris-amd64-memory-layout.patch
+ * Updated debian/libqt5webkit5.symbols for illumos libc (_IO_FILE vs _FILE)
+
+ -- Igor Pashev <pashev.igor@gmail.com> Sun, 01 Mar 2015 22:38:15 +0300
+
qtwebkit-opensource-src (5.3.2+dfsg-3) unstable; urgency=medium
* Backport three patches to fix crashes:
@@ -475,6 +486,27 @@ qtwebkit-opensource-src (5.2.1+dfsg1-1) unstable; urgency=medium
-- Lisandro Damián Nicanor Pérez Meyer <lisandro@debian.org> Sun, 27 Apr 2014 22:23:04 -0300
+qtwebkit-opensource-src (5.2.1+dfsg-6~dyson2) unstable; urgency=medium
+
+ * Use system malloc on Dyson (dyson-use-system-malloc.patch)
+
+ -- Igor Pashev <pashev.igor@gmail.com> Wed, 30 Apr 2014 14:42:44 +0400
+
+qtwebkit-opensource-src (5.2.1+dfsg-6~dyson1) unstable; urgency=medium
+
+ * Package for Dyson
+ * Added dyson-MathExtras.patch
+ * Added dyson-yield.patch
+ * Added dyson-MachineStackMarker-stackPointer.patch
+ * Added dyson-solaris-amd64-memory-layout.patch
+ * Added dyson-offlineasm-isnan.patch
+ * Built with QMAKE_CXXFLAGS += -fpermissive (invalid conversion from ‘signed
+ char*’ to ‘int8_t* {aka char*}’) in JSCTypedArrayStubs.h
+ * Updated debian/libqt5webkit5.symbols for illumos-amd64
+ * Build libqt5webkit5-dbg on illumos-amd64
+
+ -- Igor Pashev <pashev.igor@gmail.com> Tue, 29 Apr 2014 11:10:51 +0400
+
qtwebkit-opensource-src (5.2.1+dfsg-5) unstable; urgency=medium
* Upload to unstable.
diff --git a/debian/patches/dyson-MachineStackMarker-stackPointer.patch b/debian/patches/dyson-MachineStackMarker-stackPointer.patch
new file mode 100644
index 0000000..fe86514
--- /dev/null
+++ b/debian/patches/dyson-MachineStackMarker-stackPointer.patch
@@ -0,0 +1,89 @@
+Index: qt5webkit/Source/JavaScriptCore/heap/MachineStackMarker.cpp
+===================================================================
+--- qt5webkit.orig/Source/JavaScriptCore/heap/MachineStackMarker.cpp 2014-02-02 00:37:54.000000000 +0400
++++ qt5webkit/Source/JavaScriptCore/heap/MachineStackMarker.cpp 2014-04-28 14:04:11.798389583 +0400
+@@ -20,6 +20,9 @@
+ */
+
+ #include "config.h"
++#if OS(SOLARIS)
++#undef _FILE_OFFSET_BITS
++#endif
+ #include "MachineStackMarker.h"
+
+ #include "ConservativeRoots.h"
+@@ -49,6 +52,10 @@
+ #include <unistd.h>
+
+ #if OS(SOLARIS)
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <procfs.h>
+ #include <thread.h>
+ #else
+ #include <pthread.h>
+@@ -317,6 +324,7 @@
+ #error Need a thread register struct for this platform
+ #endif
+
++#if !OS(SOLARIS)
+ static size_t getPlatformThreadRegisters(const PlatformThread& platformThread, PlatformThreadRegisters& regs)
+ {
+ #if OS(DARWIN)
+@@ -383,6 +391,7 @@
+ #error Need a way to get thread registers on this platform
+ #endif
+ }
++#endif
+
+ static inline void* otherThreadStackPointer(const PlatformThreadRegisters& regs)
+ {
+@@ -446,6 +455,7 @@
+ #endif
+ }
+
++#if !OS(SOLARIS)
+ static void freePlatformThreadRegisters(PlatformThreadRegisters& regs)
+ {
+ #if USE(PTHREADS) && !OS(WINDOWS) && !OS(DARWIN) && !OS(QNX)
+@@ -454,20 +464,37 @@
+ UNUSED_PARAM(regs);
+ #endif
+ }
++#endif
+
+ void MachineThreads::gatherFromOtherThread(ConservativeRoots& conservativeRoots, Thread* thread)
+ {
++#if OS(SOLARIS)
++ struct lwpstatus lwp;
++ char procfile[64];
++ int fd;
++ snprintf(procfile, 64, "/proc/self/lwp/%u/lwpstatus", thread->platformThread);
++ fd = open(procfile, O_RDONLY, 0);
++ if (fd == -1) {
++ fprintf(stderr, "%s: %s\n", procfile, strerror(errno));
++ abort();
++ }
++ pread(fd, &lwp, sizeof(lwp), 0);
++ close(fd);
++ void* stackPointer = (void*)lwp.pr_reg[REG_SP];
++#else
+ PlatformThreadRegisters regs;
+ size_t regSize = getPlatformThreadRegisters(thread->platformThread, regs);
+
+ conservativeRoots.add(static_cast<void*>(&regs), static_cast<void*>(reinterpret_cast<char*>(&regs) + regSize));
+
+ void* stackPointer = otherThreadStackPointer(regs);
++
++ freePlatformThreadRegisters(regs);
++#endif
++
+ void* stackBase = thread->stackBase;
+ swapIfBackwards(stackPointer, stackBase);
+ conservativeRoots.add(stackPointer, stackBase);
+-
+- freePlatformThreadRegisters(regs);
+ }
+
+ void MachineThreads::gatherConservativeRoots(ConservativeRoots& conservativeRoots, void* stackCurrent)
diff --git a/debian/patches/dyson-MathExtras.patch b/debian/patches/dyson-MathExtras.patch
new file mode 100644
index 0000000..e375228
--- /dev/null
+++ b/debian/patches/dyson-MathExtras.patch
@@ -0,0 +1,29 @@
+Index: qtwebkit-opensource-src-5.2.1+dfsg/Source/WTF/wtf/MathExtras.h
+===================================================================
+--- qtwebkit-opensource-src-5.2.1+dfsg.orig/Source/WTF/wtf/MathExtras.h 2014-02-02 00:37:41.000000000 +0400
++++ qtwebkit-opensource-src-5.2.1+dfsg/Source/WTF/wtf/MathExtras.h 2014-04-28 13:25:25.330249107 +0400
+@@ -88,24 +88,6 @@
+
+ #endif
+
+-#if OS(SOLARIS)
+-
+-namespace std {
+-
+-#ifndef isfinite
+-inline bool isfinite(double x) { return finite(x) && !isnand(x); }
+-#endif
+-#ifndef signbit
+-inline bool signbit(double x) { return copysign(1.0, x) < 0; }
+-#endif
+-#ifndef isinf
+-inline bool isinf(double x) { return !finite(x) && !isnand(x); }
+-#endif
+-
+-} // namespace std
+-
+-#endif
+-
+ #if OS(OPENBSD)
+
+ namespace std {
diff --git a/debian/patches/dyson-solaris-amd64-memory-layout.patch b/debian/patches/dyson-solaris-amd64-memory-layout.patch
new file mode 100644
index 0000000..4a4cffe
--- /dev/null
+++ b/debian/patches/dyson-solaris-amd64-memory-layout.patch
@@ -0,0 +1,487 @@
+Description: fix for Solaris/amd64 memory layout
+ This patch:
+ 1. Fixes C++ classes
+ 2. Disables JIT and enables LLInt
+ 3. Fixes LLInt
+
+ TODO: Fix JIT
+Index: qt5webkit/Source/WTF/wtf/Platform.h
+===================================================================
+--- qt5webkit.orig/Source/WTF/wtf/Platform.h
++++ qt5webkit/Source/WTF/wtf/Platform.h
+@@ -433,6 +433,15 @@
+ #define WTF_OS_SOLARIS 1
+ #endif
+
++#if CPU(X86_64) && OS(SOLARIS)
++# define WTF_OS_SOLARIS_AMD64 1
++# endif
++
++// Let's port LLInt first:
++#if OS(SOLARIS_AMD64)
++#define ENABLE_JIT 0
++#endif
++
+ /* OS(WINCE) - Windows CE; note that for this platform OS(WINDOWS) is also defined */
+ #if defined(_WIN32_WCE)
+ #define WTF_OS_WINCE 1
+@@ -815,7 +824,7 @@
+ low-level interpreter. */
+ #if !defined(ENABLE_LLINT) \
+ && ENABLE(JIT) \
+- && (OS(DARWIN) || OS(LINUX)) \
++ && (OS(DARWIN) || OS(LINUX) || OS(SOLARIS)) \
+ && (PLATFORM(MAC) || PLATFORM(IOS) || PLATFORM(GTK) || PLATFORM(QT)) \
+ && (CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(ARM_TRADITIONAL) || CPU(MIPS) || CPU(SH4))
+ #define ENABLE_LLINT 1
+@@ -823,7 +832,7 @@
+
+ #if !defined(ENABLE_DFG_JIT) && ENABLE(JIT) && !COMPILER(MSVC)
+ /* Enable the DFG JIT on X86 and X86_64. Only tested on Mac and GNU/Linux. */
+-#if (CPU(X86) || CPU(X86_64)) && (OS(DARWIN) || OS(LINUX))
++#if (CPU(X86) || CPU(X86_64)) && (OS(DARWIN) || OS(LINUX) || OS(SOLARIS))
+ #define ENABLE_DFG_JIT 1
+ #endif
+ /* Enable the DFG JIT on ARMv7. Only tested on iOS and Qt Linux. */
+Index: qt5webkit/Source/JavaScriptCore/runtime/JSCJSValue.h
+===================================================================
+--- qt5webkit.orig/Source/JavaScriptCore/runtime/JSCJSValue.h
++++ qt5webkit/Source/JavaScriptCore/runtime/JSCJSValue.h
+@@ -387,6 +387,14 @@ private:
+ // alignment for a GC cell, and in the zero page).
+ #define ValueEmpty 0x0ll
+ #define ValueDeleted 0x4ll
++#if OS(SOLARIS_AMD64)
++// https://bugzilla.mozilla.org/show_bug.cgi?id=577056
++// Memory layout for 64-bit Solaris is different than other 64-bit systems.
++// User space memory may locate on PART-A (0xFFFFFD80.00000000 - 0xFFFF8000.00000000)
++// and PART-B (0x00008000.00000000 - 0x00000000.04000000).
++ bool isSolarisAMD64StackPointer() const;
++#endif
++
+ #endif
+
+ EncodedValueDescriptor u;
+Index: qt5webkit/Source/JavaScriptCore/runtime/JSCJSValueInlines.h
+===================================================================
+--- qt5webkit.orig/Source/JavaScriptCore/runtime/JSCJSValueInlines.h
++++ qt5webkit/Source/JavaScriptCore/runtime/JSCJSValueInlines.h
+@@ -336,6 +336,13 @@ inline bool JSValue::asBoolean() const
+
+ #else // !USE(JSVALUE32_64) i.e. USE(JSVALUE64)
+
++#if OS(SOLARIS_AMD64)
++inline bool JSValue::isSolarisAMD64StackPointer() const
++{
++ return ((u.asInt64 & 0xFFFF800000000000LL) == 0xFFFF800000000000LL);
++}
++#endif
++
+ // 0x0 can never occur naturally because it has a tag of 00, indicating a pointer value, but a payload of 0x0, which is in the (invalid) zero page.
+ inline JSValue::JSValue()
+ {
+@@ -412,6 +419,10 @@ inline int32_t JSValue::asInt32() const
+
+ inline bool JSValue::isDouble() const
+ {
++#if OS(SOLARIS_AMD64)
++ if (isSolarisAMD64StackPointer())
++ return false;
++#endif
+ return isNumber() && !isInt32();
+ }
+
+@@ -437,22 +448,38 @@ inline JSValue::JSValue(JSFalseTag)
+
+ inline bool JSValue::isUndefinedOrNull() const
+ {
++#if OS(SOLARIS_AMD64)
++ if (isSolarisAMD64StackPointer())
++ return false;
++#endif
+ // Undefined and null share the same value, bar the 'undefined' bit in the extended tag.
+ return (u.asInt64 & ~TagBitUndefined) == ValueNull;
+ }
+
+ inline bool JSValue::isBoolean() const
+ {
++#if OS(SOLARIS_AMD64)
++ if (isSolarisAMD64StackPointer())
++ return false;
++#endif
+ return (u.asInt64 & ~1) == ValueFalse;
+ }
+
+ inline bool JSValue::isCell() const
+ {
++#if OS(SOLARIS_AMD64)
++ if (isSolarisAMD64StackPointer())
++ return true; // TRUE!
++#endif
+ return !(u.asInt64 & TagMask);
+ }
+
+ inline bool JSValue::isInt32() const
+ {
++#if OS(SOLARIS_AMD64)
++ if (isSolarisAMD64StackPointer())
++ return false;
++#endif
+ return (u.asInt64 & TagTypeNumber) == TagTypeNumber;
+ }
+
+@@ -483,6 +510,10 @@ inline double JSValue::asDouble() const
+
+ inline bool JSValue::isNumber() const
+ {
++#if OS(SOLARIS_AMD64)
++ if (isSolarisAMD64StackPointer())
++ return false;
++#endif
+ return u.asInt64 & TagTypeNumber;
+ }
+
+Index: qt5webkit/Source/JavaScriptCore/jit/JITInlines.h
+===================================================================
+--- qt5webkit.orig/Source/JavaScriptCore/jit/JITInlines.h
++++ qt5webkit/Source/JavaScriptCore/jit/JITInlines.h
+@@ -799,7 +799,14 @@ ALWAYS_INLINE void JIT::emitInitRegister
+
+ ALWAYS_INLINE JIT::Jump JIT::emitJumpIfJSCell(RegisterID reg)
+ {
++#if OS(SOLARIS_AMD64)
++ // Does "reg" hold solaris 64-bit stack pointer?
++ move(TrustedImm64(static_cast<uint64_t>(0xFFFF800000000000)), scratchRegister);
++ and64(reg, scratchRegister);
++ return branch64(Equal, scratchRegister, TrustedImm64(static_cast<uint64_t>(0xFFFF800000000000)));
++#else
+ return branchTest64(Zero, reg, tagMaskRegister);
++#endif
+ }
+
+ ALWAYS_INLINE JIT::Jump JIT::emitJumpIfBothJSCells(RegisterID reg1, RegisterID reg2, RegisterID scratch)
+Index: qt5webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
+===================================================================
+--- qt5webkit.orig/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
++++ qt5webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
+@@ -31,6 +31,9 @@ const ValueFalse = TagBitTypeOther
+ const ValueTrue = TagBitTypeOther | TagBitBool | 1
+ const ValueUndefined = TagBitTypeOther | TagBitUndefined
+ const ValueNull = TagBitTypeOther
++if SOLARIS_AMD64
++const solarisAMD64StackBottom = 0xFFFF800000000000
++end
+
+ # Utilities.
+ macro jumpToInstruction()
+@@ -167,12 +170,21 @@ end
+
+ macro loadConstantOrVariableInt32(index, value, slow)
+ loadConstantOrVariable(index, value)
++if SOLARIS_AMD64
++ bqaeq value, solarisAMD64StackBottom, slow
++end
+ bqb value, tagTypeNumber, slow
+ end
+
+ macro loadConstantOrVariableCell(index, value, slow)
+ loadConstantOrVariable(index, value)
++if SOLARIS_AMD64
++ bqaeq value, solarisAMD64StackBottom, .done
++end
+ btqnz value, tagMask, slow
++if SOLARIS_AMD64
++.done:
++end
+ end
+
+ macro writeBarrier(value)
+@@ -280,7 +292,13 @@ _llint_op_convert_this:
+ traceExecution()
+ loadisFromInstruction(1, t0)
+ loadq [cfr, t0, 8], t0
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .opConvertThisSolarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .opConvertThisSlow
++if SOLARIS_AMD64
++.opConvertThisSolarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t0
+ bbb Structure::m_typeInfo + TypeInfo::m_type[t0], ObjectType, .opConvertThisSlow
+ loadpFromInstruction(2, t1)
+@@ -364,7 +382,13 @@ _llint_op_neq:
+ macro equalNullComparison()
+ loadisFromInstruction(2, t0)
+ loadq [cfr, t0, 8], t0
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .solarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .immediate
++if SOLARIS_AMD64
++.solarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t2
+ btbnz Structure::m_typeInfo + TypeInfo::m_flags[t2], MasqueradesAsUndefined, .masqueradesAsUndefined
+ move 0, t0
+@@ -404,6 +428,10 @@ macro strictEq(equalityOperation, slowPa
+ loadisFromInstruction(2, t2)
+ loadConstantOrVariable(t0, t1)
+ loadConstantOrVariable(t2, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .slow
++ bqaeq t1, solarisAMD64StackBottom, .slow
++end
+ move t0, t2
+ orq t1, t2
+ btqz t2, tagMask, .slow
+@@ -440,6 +468,9 @@ macro preOp(arithmeticOperation, slowPat
+ traceExecution()
+ loadisFromInstruction(1, t0)
+ loadq [cfr, t0, 8], t1
++if SOLARIS_AMD64
++ bqaeq t1, solarisAMD64StackBottom, .slow
++end
+ bqb t1, tagTypeNumber, .slow
+ arithmeticOperation(t1, .slow)
+ orq tagTypeNumber, t1
+@@ -468,6 +499,9 @@ _llint_op_to_number:
+ loadisFromInstruction(2, t0)
+ loadisFromInstruction(1, t1)
+ loadConstantOrVariable(t0, t2)
++if SOLARIS_AMD64
++ bqaeq t2, solarisAMD64StackBottom, .opToNumberSlow
++end
+ bqaeq t2, tagTypeNumber, .opToNumberIsImmediate
+ btqz t2, tagTypeNumber, .opToNumberSlow
+ .opToNumberIsImmediate:
+@@ -484,6 +518,9 @@ _llint_op_negate:
+ loadisFromInstruction(2, t0)
+ loadisFromInstruction(1, t1)
+ loadConstantOrVariable(t0, t2)
++if SOLARIS_AMD64
++ bqaeq t2, solarisAMD64StackBottom, .opNegateSlow
++end
+ bqb t2, tagTypeNumber, .opNegateNotInt
+ btiz t2, 0x7fffffff, .opNegateSlow
+ negi t2
+@@ -506,7 +543,13 @@ macro binaryOpCustomStore(integerOperati
+ loadisFromInstruction(2, t2)
+ loadConstantOrVariable(t0, t1)
+ loadConstantOrVariable(t2, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .slow
++end
+ bqb t0, tagTypeNumber, .op1NotInt
++if SOLARIS_AMD64
++ bqaeq t1, solarisAMD64StackBottom, .op2NotInt
++end
+ bqb t1, tagTypeNumber, .op2NotInt
+ loadisFromInstruction(1, t2)
+ integerOperationAndStore(t1, t0, .slow, t2)
+@@ -515,6 +558,9 @@ macro binaryOpCustomStore(integerOperati
+ .op1NotInt:
+ # First operand is definitely not an int, the second operand could be anything.
+ btqz t0, tagTypeNumber, .slow
++if SOLARIS_AMD64
++ bqaeq t1, solarisAMD64StackBottom, .slow
++end
+ bqaeq t1, tagTypeNumber, .op1NotIntOp2Int
+ btqz t1, tagTypeNumber, .slow
+ addq tagTypeNumber, t1
+@@ -535,6 +581,9 @@ macro binaryOpCustomStore(integerOperati
+ .op2NotInt:
+ # First operand is definitely an int, the second is definitely not.
+ loadisFromInstruction(1, t2)
++if SOLARIS_AMD64
++ bqaeq t1, solarisAMD64StackBottom, .slow
++end
+ btqz t1, tagTypeNumber, .slow
+ ci2d t0, ft0
+ addq tagTypeNumber, t1
+@@ -624,6 +673,10 @@ macro bitOp(operation, slowPath, advance
+ loadisFromInstruction(1, t3)
+ loadConstantOrVariable(t0, t1)
+ loadConstantOrVariable(t2, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .slow
++ bqaeq t1, solarisAMD64StackBottom, .slow
++end
+ bqb t0, tagTypeNumber, .slow
+ bqb t1, tagTypeNumber, .slow
+ operation(t1, t0, .slow)
+@@ -717,6 +770,9 @@ _llint_op_instanceof:
+ loadp JSCell::m_structure[t2], t2
+ loadq Structure::m_prototype[t2], t2
+ bqeq t2, t1, .opInstanceofDone
++if SOLARIS_AMD64
++ bqaeq t2, solarisAMD64StackBottom, .opInstanceofLoop
++end
+ btqz t2, tagMask, .opInstanceofLoop
+
+ move 0, t0
+@@ -735,6 +791,9 @@ _llint_op_is_undefined:
+ loadisFromInstruction(2, t1)
+ loadisFromInstruction(1, t2)
+ loadConstantOrVariable(t1, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .opIsUndefinedCell
++end
+ btqz t0, tagMask, .opIsUndefinedCell
+ cqeq t0, ValueUndefined, t3
+ orq ValueFalse, t3
+@@ -772,6 +831,12 @@ _llint_op_is_number:
+ loadisFromInstruction(2, t1)
+ loadisFromInstruction(1, t2)
+ loadConstantOrVariable(t1, t0)
++if SOLARIS_AMD64
++ bqb t0, solarisAMD64StackBottom, .opIsNumberNotSolarisAMD64StackPointer
++ storeq ValueFalse, [cfr, t2, 8]
++ dispatch(3)
++.opIsNumberNotSolarisAMD64StackPointer:
++end
+ tqnz t0, tagTypeNumber, t1
+ orq ValueFalse, t1
+ storeq t1, [cfr, t2, 8]
+@@ -783,7 +848,13 @@ _llint_op_is_string:
+ loadisFromInstruction(2, t1)
+ loadisFromInstruction(1, t2)
+ loadConstantOrVariable(t1, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .opIsStringSolarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .opIsStringNotCell
++if SOLARIS_AMD64
++.opIsStringSolarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t0
+ cbeq Structure::m_typeInfo + TypeInfo::m_type[t0], StringType, t1
+ orq ValueFalse, t1
+@@ -1150,6 +1221,9 @@ _llint_op_put_by_val:
+ contiguousPutByVal(
+ macro (operand, scratch, address)
+ loadConstantOrVariable(operand, scratch)
++if SOLARIS_AMD64
++ bqaeq scratch, solarisAMD64StackBottom, .opPutByValSlow
++end
+ bpb scratch, tagTypeNumber, .opPutByValSlow
+ storep scratch, address
+ end)
+@@ -1159,6 +1233,9 @@ _llint_op_put_by_val:
+ contiguousPutByVal(
+ macro (operand, scratch, address)
+ loadConstantOrVariable(operand, scratch)
++if SOLARIS_AMD64
++ bqaeq scratch, solarisAMD64StackBottom, .notInt
++end
+ bqb scratch, tagTypeNumber, .notInt
+ ci2d scratch, ft0
+ jmp .ready
+@@ -1237,7 +1314,13 @@ macro equalNull(cellHandler, immediateHa
+ loadisFromInstruction(1, t0)
+ assertNotConstant(t0)
+ loadq [cfr, t0, 8], t0
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .solarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .immediate
++if SOLARIS_AMD64
++.solarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t2
+ cellHandler(t2, Structure::m_typeInfo + TypeInfo::m_flags[t2], .target)
+ dispatch(3)
+@@ -1295,6 +1378,10 @@ macro compare(integerCompare, doubleComp
+ loadisFromInstruction(2, t3)
+ loadConstantOrVariable(t2, t0)
+ loadConstantOrVariable(t3, t1)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .slow
++ bqaeq t1, solarisAMD64StackBottom, .slow
++end
+ bqb t0, tagTypeNumber, .op1NotInt
+ bqb t1, tagTypeNumber, .op2NotInt
+ integerCompare(t0, t1, .jumpTarget)
+@@ -1342,6 +1429,9 @@ _llint_op_switch_imm:
+ muli sizeof SimpleJumpTable, t3 # FIXME: would be nice to peephole this!
+ loadp CodeBlock::RareData::m_immediateSwitchJumpTables + VectorBufferOffset[t2], t2
+ addp t3, t2
++if SOLARIS_AMD64
++ bqaeq t1, solarisAMD64StackBottom, .opSwitchImmFallThrough
++end
+ bqb t1, tagTypeNumber, .opSwitchImmNotInt
+ subi SimpleJumpTable::min[t2], t1
+ biaeq t1, SimpleJumpTable::branchOffsets + VectorSizeOffset[t2], .opSwitchImmFallThrough
+@@ -1370,7 +1460,13 @@ _llint_op_switch_char:
+ muli sizeof SimpleJumpTable, t3
+ loadp CodeBlock::RareData::m_characterSwitchJumpTables + VectorBufferOffset[t2], t2
+ addp t3, t2
++if SOLARIS_AMD64
++ bqaeq t1, solarisAMD64StackBottom, .opSwitchCharSolarisAMD64StackPointer
++end
+ btqnz t1, tagMask, .opSwitchCharFallThrough
++if SOLARIS_AMD64
++.opSwitchCharSolarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t1], t0
+ bbneq Structure::m_typeInfo + TypeInfo::m_type[t0], StringType, .opSwitchCharFallThrough
+ bineq JSString::m_length[t1], 1, .opSwitchCharFallThrough
+@@ -1414,7 +1510,13 @@ macro arrayProfileForCall()
+ if VALUE_PROFILER
+ loadisFromInstruction(3, t3)
+ loadq ThisArgumentOffset[cfr, t3, 8], t0
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .solarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .done
++if SOLARIS_AMD64
++.solarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t0
+ loadpFromInstruction(5, t1)
+ storep t0, ArrayProfile::m_lastSeenStructure[t1]
+@@ -1488,7 +1590,13 @@ _llint_op_ret_object_or_this:
+ checkSwitchToJITForEpilogue()
+ loadisFromInstruction(1, t2)
+ loadConstantOrVariable(t2, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .opRetObjectOrThisSolarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .opRetObjectOrThisNotObject
++if SOLARIS_AMD64
++.opRetObjectOrThisSolarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t2
+ bbb Structure::m_typeInfo + TypeInfo::m_type[t2], ObjectType, .opRetObjectOrThisNotObject
+ doReturn()
+@@ -1504,7 +1612,13 @@ _llint_op_to_primitive:
+ loadisFromInstruction(2, t2)
+ loadisFromInstruction(1, t3)
+ loadConstantOrVariable(t2, t0)
++if SOLARIS_AMD64
++ bqaeq t0, solarisAMD64StackBottom, .opToPrimitiveSolarisAMD64StackPointer
++end
+ btqnz t0, tagMask, .opToPrimitiveIsImm
++if SOLARIS_AMD64
++.opToPrimitiveSolarisAMD64StackPointer:
++end
+ loadp JSCell::m_structure[t0], t2
+ bbneq Structure::m_typeInfo + TypeInfo::m_type[t2], StringType, .opToPrimitiveSlowCase
+ .opToPrimitiveIsImm:
+Index: qt5webkit/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
+===================================================================
+--- qt5webkit.orig/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
++++ qt5webkit/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
+@@ -104,6 +104,12 @@
+ #define OFFLINE_ASM_JSVALUE64 0
+ #endif
+
++#if OS(SOLARIS_AMD64)
++#define OFFLINE_ASM_SOLARIS_AMD64 1
++#else
++#define OFFLINE_ASM_SOLARIS_AMD64 0
++#endif
++
+ #if !ASSERT_DISABLED
+ #define OFFLINE_ASM_ASSERT_ENABLED 1
+ #else
diff --git a/debian/patches/dyson-use-system-malloc.patch b/debian/patches/dyson-use-system-malloc.patch
new file mode 100644
index 0000000..7d85c5a
--- /dev/null
+++ b/debian/patches/dyson-use-system-malloc.patch
@@ -0,0 +1,14 @@
+Description: fix crash on Dyson
+Index: qt5webkit/Source/WTF/wtf/Platform.h
+===================================================================
+--- qt5webkit.orig/Source/WTF/wtf/Platform.h
++++ qt5webkit/Source/WTF/wtf/Platform.h
+@@ -721,7 +721,7 @@
+ #if PLATFORM(QT)
+ /* We must not customize the global operator new and delete for the Qt port. */
+ #define ENABLE_GLOBAL_FASTMALLOC_NEW 0
+-#if !OS(UNIX)
++#if !OS(UNIX) || OS(SOLARIS)
+ #define USE_SYSTEM_MALLOC 1
+ #endif
+ #endif
diff --git a/debian/patches/dyson-yield.patch b/debian/patches/dyson-yield.patch
new file mode 100644
index 0000000..ad7d80f
--- /dev/null
+++ b/debian/patches/dyson-yield.patch
@@ -0,0 +1,25 @@
+Description: Fixed conflict with yield() from unistd.h
+Index: qt5webkit/Source/WTF/wtf/Threading.h
+===================================================================
+--- qt5webkit.orig/Source/WTF/wtf/Threading.h 2014-02-02 00:37:42.000000000 +0400
++++ qt5webkit/Source/WTF/wtf/Threading.h 2014-04-28 13:36:40.701768654 +0400
+@@ -112,6 +112,5 @@
+ using WTF::currentThread;
+ using WTF::detachThread;
+ using WTF::waitForThreadCompletion;
+-using WTF::yield;
+
+ #endif // Threading_h
+Index: qt5webkit/Source/WebCore/platform/sql/SQLiteDatabase.cpp
+===================================================================
+--- qt5webkit.orig/Source/WebCore/platform/sql/SQLiteDatabase.cpp 2014-02-02 00:37:47.000000000 +0400
++++ qt5webkit/Source/WebCore/platform/sql/SQLiteDatabase.cpp 2014-04-28 13:37:09.063961263 +0400
+@@ -127,7 +127,7 @@
+ if (!m_db)
+ return;
+ sqlite3_interrupt(m_db);
+- yield();
++ WTF::yield();
+ }
+
+ m_lockingMutex.unlock();
diff --git a/debian/patches/series b/debian/patches/series
index 3dd2ba9..13e6f0c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,3 +5,8 @@ fix_copyChars_segfault.diff
fix_selectedHtml_segfault.diff
fix_ftbfs_x32.diff
path_max.diff
+dyson-MathExtras.patch
+dyson-yield.patch
+dyson-MachineStackMarker-stackPointer.patch
+dyson-solaris-amd64-memory-layout.patch
+dyson-use-system-malloc.patch
diff --git a/debian/rules b/debian/rules
index 7513035..ca6a98a 100755
--- a/debian/rules
+++ b/debian/rules
@@ -35,6 +35,11 @@ ifneq (,$(filter $(DEB_HOST_ARCH_CPU),ppc64el s390x))
EXTRA_CMAKE_ARGUMENTS += -DUSE_SYSTEM_MALLOC=ON
endif
+ifeq (illumos,$(DEB_HOST_ARCH_OS))
+ EXTRA_CMAKE_ARGUMENTS += -DUSE_SYSTEM_MALLOC=ON
+ EXTRA_CMAKE_ARGUMENTS += -DENABLE_JIT=ON
+endif
+
%:
dh $@ --buildsystem=cmake --with pkgkde_symbolshelper