forked from pool/MozillaFirefox
Accepting request 103184 from mozilla:Factory
- Use YARR interpreter instead of PCRE on platforms where YARR JIT is not supported, since PCRE doesnt build (bmo#691898) - fix ppc64 build (bmo#703534) OBS-URL: https://build.opensuse.org/request/show/103184 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/MozillaFirefox?expand=0&rev=142
This commit is contained in:
commit
56abb2fded
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 7 10:40:58 UTC 2012 - dvaleev@suse.com
|
||||||
|
|
||||||
|
- Use YARR interpreter instead of PCRE on platforms where YARR JIT
|
||||||
|
is not supported, since PCRE doesnt build (bmo#691898)
|
||||||
|
- fix ppc64 build (bmo#703534)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Jan 30 09:41:59 UTC 2012 - wr@rosenauer.org
|
Mon Jan 30 09:41:59 UTC 2012 - wr@rosenauer.org
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
%define major 10
|
%define major 10
|
||||||
%define mainver %major.0
|
%define mainver %major.0
|
||||||
|
|
||||||
@ -88,6 +87,8 @@ Patch11: mozilla-sle11.patch
|
|||||||
Patch12: mozilla-linux3.patch
|
Patch12: mozilla-linux3.patch
|
||||||
Patch13: mozilla-a11y.patch
|
Patch13: mozilla-a11y.patch
|
||||||
Patch14: mozilla-disable-neon-option.patch
|
Patch14: mozilla-disable-neon-option.patch
|
||||||
|
Patch15: mozilla-bmo703534.patch
|
||||||
|
Patch16: mozilla-yarr-pcre.patch
|
||||||
# Firefox/browser
|
# Firefox/browser
|
||||||
Patch31: firefox-browser-css.patch
|
Patch31: firefox-browser-css.patch
|
||||||
Patch32: firefox-cross-desktop.patch
|
Patch32: firefox-cross-desktop.patch
|
||||||
@ -216,6 +217,8 @@ cd $RPM_BUILD_DIR/mozilla
|
|||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
%patch13 -p1
|
%patch13 -p1
|
||||||
%patch14 -p1
|
%patch14 -p1
|
||||||
|
%patch15 -p1
|
||||||
|
%patch16 -p1
|
||||||
#
|
#
|
||||||
%patch31 -p1
|
%patch31 -p1
|
||||||
%patch32 -p1
|
%patch32 -p1
|
||||||
|
29
mozilla-bmo703534.patch
Normal file
29
mozilla-bmo703534.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User Mike Hommey <mh+mozilla@glandium.org>
|
||||||
|
# Date 1321613368 -3600
|
||||||
|
# Node ID 15cf58eb7923d34de7e61df80fa5f8a18a995abf
|
||||||
|
# Parent aeb035da53283c56370992f254e4f79d7dd180f8
|
||||||
|
Bug 703534 - Fix build failure on platforms without YARR JIT. r=luke
|
||||||
|
target: M11
|
||||||
|
|
||||||
|
diff --git a/js/src/jscompartment.cpp b/js/src/jscompartment.cpp
|
||||||
|
--- a/js/src/jscompartment.cpp
|
||||||
|
+++ b/js/src/jscompartment.cpp
|
||||||
|
@@ -45,17 +45,16 @@
|
||||||
|
#include "jsiter.h"
|
||||||
|
#include "jsmath.h"
|
||||||
|
#include "jsproxy.h"
|
||||||
|
#include "jsscope.h"
|
||||||
|
#include "jstracer.h"
|
||||||
|
#include "jswatchpoint.h"
|
||||||
|
#include "jswrapper.h"
|
||||||
|
#include "assembler/wtf/Platform.h"
|
||||||
|
-#include "assembler/jit/ExecutableAllocator.h"
|
||||||
|
#include "yarr/BumpPointerAllocator.h"
|
||||||
|
#include "methodjit/MethodJIT.h"
|
||||||
|
#include "methodjit/PolyIC.h"
|
||||||
|
#include "methodjit/MonoIC.h"
|
||||||
|
#include "vm/Debugger.h"
|
||||||
|
|
||||||
|
#include "jsgcinlines.h"
|
||||||
|
#include "jsscopeinlines.h"
|
285
mozilla-yarr-pcre.patch
Normal file
285
mozilla-yarr-pcre.patch
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
From: Mike Hommey <mh@glandium.org>
|
||||||
|
Date: Sat, 24 Dec 2011 09:56:58 +0100
|
||||||
|
Subject: Bug 691898 - Use YARR interpreter instead of PCRE on platforms where
|
||||||
|
YARR JIT is not supported
|
||||||
|
|
||||||
|
---
|
||||||
|
js/src/Makefile.in | 21 +++++++++++++--------
|
||||||
|
js/src/vm/RegExpObject-inl.h | 28 ++++++----------------------
|
||||||
|
js/src/vm/RegExpObject.cpp | 36 ------------------------------------
|
||||||
|
js/src/vm/RegExpObject.h | 27 ++++++---------------------
|
||||||
|
js/src/yarr/wtfbridge.h | 2 --
|
||||||
|
5 files changed, 25 insertions(+), 89 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/src/Makefile.in b/js/src/Makefile.in
|
||||||
|
index fc48cbd..49f0bdc 100644
|
||||||
|
--- a/js/src/Makefile.in
|
||||||
|
+++ b/js/src/Makefile.in
|
||||||
|
@@ -416,15 +416,20 @@ CPPSRCS += checks.cc \
|
||||||
|
|
||||||
|
ifeq (,$(filter arm% sparc %86 x86_64,$(TARGET_CPU)))
|
||||||
|
|
||||||
|
-VPATH += $(srcdir)/yarr/pcre \
|
||||||
|
+VPATH += $(srcdir)/assembler \
|
||||||
|
+ $(srcdir)/assembler/wtf \
|
||||||
|
+ $(srcdir)/yarr \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CPPSRCS += \
|
||||||
|
- pcre_compile.cpp \
|
||||||
|
- pcre_exec.cpp \
|
||||||
|
- pcre_tables.cpp \
|
||||||
|
- pcre_xclass.cpp \
|
||||||
|
- pcre_ucp_searchfuncs.cpp \
|
||||||
|
+ Assertions.cpp \
|
||||||
|
+ OSAllocatorOS2.cpp \
|
||||||
|
+ OSAllocatorPosix.cpp \
|
||||||
|
+ OSAllocatorWin.cpp \
|
||||||
|
+ PageBlock.cpp \
|
||||||
|
+ YarrInterpreter.cpp \
|
||||||
|
+ YarrPattern.cpp \
|
||||||
|
+ YarrSyntaxChecker.cpp \
|
||||||
|
$(NULL)
|
||||||
|
else
|
||||||
|
|
||||||
|
@@ -1015,10 +1020,10 @@ endif
|
||||||
|
# Needed to "configure" it correctly. Unfortunately these
|
||||||
|
# flags wind up being applied to all code in js/src, not just
|
||||||
|
# the code in js/src/assembler.
|
||||||
|
-CXXFLAGS += -DUSE_SYSTEM_MALLOC=1 -DENABLE_ASSEMBLER=1
|
||||||
|
+CXXFLAGS += -DUSE_SYSTEM_MALLOC=1
|
||||||
|
|
||||||
|
ifneq (,$(ENABLE_YARR_JIT)$(ENABLE_TRACEJIT)$(ENABLE_METHODJIT))
|
||||||
|
-CXXFLAGS += -DENABLE_JIT=1
|
||||||
|
+CXXFLAGS += -DENABLE_JIT=1 -DENABLE_ASSEMBLER=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
INCLUDES += -I$(srcdir)/assembler -I$(srcdir)/yarr
|
||||||
|
diff --git a/js/src/vm/RegExpObject-inl.h b/js/src/vm/RegExpObject-inl.h
|
||||||
|
index 5f7817d..91108a7 100644
|
||||||
|
--- a/js/src/vm/RegExpObject-inl.h
|
||||||
|
+++ b/js/src/vm/RegExpObject-inl.h
|
||||||
|
@@ -327,6 +327,7 @@ RegExpPrivate::create(JSContext *cx, JSString *source, RegExpFlag flags, TokenSt
|
||||||
|
return RetType(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if ENABLE_YARR_JIT
|
||||||
|
/* This function should be deleted once bad Android platforms phase out. See bug 604774. */
|
||||||
|
inline bool
|
||||||
|
RegExpPrivateCode::isJITRuntimeEnabled(JSContext *cx)
|
||||||
|
@@ -337,12 +338,12 @@ RegExpPrivateCode::isJITRuntimeEnabled(JSContext *cx)
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
inline bool
|
||||||
|
RegExpPrivateCode::compile(JSContext *cx, JSLinearString &pattern, TokenStream *ts,
|
||||||
|
uintN *parenCount, RegExpFlag flags)
|
||||||
|
{
|
||||||
|
-#if ENABLE_YARR_JIT
|
||||||
|
/* Parse the pattern. */
|
||||||
|
ErrorCode yarrError;
|
||||||
|
YarrPattern yarrPattern(pattern, bool(flags & IgnoreCaseFlag), bool(flags & MultilineFlag),
|
||||||
|
@@ -359,7 +360,7 @@ RegExpPrivateCode::compile(JSContext *cx, JSLinearString &pattern, TokenStream *
|
||||||
|
* case we have to bytecode compile it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#ifdef JS_METHODJIT
|
||||||
|
+#if ENABLE_YARR_JIT && defined(JS_METHODJIT)
|
||||||
|
if (isJITRuntimeEnabled(cx) && !yarrPattern.m_containsBackreferences) {
|
||||||
|
if (!cx->compartment->ensureJaegerCompartmentExists(cx))
|
||||||
|
return false;
|
||||||
|
@@ -371,21 +372,11 @@ RegExpPrivateCode::compile(JSContext *cx, JSLinearString &pattern, TokenStream *
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if ENABLE_YARR_JIT
|
||||||
|
codeBlock.setFallBack(true);
|
||||||
|
+#endif
|
||||||
|
byteCode = byteCompile(yarrPattern, cx->compartment->regExpAllocator).get();
|
||||||
|
return true;
|
||||||
|
-#else /* !defined(ENABLE_YARR_JIT) */
|
||||||
|
- int error = 0;
|
||||||
|
- compiled = jsRegExpCompile(pattern.chars(), pattern.length(),
|
||||||
|
- ignoreCase() ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase,
|
||||||
|
- multiline() ? JSRegExpMultiline : JSRegExpSingleLine,
|
||||||
|
- parenCount, &error);
|
||||||
|
- if (error) {
|
||||||
|
- reportPCREError(cx, error);
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- return true;
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool
|
||||||
|
@@ -431,19 +422,12 @@ RegExpPrivateCode::execute(JSContext *cx, const jschar *chars, size_t start, siz
|
||||||
|
else
|
||||||
|
result = JSC::Yarr::execute(codeBlock, chars, start, length, output);
|
||||||
|
#else
|
||||||
|
- result = jsRegExpExecute(cx, compiled, chars, length, start, output, outputCount);
|
||||||
|
+ result = JSC::Yarr::interpret(byteCode, chars, start, length, output);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (result == -1)
|
||||||
|
return Success_NotFound;
|
||||||
|
|
||||||
|
-#if !ENABLE_YARR_JIT
|
||||||
|
- if (result < 0) {
|
||||||
|
- reportPCREError(cx, result);
|
||||||
|
- return Error;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
JS_ASSERT(result >= 0);
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
|
||||||
|
index f75c6a5..7631dd5 100644
|
||||||
|
--- a/js/src/vm/RegExpObject.cpp
|
||||||
|
+++ b/js/src/vm/RegExpObject.cpp
|
||||||
|
@@ -251,7 +251,6 @@ Class js::RegExpClass = {
|
||||||
|
NULL /* trace */
|
||||||
|
};
|
||||||
|
|
||||||
|
-#if ENABLE_YARR_JIT
|
||||||
|
void
|
||||||
|
RegExpPrivateCode::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode error)
|
||||||
|
{
|
||||||
|
@@ -283,41 +282,6 @@ RegExpPrivateCode::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-#else /* !ENABLE_YARR_JIT */
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-RegExpPrivateCode::reportPCREError(JSContext *cx, int error)
|
||||||
|
-{
|
||||||
|
-#define REPORT(msg_) \
|
||||||
|
- JS_ReportErrorFlagsAndNumberUC(cx, JSREPORT_ERROR, js_GetErrorMessage, NULL, msg_); \
|
||||||
|
- return
|
||||||
|
- switch (error) {
|
||||||
|
- case -2: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- case 0: JS_NOT_REACHED("Precondition violation: an error must have occurred.");
|
||||||
|
- case 1: REPORT(JSMSG_TRAILING_SLASH);
|
||||||
|
- case 2: REPORT(JSMSG_TRAILING_SLASH);
|
||||||
|
- case 3: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- case 4: REPORT(JSMSG_BAD_QUANTIFIER);
|
||||||
|
- case 5: REPORT(JSMSG_BAD_QUANTIFIER);
|
||||||
|
- case 6: REPORT(JSMSG_BAD_CLASS_RANGE);
|
||||||
|
- case 7: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- case 8: REPORT(JSMSG_BAD_CLASS_RANGE);
|
||||||
|
- case 9: REPORT(JSMSG_BAD_QUANTIFIER);
|
||||||
|
- case 10: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN);
|
||||||
|
- case 11: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- case 12: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN);
|
||||||
|
- case 13: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- case 14: REPORT(JSMSG_MISSING_PAREN);
|
||||||
|
- case 15: REPORT(JSMSG_BAD_BACKREF);
|
||||||
|
- case 16: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- case 17: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
||||||
|
- default:
|
||||||
|
- JS_NOT_REACHED("Precondition violation: unknown PCRE error code.");
|
||||||
|
- }
|
||||||
|
-#undef REPORT
|
||||||
|
-}
|
||||||
|
-#endif /* ENABLE_YARR_JIT */
|
||||||
|
-
|
||||||
|
bool
|
||||||
|
js::ParseRegExpFlags(JSContext *cx, JSString *flagStr, RegExpFlag *flagsOut)
|
||||||
|
{
|
||||||
|
diff --git a/js/src/vm/RegExpObject.h b/js/src/vm/RegExpObject.h
|
||||||
|
index 1449d56..279f3c0 100644
|
||||||
|
--- a/js/src/vm/RegExpObject.h
|
||||||
|
+++ b/js/src/vm/RegExpObject.h
|
||||||
|
@@ -49,8 +49,6 @@
|
||||||
|
#include "yarr/Yarr.h"
|
||||||
|
#if ENABLE_YARR_JIT
|
||||||
|
#include "yarr/YarrJIT.h"
|
||||||
|
-#else
|
||||||
|
-#include "yarr/pcre/pcre.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace js {
|
||||||
|
@@ -153,48 +151,39 @@ ResetRegExpObject(JSContext *cx, AlreadyIncRefed<RegExpPrivate> rep);
|
||||||
|
/* Abstracts away the gross |RegExpPrivate| backend details. */
|
||||||
|
class RegExpPrivateCode
|
||||||
|
{
|
||||||
|
-#if ENABLE_YARR_JIT
|
||||||
|
typedef JSC::Yarr::BytecodePattern BytecodePattern;
|
||||||
|
typedef JSC::Yarr::ErrorCode ErrorCode;
|
||||||
|
+ typedef JSC::Yarr::YarrPattern YarrPattern;
|
||||||
|
+#if ENABLE_YARR_JIT
|
||||||
|
typedef JSC::Yarr::JSGlobalData JSGlobalData;
|
||||||
|
typedef JSC::Yarr::YarrCodeBlock YarrCodeBlock;
|
||||||
|
- typedef JSC::Yarr::YarrPattern YarrPattern;
|
||||||
|
|
||||||
|
/* Note: Native code is valid only if |codeBlock.isFallBack() == false|. */
|
||||||
|
YarrCodeBlock codeBlock;
|
||||||
|
- BytecodePattern *byteCode;
|
||||||
|
-#else
|
||||||
|
- JSRegExp *compiled;
|
||||||
|
#endif
|
||||||
|
+ BytecodePattern *byteCode;
|
||||||
|
|
||||||
|
public:
|
||||||
|
RegExpPrivateCode()
|
||||||
|
:
|
||||||
|
#if ENABLE_YARR_JIT
|
||||||
|
codeBlock(),
|
||||||
|
- byteCode(NULL)
|
||||||
|
-#else
|
||||||
|
- compiled(NULL)
|
||||||
|
#endif
|
||||||
|
+ byteCode(NULL)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
~RegExpPrivateCode() {
|
||||||
|
#if ENABLE_YARR_JIT
|
||||||
|
codeBlock.release();
|
||||||
|
+#endif
|
||||||
|
if (byteCode)
|
||||||
|
Foreground::delete_<BytecodePattern>(byteCode);
|
||||||
|
-#else
|
||||||
|
- if (compiled)
|
||||||
|
- jsRegExpFree(compiled);
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if ENABLE_YARR_JIT
|
||||||
|
static inline bool isJITRuntimeEnabled(JSContext *cx);
|
||||||
|
- void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error);
|
||||||
|
-#else
|
||||||
|
- void reportPCREError(JSContext *cx, int error);
|
||||||
|
#endif
|
||||||
|
+ void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error);
|
||||||
|
|
||||||
|
inline bool compile(JSContext *cx, JSLinearString &pattern, TokenStream *ts, uintN *parenCount,
|
||||||
|
RegExpFlag flags);
|
||||||
|
@@ -205,11 +194,7 @@ class RegExpPrivateCode
|
||||||
|
int *output, size_t outputCount);
|
||||||
|
|
||||||
|
static size_t getOutputSize(size_t pairCount) {
|
||||||
|
-#if ENABLE_YARR_JIT
|
||||||
|
return pairCount * 2;
|
||||||
|
-#else
|
||||||
|
- return pairCount * 3; /* Should be x2, but PCRE has... needs. */
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --git a/js/src/yarr/wtfbridge.h b/js/src/yarr/wtfbridge.h
|
||||||
|
index ac41d08..fb8eb86 100644
|
||||||
|
--- a/js/src/yarr/wtfbridge.h
|
||||||
|
+++ b/js/src/yarr/wtfbridge.h
|
||||||
|
@@ -49,9 +49,7 @@
|
||||||
|
#include "jsprvtd.h"
|
||||||
|
#include "vm/String.h"
|
||||||
|
#include "assembler/wtf/Platform.h"
|
||||||
|
-#if ENABLE_YARR_JIT
|
||||||
|
#include "assembler/jit/ExecutableAllocator.h"
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
namespace JSC { namespace Yarr {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user