[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: firefox-4.0.1



On Wed, May 11, 2011 at 09:02:06PM +1200, Michael Cree wrote:
> Nice!

Thanks...

> Could you send through those patches to get 4.0.1 working please?

Attached.  They're small enough to risk offending the few debian-alpha
subscribers who might not be interested :-).

> (...) But as Witold has pointed out JIT involves substantial
> work to implement.

In that spirit, the "ExecutableAllocator.h" patch can probably be
ignored: it's a necessary first step if anyone really wants to go down
that rabbit hole, but not necessary for the JIT-less build.

Anyway, please find attached the following patches (none of the diffs
are reversed this time :-)):

js+src+Makefile.in.diff
js+src+assembler+jit+ExecutableAllocator.h.diff
xpcom+glue+nsThreadUtils.cpp.diff
xpcom+glue+nsThreadUtils.h.diff

These are all applied from the source root, i.e., "mozilla-2.0".
For the sake of completeness, the remaining "usual" Alpha patches are as
follows (also relative to the source root):

(1) xpcom/reflect/xptcall/src/md/unix/Makefile.in
	Under the "Linux/Alpha" section, add "Linuxalphaev56" (or
	whatever is appropriate for your particular system) to the
	filter statement.  "Linuxalpha" will not match the PWS 433au.

(2) configure.in
	Add "-Wl,--no-relax" to DSO_LDOPTS.  There's an outstanding bug
	in the GNU ld "relax" code from 2007 that causes the "libxul.so"
	build to fail.

The ".mozconfig" file I'm using is as follows:

====--CUT HERE--====
. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox_obj
ac_add_options --enable-official-branding
ac_add_options --disable-optimize
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-ipc
====--TUC EREH--====

For legal reasons, you may wish to omit the "--enable-official-branding"
option.  I include it for my personal builds because I don't distribute
the binaries, nor do I misrepresent to anyone what I *do* build as an
official (supported) Mozilla product.

--Bob
--- js/src/Makefile.in.ORIG	2011-04-14 00:28:30.000000000 -0500
+++ js/src/Makefile.in	2011-05-09 23:55:32.000000000 -0500
@@ -914,7 +914,11 @@
 # 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 -DENABLE_JIT=1
+#CXXFLAGS += -DUSE_SYSTEM_MALLOC=1 -DENABLE_ASSEMBLER=1 -DENABLE_JIT=1
+#
+# "--disable-jit" no longer honored: do it manually.	--rct
+#
+CXXFLAGS += -DUSE_SYSTEM_MALLOC=1
 
 INCLUDES +=	-I$(srcdir)/assembler -I$(srcdir)/yarr
 
--- js/src/assembler/jit/ExecutableAllocator.h.ORIG	2011-04-14 00:28:30.000000000 -0500
+++ js/src/assembler/jit/ExecutableAllocator.h	2011-05-09 15:03:02.000000000 -0500
@@ -311,7 +311,7 @@
 #endif
 
 
-#if WTF_CPU_X86 || WTF_CPU_X86_64
+#if WTF_CPU_X86 || WTF_CPU_X86_64 || WTF_CPU_ALPHA
     static void cacheFlush(void*, size_t)
     {
     }
--- xpcom/glue/nsThreadUtils.cpp.ORIG	2011-04-14 00:28:50.000000000 -0500
+++ xpcom/glue/nsThreadUtils.cpp	2011-05-10 14:11:55.000000000 -0500
@@ -46,10 +46,6 @@
 # include "nsServiceManagerUtils.h"
 #endif
 
-#ifdef XP_WIN
-#include <windows.h>
-#endif
-
 #ifndef XPCOM_GLUE_AVOID_NSPR
 
 NS_IMPL_THREADSAFE_ISUPPORTS1(nsRunnable, nsIRunnable)
@@ -120,36 +116,20 @@
 #endif
 }
 
