FTBFS hurd: fixing unsupported platform Hurd
authorCarsten Schoenert <c.schoenert@t-online.de>
Sat, 29 Mar 2014 19:58:55 +0000 (20:58 +0100)
committerCarsten Schoenert <c.schoenert@t-online.de>
Thu, 3 Dec 2020 04:35:04 +0000 (04:35 +0000)
On the Hurd platform the build failed in
js/src/jit/AsmJSSignalHandlers.cpp:131 because of unsupported
mode for reading / writing thead state with following message.

 # error "Don't know how to read/write to the thread state via the mcontext_t."

The original patch comes from Richard Brown <rbraun@sceen.net>
https://lists.alioth.debian.org/pipermail/pkg-mozilla-maintainers/2014-March/015565.html

After release of Thunderbird 44 there are additional changes made as the
various configuration files where split into more files.

Gbp-Pq: Topic porting-kfreebsd-hurd
Gbp-Pq: Name FTBFS-hurd-fixing-unsupported-platform-Hurd.patch

dom/plugins/ipc/PluginModuleChild.cpp
dom/plugins/ipc/PluginModuleChild.h
ipc/chromium/chromium-config.mozbuild
ipc/chromium/moz.build
ipc/chromium/src/base/message_loop.cc
ipc/chromium/src/base/process_util_posix.cc
ipc/chromium/src/build/build_config.h
ipc/chromium/src/third_party/libeventcommon.mozbuild
ipc/glue/GeckoChildProcessHost.cpp
js/src/wasm/WasmSignalHandlers.cpp

