Hello, The previous patch matches OS_LINUX because it is incomplete and doesn't take care of some places where a fallback on OS_LINUX is made. Here is an updated version of the patch that builds fine (with nocheck at least) and with which the resulting packages do work well.
-- Richard Braun
>From 689767227771e245fc6990f09ccd0d393baf3b8f Mon Sep 17 00:00:00 2001 From: Richard Braun <rbr...@sceen.net> Date: Mon, 3 Mar 2014 20:50:31 +0100 Subject: [PATCH] Hurd support This doesn't include any change to the test suite. --- dom/plugins/ipc/PluginModuleChild.cpp | 6 +++--- dom/plugins/ipc/PluginModuleChild.h | 2 +- ipc/chromium/chromium-config.mozbuild | 3 +++ ipc/chromium/moz.build | 5 ++++- ipc/chromium/src/base/base_paths.h | 2 +- ipc/chromium/src/base/debug_util_posix.cc | 5 +++-- ipc/chromium/src/base/file_version_info.h | 2 +- ipc/chromium/src/base/message_loop.cc | 4 ++-- ipc/chromium/src/base/process_util_posix.cc | 4 ++-- ipc/chromium/src/build/build_config.h | 4 +++- ipc/chromium/src/chrome/common/transport_dib.h | 6 +++--- ipc/glue/GeckoChildProcessHost.cpp | 8 ++++---- js/src/jit/AsmJSSignalHandlers.cpp | 4 +++- toolkit/components/osfile/modules/osfile_unix_allthreads.jsm | 1 + 14 files changed, 34 insertions(+), 22 deletions(-) diff --git a/dom/plugins/ipc/PluginModuleChild.cpp b/dom/plugins/ipc/PluginModuleChild.cpp index 92b47a1..a9aabb0 100644 --- a/dom/plugins/ipc/PluginModuleChild.cpp +++ b/dom/plugins/ipc/PluginModuleChild.cpp @@ -197,7 +197,7 @@ PluginModuleChild::Init(const std::string& aPluginFilename, // TODO: use PluginPRLibrary here -#if defined(OS_LINUX) || defined(OS_BSD) +#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) mShutdownFunc = (NP_PLUGINSHUTDOWN) PR_FindFunctionSymbol(mLibrary, "NP_Shutdown"); @@ -1825,7 +1825,7 @@ PluginModuleChild::AnswerNP_GetEntryPoints(NPError* _retval) PLUGIN_LOG_DEBUG_METHOD; AssertPluginThread(); -#if defined(OS_LINUX) || defined(OS_BSD) +#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) return true; #elif defined(OS_WIN) || defined(OS_MACOSX) *_retval = mGetEntryPointsFunc(&mFunctions); @@ -1854,7 +1854,7 @@ PluginModuleChild::AnswerNP_Initialize(const uint32_t& aFlags, NPError* _retval) SendBackUpXResources(FileDescriptor(xSocketFd)); #endif -#if defined(OS_LINUX) || defined(OS_BSD) +#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) *_retval = mInitializeFunc(&sBrowserFuncs, &mFunctions); return true; #elif defined(OS_WIN) || defined(OS_MACOSX) diff --git a/dom/plugins/ipc/PluginModuleChild.h b/dom/plugins/ipc/PluginModuleChild.h index 0cb69fd..4cb7da7 100644 --- a/dom/plugins/ipc/PluginModuleChild.h +++ b/dom/plugins/ipc/PluginModuleChild.h @@ -328,7 +328,7 @@ private: // we get this from the plugin NP_PLUGINSHUTDOWN mShutdownFunc; -#if defined(OS_LINUX) || defined(OS_BSD) +#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) NP_PLUGINUNIXINIT mInitializeFunc; #elif defined(OS_WIN) || defined(OS_MACOSX) NP_PLUGININIT mInitializeFunc; diff --git a/ipc/chromium/chromium-config.mozbuild b/ipc/chromium/chromium-config.mozbuild index c6d34b4..d92dfc7 100644 --- a/ipc/chromium/chromium-config.mozbuild +++ b/ipc/chromium/chromium-config.mozbuild @@ -71,5 +71,8 @@ else: 'OS_BSD': 1, }) + elif CONFIG['OS_ARCH'] == 'GNU': + DEFINES['OS_HURD'] = 1 + else: DEFINES['OS_LINUX'] = 1 diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build index d518608..ffa6554 100644 --- a/ipc/chromium/moz.build +++ b/ipc/chromium/moz.build @@ -12,6 +12,7 @@ os_freebsd = 0 os_netbsd = 0 os_openbsd = 0 os_bsd = 0 +os_hurd = 0 os_linux = 0 if CONFIG['OS_ARCH'] == 'WINNT': @@ -32,6 +33,8 @@ else: elif CONFIG['OS_ARCH'] == 'OpenBSD': os_openbsd = 1 os_bsd = 1 + elif CONFIG['OS_ARCH'] == 'GNU': + os_hurd= 1 else: os_linux = 1 @@ -181,7 +184,7 @@ if os_macosx: 'src/chrome/common/mach_ipc_mac.mm', ] -if os_linux: +if os_linux or os_hurd: SOURCES += [ 'src/base/atomicops_internals_x86_gcc.cc', 'src/base/base_paths_linux.cc', diff --git a/ipc/chromium/src/base/base_paths.h b/ipc/chromium/src/base/base_paths.h index 2cb1df1..068acbc 100644 --- a/ipc/chromium/src/base/base_paths.h +++ b/ipc/chromium/src/base/base_paths.h @@ -13,7 +13,7 @@ #include "base/base_paths_win.h" #elif defined(OS_MACOSX) #include "base/base_paths_mac.h" -#elif defined(OS_LINUX) || defined(OS_BSD) +#elif defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) #include "base/base_paths_linux.h" #endif #include "base/path_service.h" diff --git a/ipc/chromium/src/base/debug_util_posix.cc b/ipc/chromium/src/base/debug_util_posix.cc index 18e9a2d..b3135c1 100644 --- a/ipc/chromium/src/base/debug_util_posix.cc +++ b/ipc/chromium/src/base/debug_util_posix.cc @@ -5,7 +5,8 @@ #include "build/build_config.h" #include "base/debug_util.h" -#define MOZ_HAVE_EXECINFO_H (defined(OS_LINUX) && !defined(ANDROID)) +#define MOZ_HAVE_EXECINFO_H ((defined(OS_LINUX) || defined(OS_HURD)) \ + && !defined(ANDROID)) #include <errno.h> #include <fcntl.h> @@ -110,7 +111,7 @@ bool DebugUtil::BeingDebugged() { return being_debugged; } -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_HURD) // We can look in /proc/self/status for TracerPid. We are likely used in crash // handling, so we are careful not to use the heap or have side effects. diff --git a/ipc/chromium/src/base/file_version_info.h b/ipc/chromium/src/base/file_version_info.h index f38d23f..dadd9c0 100644 --- a/ipc/chromium/src/base/file_version_info.h +++ b/ipc/chromium/src/base/file_version_info.h @@ -86,7 +86,7 @@ class FileVersionInfo { explicit FileVersionInfo(NSBundle *bundle); NSBundle *bundle_; -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_HURD) FileVersionInfo(); #endif diff --git a/ipc/chromium/src/base/message_loop.cc b/ipc/chromium/src/base/message_loop.cc index dfe8660..bf0a082 100644 --- a/ipc/chromium/src/base/message_loop.cc +++ b/ipc/chromium/src/base/message_loop.cc @@ -20,7 +20,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 @@ -131,7 +131,7 @@ MessageLoop::MessageLoop(Type type) 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 00d4ef5..2587ff4 100644 --- a/ipc/chromium/src/base/process_util_posix.cc +++ b/ipc/chromium/src/base/process_util_posix.cc @@ -110,7 +110,7 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) { #if defined(ANDROID) static const rlim_t kSystemDefaultMaxFds = 1024; static const char kFDDir[] = "/proc/self/fd"; -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_HURD) static const rlim_t kSystemDefaultMaxFds = 8192; static const char kFDDir[] = "/proc/self/fd"; #elif defined(OS_MACOSX) @@ -202,7 +202,7 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) { // TODO(agl): Remove this function. It's fundamentally broken for multithreaded // apps. void SetAllFDsToCloseOnExec() { -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_HURD) const char fd_dir[] = "/proc/self/fd"; #elif defined(OS_MACOSX) || defined(OS_BSD) const char fd_dir[] = "/dev/fd"; diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h index 32a086d..14d8f79 100644 --- a/ipc/chromium/src/build/build_config.h +++ b/ipc/chromium/src/build/build_config.h @@ -19,6 +19,8 @@ #define OS_MACOSX 1 #elif defined(__linux__) || defined(ANDROID) #define OS_LINUX 1 +#elif defined(__GNU__) +#define OS_HURD 1 #elif defined(__DragonFly__) #define OS_DRAGONFLY 1 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) @@ -42,7 +44,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) +#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_HURD) || defined(OS_BSD) #define OS_POSIX 1 #endif diff --git a/ipc/chromium/src/chrome/common/transport_dib.h b/ipc/chromium/src/chrome/common/transport_dib.h index f466966..cb68eb4 100644 --- a/ipc/chromium/src/chrome/common/transport_dib.h +++ b/ipc/chromium/src/chrome/common/transport_dib.h @@ -7,7 +7,7 @@ #include "base/basictypes.h" -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) +#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_HURD) #include "base/shared_memory.h" #endif @@ -66,7 +66,7 @@ class TransportDIB { uint32_t sequence_num; }; typedef HandleAndSequenceNum Id; -#elif defined(OS_MACOSX) || defined(OS_BSD) +#elif defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_HURD) typedef base::SharedMemoryHandle Handle; // On Mac, the inode number of the backing file is used as an id. typedef base::SharedMemoryId Id; @@ -108,7 +108,7 @@ class TransportDIB { private: TransportDIB(); -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) +#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_HURD) explicit TransportDIB(base::SharedMemoryHandle dib); base::SharedMemory shared_memory_; #elif defined(OS_LINUX) diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp index 573e943..2b96976 100644 --- a/ipc/glue/GeckoChildProcessHost.cpp +++ b/ipc/glue/GeckoChildProcessHost.cpp @@ -494,7 +494,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt // and passing wstrings from one config to the other is unsafe. So // we split the logic here. -#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) +#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_HURD) base::environment_map newEnvVars; ChildPrivileges privs = mPrivileges; if (privs == base::PRIVILEGES_DEFAULT) { @@ -513,7 +513,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt if (NS_SUCCEEDED(rv)) { nsCString path; greDir->GetNativePath(path); -# if defined(OS_LINUX) || defined(OS_BSD) +# if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) # if defined(MOZ_WIDGET_ANDROID) path += "/lib"; # endif // MOZ_WIDGET_ANDROID @@ -622,7 +622,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt childArgv.push_back(pidstring); #if defined(MOZ_CRASHREPORTER) -# if defined(OS_LINUX) || defined(OS_BSD) +# if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_HURD) int childCrashFd, childCrashRemapFd; if (!CrashReporter::CreateNotificationPipeForChild( &childCrashFd, &childCrashRemapFd)) @@ -655,7 +655,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt childArgv.push_back(childProcessType); base::LaunchApp(childArgv, mFileMap, -#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) +#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_HURD) newEnvVars, privs, #endif false, &process, arch); diff --git a/js/src/jit/AsmJSSignalHandlers.cpp b/js/src/jit/AsmJSSignalHandlers.cpp index 20a433b..638ca8d 100644 --- a/js/src/jit/AsmJSSignalHandlers.cpp +++ b/js/src/jit/AsmJSSignalHandlers.cpp @@ -55,10 +55,12 @@ using JS::GenericNaN; # define R13_sig(p) ((p)->sc_r13) # define R14_sig(p) ((p)->sc_r14) # define R15_sig(p) ((p)->sc_r15) -#elif defined(__linux__) || defined(SOLARIS) +#elif defined(__linux__) || defined(__GNU__) || defined(SOLARIS) # if defined(__linux__) # define XMM_sig(p,i) ((p)->uc_mcontext.fpregs->_xmm[i]) # define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_EIP]) +# elif defined(__GNU__) +# define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_EIP]) # else # define XMM_sig(p,i) ((p)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.xmm[i]) # define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_PC]) diff --git a/toolkit/components/osfile/modules/osfile_unix_allthreads.jsm b/toolkit/components/osfile/modules/osfile_unix_allthreads.jsm index 7a59f22..d2825ff 100644 --- a/toolkit/components/osfile/modules/osfile_unix_allthreads.jsm +++ b/toolkit/components/osfile/modules/osfile_unix_allthreads.jsm @@ -42,6 +42,7 @@ let Const = SharedAll.Constants.libc; let libc; let libc_candidates = [ "libSystem.B.dylib", "libc.so.6", + "libc.so.0.3", "libc.so" ]; for (let i = 0; i < libc_candidates.length; ++i) { try { -- 1.9.0