From 085901eb25a24e4be298f13aee5c2c9350260e49 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 11 Aug 2008 10:09:21 +0000 Subject: Add "unicode" processing alignment patch from mozilla's bugzilla to make firefox work again on archs requiring strict alignement. Bump pkgrevision. --- www/firefox/Makefile | 3 +- www/firefox/distinfo | 5 ++- www/firefox/patches/patch-ee | 37 +++++++++++++++++ www/firefox/patches/patch-ef | 37 +++++++++++++++++ www/firefox/patches/patch-eg | 99 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 179 insertions(+), 2 deletions(-) create mode 100755 www/firefox/patches/patch-ee create mode 100755 www/firefox/patches/patch-ef create mode 100755 www/firefox/patches/patch-eg (limited to 'www/firefox') diff --git a/www/firefox/Makefile b/www/firefox/Makefile index 5a1d0c8fd32..2527ed21589 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -1,7 +1,8 @@ -# $NetBSD: Makefile,v 1.46 2007/08/07 21:59:11 ghen Exp $ +# $NetBSD: Makefile,v 1.47 2008/08/11 10:09:21 martin Exp $ MOZILLA= firefox COMMENT= Lightweight gecko-based web browser +PKGREVISION= 1 MOZILLA_USE_GTK2= # yes MOZILLA_USE_XFT= YES diff --git a/www/firefox/distinfo b/www/firefox/distinfo index 6dc645da1be..d9650e9e01f 100644 --- a/www/firefox/distinfo +++ b/www/firefox/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.80 2008/07/16 09:52:56 ghen Exp $ +$NetBSD: distinfo,v 1.81 2008/08/11 10:09:21 martin Exp $ SHA1 (firefox-2.0.0.16-source.tar.bz2) = ae1d451ce85a5515b37d73d2c4b7cb1377206d86 RMD160 (firefox-2.0.0.16-source.tar.bz2) = 485c5d7c3c3fc9c462ee348802742905d3becfdf @@ -68,3 +68,6 @@ SHA1 (patch-ea) = 14e31d17c2493e468cd01f99abfc996853a11032 SHA1 (patch-eb) = dc9232b10075d17f7ed742e7be8ea036db2f0241 SHA1 (patch-ec) = 8235af6634306b2a5725754cd5a32285b311b714 SHA1 (patch-ed) = ae922f591b871a1f427c4c32d76a2c25701382d4 +SHA1 (patch-ee) = 02a9320b2f9e8d9cdb3837b74b7aa51080946d73 +SHA1 (patch-ef) = d9ac38cca1105931db34927930984cc35c3cd833 +SHA1 (patch-eg) = 82a92c2982c5a19df866323a2522703a166ba24e diff --git a/www/firefox/patches/patch-ee b/www/firefox/patches/patch-ee new file mode 100755 index 00000000000..0e3514e1e82 --- /dev/null +++ b/www/firefox/patches/patch-ee @@ -0,0 +1,37 @@ +$NetBSD: patch-ee,v 1.1 2008/08/11 10:09:21 martin Exp $ + +This is align.patch from https://bugzilla.mozilla.org/show_bug.cgi?id=161826 +(https://bugzilla.mozilla.org/attachment.cgi?id=294965) + +It is needed to make firefox work on CPUs requiring strict alignment. + +(Part 1 of 3 [patch-ee .. patch-eg]) + +Index: intl/unicharutil/util/nsUnicharUtils.cpp +=================================================================== +RCS file: /cvsroot/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp,v +retrieving revision 1.27.8.1 +diff -u -b -B -u -8 -p -r1.27.8.1 nsUnicharUtils.cpp +--- intl/unicharutil/util/nsUnicharUtils.cpp 22 Jun 2006 19:13:00 -0000 1.27.8.1 ++++ intl/unicharutil/util/nsUnicharUtils.cpp 31 Dec 2007 16:07:40 -0000 +@@ -343,8 +343,20 @@ ToUpperCase(PRUnichar aChar) + if (aChar < 256) + result = toupper(char(aChar)); + else + result = aChar; + } + return result; + } + ++void ++SetUnichar(void *ptr, PRUnichar aChar) ++{ ++#if NEED_STRICT_ALIGNMENT ++ *((char *) ptr) = *((char *) &aChar); ++ *((char *) ptr + 1) = *((char *) &aChar + 1); ++#else ++ *((PRUnichar *) ptr) = aChar; ++#endif ++} ++ ++ diff --git a/www/firefox/patches/patch-ef b/www/firefox/patches/patch-ef new file mode 100755 index 00000000000..c8cc00683fc --- /dev/null +++ b/www/firefox/patches/patch-ef @@ -0,0 +1,37 @@ +$NetBSD: patch-ef,v 1.1 2008/08/11 10:09:21 martin Exp $ + +This is align.patch from https://bugzilla.mozilla.org/show_bug.cgi?id=161826 +(https://bugzilla.mozilla.org/attachment.cgi?id=294965) + +It is needed to make firefox work on CPUs requiring strict alignment. + +(Part 2 of 3 [patch-ee .. patch-eg]) + +Index: intl/unicharutil/util/nsUnicharUtils.h +=================================================================== +RCS file: /cvsroot/mozilla/intl/unicharutil/util/nsUnicharUtils.h,v +retrieving revision 1.19 +diff -u -b -B -u -8 -p -r1.19 nsUnicharUtils.h +--- intl/unicharutil/util/nsUnicharUtils.h 24 Feb 2005 15:50:57 -0000 1.19 ++++ intl/unicharutil/util/nsUnicharUtils.h 31 Dec 2007 16:07:40 -0000 +@@ -77,16 +77,20 @@ inline PRBool CaseInsensitiveFindInReada + aHay.BeginReading(searchBegin), + aHay.EndReading(searchEnd), + nsCaseInsensitiveStringComparator()); + } + + PRUnichar ToUpperCase(PRUnichar); + PRUnichar ToLowerCase(PRUnichar); + ++#define NEED_STRICT_ALIGNMENT defined(__sparc__) || defined(__alpha__) || defined(__mips__) ++ ++void SetUnichar(void *, PRUnichar); ++ + inline PRBool IsUpperCase(PRUnichar c) { + return ToLowerCase(c) != c; + } + + inline PRBool IsLowerCase(PRUnichar c) { + return ToUpperCase(c) != c; + } + diff --git a/www/firefox/patches/patch-eg b/www/firefox/patches/patch-eg new file mode 100755 index 00000000000..fd73ab08792 --- /dev/null +++ b/www/firefox/patches/patch-eg @@ -0,0 +1,99 @@ +$NetBSD: patch-eg,v 1.1 2008/08/11 10:09:21 martin Exp $ + +This is align.patch from https://bugzilla.mozilla.org/show_bug.cgi?id=161826 +(https://bugzilla.mozilla.org/attachment.cgi?id=294965) + +It is needed to make firefox work on CPUs requiring strict alignment. + +(Part 3 of 3 [patch-ee .. patch-eg]) + +Index: layout/generic/nsTextFrame.cpp +=================================================================== +RCS file: /cvsroot/mozilla/layout/generic/Attic/nsTextFrame.cpp,v +retrieving revision 1.513.4.17 +diff -u -b -B -u -8 -p -r1.513.4.17 nsTextFrame.cpp +--- layout/generic/nsTextFrame.cpp 19 Sep 2007 01:45:40 -0000 1.513.4.17 ++++ layout/generic/nsTextFrame.cpp 31 Dec 2007 16:07:41 -0000 +@@ -5118,28 +5118,37 @@ struct TextRun { + mSegments[mNumSegments].mIsWhitespace = aIsWhitespace; + mTotalContentLen += aContentLen; + mSegments[mNumSegments].mContentLen = PRUint32(mTotalContentLen); + mNumSegments++; + } + }; + + // Transforms characters in place from ascii to Unicode +-static void ++static PRUnichar * + TransformTextToUnicode(char* aText, PRInt32 aNumChars) + { + // Go backwards over the characters and convert them. + unsigned char* cp1 = (unsigned char*)aText + aNumChars - 1; +- PRUnichar* cp2 = (PRUnichar*)aText + (aNumChars - 1); ++ PRUnichar* cp2; ++ PRUnichar* ret; + +- while (aNumChars-- > 0) { +- // XXX: If you crash here then you may see the issue described +- // in http://bugzilla.mozilla.org/show_bug.cgi?id=36146#c44 +- *cp2-- = PRUnichar(*cp1--); +- } ++ if ((unsigned long) aText & 0x1) ++ cp2 = ((PRUnichar*)(aText + 1)); ++ else ++ cp2 = (PRUnichar*)aText; ++ ++ ret = cp2; ++ ++ cp2 += (aNumChars - 1); ++ ++ while (aNumChars-- > 0) ++ SetUnichar(cp2--, PRUnichar(*cp1--)); ++ ++ return ret; + } + + PRUint32 + nsTextFrame::EstimateNumChars(PRUint32 aAvailableWidth, + PRUint32 aAverageCharWidth) + { + // Estimate the number of characters that will fit. Use 105% of the available + // width divided by the average character width. +@@ -5697,17 +5706,17 @@ nsTextFrame::MeasureText(nsPresContext* + PRUnichar* pWordBuf = lastWordPtr; + PRUint32 wordBufLen = aTx.GetWordBufferLength() - + (lastWordPtr - aTx.GetWordBuffer()); + + if (aTx.TransformedTextIsAscii()) { + // The text transform buffer contains ascii characters, so + // transform it to Unicode + NS_ASSERTION(wordBufLen >= PRUint32(lastWordLen), "no room to transform in place"); +- TransformTextToUnicode((char*)lastWordPtr, lastWordLen); ++ pWordBuf = TransformTextToUnicode((char*)lastWordPtr, lastWordLen); + } + + // Look ahead in the text-run and compute the final word + // width, taking into account any style changes and stopping + // at the first breakable point. + if (!aTextData.mMeasureText || (lastWordDimensions.width == -1)) { + // We either didn't measure any text or we measured multiple words + // at once so either way we don't know lastWordDimensions. We'll have to +@@ -6227,17 +6236,17 @@ nsTextFrame::TrimTrailingWhiteSpace(nsPr + + static void + RevertSpacesToNBSP(PRUnichar* aBuffer, PRInt32 aWordLen) + { + PRUnichar* end = aBuffer + aWordLen; + for (; aBuffer < end; aBuffer++) { + PRUnichar ch = *aBuffer; + if (ch == ' ') { +- *aBuffer = CH_NBSP; ++ SetUnichar(aBuffer, CH_NBSP); + } + } + } + + nsTextDimensions + nsTextFrame::ComputeTotalWordDimensions(nsPresContext* aPresContext, + nsILineBreaker* aLineBreaker, + nsLineLayout& aLineLayout, -- cgit v1.2.3