index 58111414173e54e4bf44abf1015d1ee60f994cab..75f9b7663ccf34a1ca8181f461fa9f6abbc81d17 100644 (file)
@@ -284,7 +284,7 @@ bool PluginModuleChild::InitForChrome(const std::string& aPluginFilename,
 
   GetIPCChannel()->SetAbortOnError(true);
 
-#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
+#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS) || defined(OS_HURD)
   mShutdownFunc =
       (NP_PLUGINSHUTDOWN)PR_FindFunctionSymbol(mLibrary, "NP_Shutdown");
 
@@ -1529,7 +1529,7 @@ mozilla::ipc::IPCResult PluginModuleChild::AnswerNP_GetEntryPoints(
   AssertPluginThread();
   MOZ_ASSERT(mIsChrome);
 
-#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
+#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS) || defined(OS_HURD)
   return IPC_OK();
 #elif defined(OS_WIN) || defined(OS_MACOSX)
   *_retval = mGetEntryPointsFunc(&mFunctions);
@@ -1570,7 +1570,7 @@ NPError PluginModuleChild::DoNP_Initialize(const PluginSettings& aSettings) {
 #endif
 
   NPError result;
-#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
+#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS) || defined(OS_HURD)
   result = mInitializeFunc(&sBrowserFuncs, &mFunctions);
 #elif defined(OS_WIN) || defined(OS_MACOSX)
   result = mInitializeFunc(&sBrowserFuncs);
index 84df35e5d8c1c7d9196bde1894e6c038a6d81ede..a3cbb780485fbc252977a2fbac4f77ab7330084e 100644 (file)
@@ -227,7 +227,7 @@ class PluginModuleChild : public PPluginModuleChild {
 
   // we get this from the plugin
   NP_PLUGINSHUTDOWN mShutdownFunc;
-#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
+#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS) || defined(OS_HURD)
   NP_PLUGINUNIXINIT mInitializeFunc;
 #elif defined(OS_WIN) || defined(OS_MACOSX)
   NP_PLUGININIT mInitializeFunc;
index a8271cb2b101b6e6eed3d8201b3974291558d8bc..e128ad7daebf4bfbd04632bd7cf9ad7a798263c4 100644 (file)
@@ -57,5 +57,10 @@ else:
         DEFINES['OS_OPENBSD'] = 1
         DEFINES['OS_BSD'] = 1
 
+    elif CONFIG['OS_ARCH'] == 'GNU':
+        DEFINES.update({
+            'OS_HURD': 1,
+        })
+
     else:
         DEFINES['OS_LINUX'] = 1
index d29817b91f32ed8a200059b8a47ae5f53c10baa6..930c2f3a27be7898cbaa3676857a6dd14575d7bc 100644 (file)
@@ -110,7 +110,7 @@ if os_bsd or os_linux:
             'src/base/message_pump_glib.cc',
         ]
 
-if os_solaris:
+if os_solaris or os_hurd:
     SOURCES += [
         'src/base/process_util_linux.cc',
         'src/base/time_posix.cc',
index 07785b61163ff1efe659971470d127d42a044d4e..394ffe0013e955458bea560ed822b4be8768c07d 100644 (file)
@@ -21,7 +21,7 @@
 #if defined(OS_POSIX)
 #  include "base/message_pump_libevent.h"
 #endif
-#if defined(OS_LINUX) || defined(OS_BSD)
+#if defined(OS_LINUX) || defined(OS_BSD)|| defined(OS_HURD)
 #  if defined(MOZ_WIDGET_GTK)
 #    include "base/message_pump_glib.h"
 #  endif
@@ -235,7 +235,7 @@ MessageLoop::MessageLoop(Type type, nsIEventTarget* aEventTarget)
   if (type_ == TYPE_UI) {
 #  if defined(OS_MACOSX)
     pump_ = base::MessagePumpMac::Create();
-#  elif defined(OS_LINUX) || defined(OS_BSD)
+#  elif defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD)
     pump_ = new base::MessagePumpForUI();
 #  endif  // OS_LINUX
   } else if (type_ == TYPE_IO) {
index 513396d87e5667300a03c69b50270fb3bc600aa6..745e0997fa32059a8eea8ec54c041cd7a8bf5a7b 100644 (file)
@@ -132,7 +132,7 @@ void CloseSuperfluousFds(void* aCtx, bool (*aShouldPreserve)(void*, int)) {
 #if defined(ANDROID)
   static const rlim_t kSystemDefaultMaxFds = 1024;
   static const char kFDDir[] = "/proc/self/fd";
-#elif defined(OS_LINUX) || defined(OS_SOLARIS)
+#elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(OS_HURD)
   static const rlim_t kSystemDefaultMaxFds = 8192;
   static const char kFDDir[] = "/proc/self/fd";
 #elif defined(OS_MACOSX)
index 4e0711daef840da1227a68589edf0f4877b210f0..72105fc50b716517d9eef5e214bb761a349ceae7 100644 (file)
@@ -24,6 +24,7 @@
 #  define OS_MACOSX 1
 #elif defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)
 #  define OS_LINUX 1
+#  define OS_HURD 1
 #elif defined(__DragonFly__)
 #  define OS_DRAGONFLY 1
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
@@ -50,7 +51,7 @@
 // For access to standard POSIX features, use OS_POSIX instead of a more
 // specific macro.
 #if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
-    defined(OS_SOLARIS)
+    defined(OS_SOLARIS) || defined(OS_HURD)
 #  define OS_POSIX 1
 #endif
 
index 5037ec77a5842350d323a15baa0e90e44ab34d09..c858d9c8aa9135a23518e4f9eb0a6af2a89cfc22 100644 (file)
@@ -8,6 +8,7 @@ os_win = 0
 os_posix = 0
 os_macosx = 0
 os_bsd = 0
+os_hurd = 0
 os_linux = 0
 os_solaris = 0
 
@@ -25,6 +26,10 @@ else:
     elif CONFIG['OS_ARCH'] == 'SunOS':
         os_solaris = 1
         libevent_include_suffix = 'solaris'
+    # attempt to get GNU hurd into the build again, further modification probably needed
+    elif CONFIG['OS_ARCH'] == 'GNU':
+        os_hurd = 1
+        libevent_include_suffix = 'gnu'
     else:
         os_linux = 1
         if CONFIG['OS_TARGET'] == 'Android':
index 0624e5f7b3d6c97f198ffebc56489e42858b5b37..aa4ced96d4ae2148989090fa3652b4944ccaf209 100644 (file)
@@ -1108,12 +1108,31 @@ bool LinuxProcessLauncher::DoSetup() {
 }
 #endif  // MOZ_WIDGET_GTK
 
-#ifdef OS_POSIX
+#if defined(OS_POSIX) || defined(OS_HURD)
 bool PosixProcessLauncher::DoSetup() {
   if (!BaseProcessLauncher::DoSetup()) {
     return false;
   }
 
+//--------------------------------------------------
+  // For POSIX, we have to be extremely anal about *not* using
+  // std::wstring in code compiled with Mozilla's -fshort-wchar
+  // configuration, because chromium is compiled with -fno-short-wchar
+  // and passing wstrings from one config to the other is unsafe.  So
+  // we split the logic here.
+
+#    if defined(MOZ_WIDGET_GTK)
+  if (mProcessType == GeckoProcessType_Content) {
+    // disable IM module to avoid sandbox violation
+    mLaunchOptions->env_map["GTK_IM_MODULE"] = "gtk-im-context-simple";
+
+    // Disable ATK accessibility code in content processes because it conflicts
+    // with the sandbox, and we proxy that information through the main process
+    // anyway.
+    mLaunchOptions->env_map["NO_AT_BRIDGE"] = "1";
+  }
+#    endif  // defined(MOZ_WIDGET_GTK)
+
   // XPCOM may not be initialized in some subprocesses.  We don't want
   // to initialize XPCOM just for the directory service, especially
   // since LD_LIBRARY_PATH is already set correctly in subprocesses
@@ -1122,7 +1141,7 @@ bool PosixProcessLauncher::DoSetup() {
     MOZ_ASSERT(gGREBinPath);
     nsCString path;
     NS_CopyUnicodeToNative(nsDependentString(gGREBinPath), path);
-#  if defined(OS_LINUX) || defined(OS_BSD)
+#  if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD)
     const char* ld_library_path = PR_GetEnv("LD_LIBRARY_PATH");
     nsCString new_ld_lib_path(path.get());
 
@@ -1221,7 +1240,7 @@ bool PosixProcessLauncher::DoSetup() {
   mChildArgv.push_back(mPidString);
 
   if (!CrashReporter::IsDummy()) {
-#  if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
+#  if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS) || defined(OS_HURD)
     int childCrashFd, childCrashRemapFd;
     if (!CrashReporter::CreateNotificationPipeForChild(&childCrashFd,
                                                        &childCrashRemapFd)) {
index 78d154408435ac1b4be824749bd84d59ec84b741..a6610f3e655047f44fead2bc2b793a5d02565037 100644 (file)
@@ -109,7 +109,7 @@ using mozilla::DebugOnly;
 #    define R01_sig(p) ((p)->sc_frame.fixreg[1])
 #    define R32_sig(p) ((p)->sc_frame.srr0)
 #  endif
-#elif defined(__linux__) || defined(__sun)
+#elif defined(__linux__) || defined(__sun) || defined(__GNU__)
 #  if defined(__linux__)
 #    define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_EIP])
 #    define EBP_sig(p) ((p)->uc_mcontext.gregs[REG_EBP])