From: Carsten Schoenert Date: Sat, 29 Mar 2014 19:58:55 +0000 (+0100) Subject: FTBFS hurd: fixing unsupported platform Hurd X-Git-Tag: archive/raspbian/1%91.6.1-1_deb10u1+rpi1^2~14 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=48a1d90445468fb12ad58b45706ff95b852641ce;p=thunderbird.git FTBFS hurd: fixing unsupported platform Hurd 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 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 --- diff --git a/ipc/chromium/chromium-config.mozbuild b/ipc/chromium/chromium-config.mozbuild index 968eb017f6..df2ec253ce 100644 --- a/ipc/chromium/chromium-config.mozbuild +++ b/ipc/chromium/chromium-config.mozbuild @@ -56,5 +56,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 diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build index a401245c85..c71b7e4a43 100644 --- a/ipc/chromium/moz.build +++ b/ipc/chromium/moz.build @@ -118,7 +118,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", diff --git a/ipc/chromium/src/base/message_loop.cc b/ipc/chromium/src/base/message_loop.cc index 26f31db899..781f565b45 100644 --- a/ipc/chromium/src/base/message_loop.cc +++ b/ipc/chromium/src/base/message_loop.cc @@ -24,7 +24,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 @@ -244,7 +244,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) { diff --git a/ipc/chromium/src/base/process_util_posix.cc b/ipc/chromium/src/base/process_util_posix.cc index 929d0cba35..1680fb531b 100644 --- a/ipc/chromium/src/base/process_util_posix.cc +++ b/ipc/chromium/src/base/process_util_posix.cc @@ -133,7 +133,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) diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h index e104c58d23..4e29caceea 100644 --- a/ipc/chromium/src/build/build_config.h +++ b/ipc/chromium/src/build/build_config.h @@ -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 diff --git a/ipc/chromium/src/third_party/libeventcommon.mozbuild b/ipc/chromium/src/third_party/libeventcommon.mozbuild index 5037ec77a5..c858d9c8aa 100644 --- a/ipc/chromium/src/third_party/libeventcommon.mozbuild +++ b/ipc/chromium/src/third_party/libeventcommon.mozbuild @@ -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': diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp index fb0614add3..688971de9d 100644 --- a/ipc/glue/GeckoChildProcessHost.cpp +++ b/ipc/glue/GeckoChildProcessHost.cpp @@ -1103,12 +1103,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 @@ -1117,7 +1136,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()); @@ -1191,7 +1210,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)) { diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp index 4ab2a44192..1229c30e81 100644 --- a/js/src/wasm/WasmSignalHandlers.cpp +++ b/js/src/wasm/WasmSignalHandlers.cpp @@ -108,7 +108,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])