diff options
-rw-r--r-- | debian/changelog | 32 | ||||
-rw-r--r-- | debian/patches/dyson-MachineStackMarker-stackPointer.patch | 89 | ||||
-rw-r--r-- | debian/patches/dyson-MathExtras.patch | 29 | ||||
-rw-r--r-- | debian/patches/dyson-solaris-amd64-memory-layout.patch | 487 | ||||
-rw-r--r-- | debian/patches/dyson-use-system-malloc.patch | 14 | ||||
-rw-r--r-- | debian/patches/dyson-yield.patch | 25 | ||||
-rw-r--r-- | debian/patches/series | 5 | ||||
-rwxr-xr-x | debian/rules | 5 |
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*>(®s), static_cast<void*>(reinterpret_cast<char*>(®s) + 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 |