-#ifndef MOZILLA_INTERNAL_API
-bool NS_IsMainThread()
+NS_METHOD_(PRBool)
+NS_IsMainThread()
 {
   PRBool result = PR_FALSE;
+#ifdef MOZILLA_INTERNAL_API
+  nsThreadManager::get()->nsThreadManager::GetIsMainThread(&result);
+#else
   nsCOMPtr<nsIThreadManager> mgr =
     do_GetService(NS_THREADMANAGER_CONTRACTID);
   if (mgr)
     mgr->GetIsMainThread(&result);
-  return bool(result);
-}
-#elif defined(XP_WIN)
-extern DWORD gTLSThreadIDIndex;
-bool
-NS_IsMainThread()
-{
-  return TlsGetValue(gTLSThreadIDIndex) == (void*) mozilla::threads::Main;
-}
-#elif !defined(NS_TLS)
-bool NS_IsMainThread()
-{
-  PRBool result = PR_FALSE;
-  nsThreadManager::get()->nsThreadManager::GetIsMainThread(&result);
-  return bool(result);
-}
-#elif !defined(MOZ_ENABLE_LIBXUL)
-bool NS_IsMainThread()
-{
-  return gTLSThreadID == mozilla::threads::Main;
-}
 #endif
+  return result;
+}
 
 NS_METHOD
 NS_DispatchToCurrentThread(nsIRunnable *event)
@@ -207,27 +187,24 @@
 }
 #endif // XPCOM_GLUE_AVOID_NSPR
 
-inline PRBool
-hasPendingEvents(nsIThread *thread)
-{
-  PRBool val;
-  return NS_SUCCEEDED(thread->HasPendingEvents(&val)) && val;
-}
-
 PRBool
 NS_HasPendingEvents(nsIThread *thread)
 {
+#ifdef MOZILLA_INTERNAL_API
   if (!thread) {
-#ifndef MOZILLA_INTERNAL_API
-    nsCOMPtr<nsIThread> current;
-    NS_GetCurrentThread(getter_AddRefs(current));
-    return hasPendingEvents(current);
-#else
     thread = NS_GetCurrentThread();
     NS_ENSURE_TRUE(thread, PR_FALSE);
-#endif
   }
-  return hasPendingEvents(thread);
+#else
+  nsCOMPtr<nsIThread> current;
+  if (!thread) {
+    NS_GetCurrentThread(getter_AddRefs(current));
+    NS_ENSURE_TRUE(current, PR_FALSE);
+    thread = current.get();
+  }
+#endif
+  PRBool val;
+  return NS_SUCCEEDED(thread->HasPendingEvents(&val)) && val;
 }
 
 PRBool
--- xpcom/glue/nsThreadUtils.h.ORIG	2011-04-14 00:28:50.000000000 -0500
+++ xpcom/glue/nsThreadUtils.h	2011-05-10 14:35:07.000000000 -0500
@@ -100,29 +100,14 @@
 extern NS_COM_GLUE NS_METHOD
 NS_GetMainThread(nsIThread **result);
 
-#if defined(MOZILLA_INTERNAL_API) && defined(XP_WIN)
-NS_COM bool NS_IsMainThread();
-#elif defined(MOZILLA_INTERNAL_API) && defined(NS_TLS)
-// This is defined in nsThreadManager.cpp and initialized to `Main` for the
-// main thread by nsThreadManager::Init.
-extern NS_TLS mozilla::threads::ID gTLSThreadID;
-#ifdef MOZ_ENABLE_LIBXUL
-inline bool NS_IsMainThread()
-{
-  return gTLSThreadID == mozilla::threads::Main;
-}
-#else
-NS_COM bool NS_IsMainThread();
-#endif
-#else
 /**
  * Test to see if the current thread is the main thread.
  *
  * @returns PR_TRUE if the current thread is the main thread, and PR_FALSE
  * otherwise.
  */
-extern NS_COM_GLUE bool NS_IsMainThread();
-#endif
+extern NS_COM_GLUE NS_METHOD_(PRBool)
+NS_IsMainThread();
 
 /**
  * Dispatch the given event to the current thread.
@@ -271,25 +256,6 @@
 {
 public:
   virtual void Revoke() = 0;
-
-  // These ReturnTypeEnforcer classes set up a blacklist for return types that
-  // we know are not safe. The default ReturnTypeEnforcer compiles just fine but
-  // already_AddRefed will not.
-  template <typename OtherReturnType>
-  class ReturnTypeEnforcer
-  {
-  public:
-    typedef int ReturnTypeIsSafe;
-  };
-
-  template <class T>
-  class ReturnTypeEnforcer<already_AddRefed<T> >
-  {
-    // No ReturnTypeIsSafe makes this illegal!
-  };
-
-  // Make sure this return type is safe.
-  typedef typename ReturnTypeEnforcer<ReturnType>::ReturnTypeIsSafe check;
 };
 
 template <class ClassType, bool Owning>

Reply to: