From 4105ebb6ed85aaffec5e4469a939945fb9eea066 Mon Sep 17 00:00:00 2001 From: athenian200 Date: Tue, 1 Oct 2019 18:28:10 -0500 Subject: MoonchildProductions#1251 - Part 4: Core build system changes, lots of libevent/IPC junk. This is mostly ifdefs, but as you can see, Solaris is actually a lot like Linux. They're both more SysV than BSD at core, and most of the differences have more to do with Solaris not using glibc than anything else. I still need to audit a lot of these changes and understand why they're needed and what the alternative approaches are. After this patch, most of the core functionality needed to build Solaris is here. --- ipc/chromium/src/base/message_loop.cc | 4 +- ipc/chromium/src/base/message_pump_glib.cc | 19 +- ipc/chromium/src/base/message_pump_libevent.cc | 3 + ipc/chromium/src/base/platform_thread.h | 2 +- ipc/chromium/src/base/platform_thread_posix.cc | 4 +- ipc/chromium/src/base/process_util.h | 2 +- ipc/chromium/src/base/process_util_posix.cc | 4 +- ipc/chromium/src/base/sys_info_posix.cc | 8 + ipc/chromium/src/base/time.h | 7 + ipc/chromium/src/base/time_posix.cc | 29 +- ipc/chromium/src/build/build_config.h | 4 +- ipc/chromium/src/chrome/common/transport_dib.h | 6 +- ipc/chromium/src/third_party/libevent/arc4random.c | 6 + ipc/chromium/src/third_party/libevent/event.c | 2 + .../src/third_party/libevent/evutil_rand.c | 2 +- .../src/third_party/libevent/include/event2/util.h | 2 +- .../libevent/solaris/event2/event-config.h | 480 +++++++++++++++++++++ .../src/third_party/libeventcommon.mozbuild | 4 + ipc/chromium/src/third_party/moz.build | 5 + 19 files changed, 577 insertions(+), 16 deletions(-) create mode 100644 ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/message_loop.cc b/ipc/chromium/src/base/message_loop.cc index 3c794b276..638018feb 100644 --- a/ipc/chromium/src/base/message_loop.cc +++ b/ipc/chromium/src/base/message_loop.cc @@ -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_SOLARIS) #if defined(MOZ_WIDGET_GTK) #include "base/message_pump_glib.h" #endif @@ -149,7 +149,7 @@ MessageLoop::MessageLoop(Type type, nsIThread* aThread) 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_SOLARIS) pump_ = new base::MessagePumpForUI(); #endif // OS_LINUX } else if (type_ == TYPE_IO) { diff --git a/ipc/chromium/src/base/message_pump_glib.cc b/ipc/chromium/src/base/message_pump_glib.cc index 36ebfdd69..a5e719c72 100644 --- a/ipc/chromium/src/base/message_pump_glib.cc +++ b/ipc/chromium/src/base/message_pump_glib.cc @@ -9,6 +9,9 @@ #include #include +#if defined(OS_SOLARIS) +#include +#endif #include #include @@ -131,6 +134,12 @@ MessagePumpForUI::MessagePumpForUI() // Create our wakeup pipe, which is used to flag when work was scheduled. int fds[2]; CHECK(pipe(fds) == 0); +#if defined(OS_SOLARIS) + int flags = fcntl(fds[0], F_GETFL,0); + if (flags == -1) + flags = 0; + fntl(fds[0], F_SETFL, flags | O_NDELAY); +#endif wakeup_pipe_read_ = fds[0]; wakeup_pipe_write_ = fds[1]; wakeup_gpollfd_->fd = wakeup_pipe_read_; @@ -238,11 +247,15 @@ bool MessagePumpForUI::HandleCheck() { // whether there was data, so this read shouldn't block. if (wakeup_gpollfd_->revents & G_IO_IN) { pipe_full_ = false; - +#ifndef OS_SOLARIS char msg; if (HANDLE_EINTR(read(wakeup_pipe_read_, &msg, 1)) != 1 || msg != '!') { NOTREACHED() << "Error reading from the wakeup pipe."; } +#else + char buf[32]; + while (HANDLE_EINTR(read(wakeup_pipe_read_, &buf, 32))); +#endif // Since we ate the message, we need to record that we have more work, // because HandleCheck() may be called without HandleDispatch being called // afterwards. @@ -311,6 +324,10 @@ void MessagePumpForUI::ScheduleWork() { // variables as we would then need locks all over. This ensures that if // we are sleeping in a poll that we will wake up. char msg = '!'; +#if defined(OS_SOLARIS) + char buf[32]; + while (HANDLE_EINTR(read(wakeup_pipe_read_, &buf, 32))); +#endif if (HANDLE_EINTR(write(wakeup_pipe_write_, &msg, 1)) != 1) { NOTREACHED() << "Could not write to the UI message loop wakeup pipe!"; } diff --git a/ipc/chromium/src/base/message_pump_libevent.cc b/ipc/chromium/src/base/message_pump_libevent.cc index 3cca238c1..daba7c2fe 100644 --- a/ipc/chromium/src/base/message_pump_libevent.cc +++ b/ipc/chromium/src/base/message_pump_libevent.cc @@ -8,6 +8,9 @@ #include #include +#if defined(OS_SOLARIS) +#include +#endif #if defined(ANDROID) || defined(OS_POSIX) #include #endif diff --git a/ipc/chromium/src/base/platform_thread.h b/ipc/chromium/src/base/platform_thread.h index 727a13a84..3432128a6 100644 --- a/ipc/chromium/src/base/platform_thread.h +++ b/ipc/chromium/src/base/platform_thread.h @@ -24,7 +24,7 @@ typedef void* PlatformThreadHandle; // HANDLE #elif defined(OS_POSIX) #include typedef pthread_t PlatformThreadHandle; -#if defined(OS_LINUX) || defined(OS_OPENBSD) || defined(__GLIBC__) +#if defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(__GLIBC__) #include typedef pid_t PlatformThreadId; #elif defined(OS_BSD) diff --git a/ipc/chromium/src/base/platform_thread_posix.cc b/ipc/chromium/src/base/platform_thread_posix.cc index 4acd95f23..fdb2d9200 100644 --- a/ipc/chromium/src/base/platform_thread_posix.cc +++ b/ipc/chromium/src/base/platform_thread_posix.cc @@ -49,7 +49,7 @@ PlatformThreadId PlatformThread::CurrentId() { return port; #elif defined(OS_LINUX) return syscall(__NR_gettid); -#elif defined(OS_OPENBSD) || defined(__GLIBC__) +#elif defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(__GLIBC__) return (intptr_t) (pthread_self()); #elif defined(OS_NETBSD) return _lwp_self(); @@ -103,6 +103,8 @@ void PlatformThread::SetName(const char* name) { pthread_setname_np(pthread_self(), "%s", (void *)name); #elif defined(OS_BSD) && !defined(__GLIBC__) pthread_set_name_np(pthread_self(), name); +#elif defined(OS_SOLARIS) + pthread_setname_np(pthread_self(), name); #else #endif } diff --git a/ipc/chromium/src/base/process_util.h b/ipc/chromium/src/base/process_util.h index 4df1f29fb..2b257b587 100644 --- a/ipc/chromium/src/base/process_util.h +++ b/ipc/chromium/src/base/process_util.h @@ -19,7 +19,7 @@ #ifndef STDOUT_FILENO #define STDOUT_FILENO 1 #endif -#elif defined(OS_LINUX) || defined(__GLIBC__) +#elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(__GLIBC__) #include #include #include diff --git a/ipc/chromium/src/base/process_util_posix.cc b/ipc/chromium/src/base/process_util_posix.cc index ade3ebe5e..3eb952a32 100644 --- a/ipc/chromium/src/base/process_util_posix.cc +++ b/ipc/chromium/src/base/process_util_posix.cc @@ -117,7 +117,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_SOLARIS) static const rlim_t kSystemDefaultMaxFds = 8192; static const char kFDDir[] = "/proc/self/fd"; #elif defined(OS_MACOSX) @@ -209,7 +209,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_SOLARIS) 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/base/sys_info_posix.cc b/ipc/chromium/src/base/sys_info_posix.cc index 81ec78053..1b88883eb 100644 --- a/ipc/chromium/src/base/sys_info_posix.cc +++ b/ipc/chromium/src/base/sys_info_posix.cc @@ -121,7 +121,11 @@ std::wstring SysInfo::GetEnvVar(const wchar_t* var) { // static std::string SysInfo::OperatingSystemName() { +#if !defined(XP_SOLARIS) utsname info; +#else + struct utsname info; +#endif if (uname(&info) < 0) { NOTREACHED(); return ""; @@ -131,7 +135,11 @@ std::string SysInfo::OperatingSystemName() { // static std::string SysInfo::CPUArchitecture() { +#if !defined(XP_SOLARIS) utsname info; +#else + struct utsname info; +#endif if (uname(&info) < 0) { NOTREACHED(); return ""; diff --git a/ipc/chromium/src/base/time.h b/ipc/chromium/src/base/time.h index 55bc7b451..6a5c92d14 100644 --- a/ipc/chromium/src/base/time.h +++ b/ipc/chromium/src/base/time.h @@ -64,6 +64,10 @@ class TimeDelta { return delta_; } +#if defined(OS_SOLARIS) + struct timespec ToTimeSpec() const; +#endif + // Returns the time delta in some unit. The F versions return a floating // point value, the "regular" versions return a rounded-down value. int InDays() const; @@ -226,6 +230,9 @@ class Time { static Time FromDoubleT(double dt); double ToDoubleT() const; +#if defined(OS_SOLARIS) + struct timeval ToTimeVal() const; +#endif #if defined(OS_WIN) static Time FromFileTime(FILETIME ft); diff --git a/ipc/chromium/src/base/time_posix.cc b/ipc/chromium/src/base/time_posix.cc index 2eb76a989..419cc8afb 100644 --- a/ipc/chromium/src/base/time_posix.cc +++ b/ipc/chromium/src/base/time_posix.cc @@ -67,11 +67,13 @@ Time Time::FromExploded(bool is_local, const Exploded& exploded) { timestruct.tm_wday = exploded.day_of_week; // mktime/timegm ignore this timestruct.tm_yday = 0; // mktime/timegm ignore this timestruct.tm_isdst = -1; // attempt to figure it out +#ifndef OS_SOLARIS timestruct.tm_gmtoff = 0; // not a POSIX field, so mktime/timegm ignore timestruct.tm_zone = NULL; // not a POSIX field, so mktime/timegm ignore +#endif time_t seconds; -#ifdef ANDROID +#if defined(ANDROID) || defined(OS_SOLARIS) seconds = mktime(×truct); #else if (is_local) @@ -175,7 +177,7 @@ TimeTicks TimeTicks::Now() { // With numer and denom = 1 (the expected case), the 64-bit absolute time // reported in nanoseconds is enough to last nearly 585 years. -#elif defined(OS_OPENBSD) || defined(OS_POSIX) && \ +#elif defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_POSIX) && \ defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 struct timespec ts; @@ -200,4 +202,27 @@ TimeTicks TimeTicks::HighResNow() { return Now(); } +#if defined(OS_SOLARIS) +struct timespec TimeDelta::ToTimeSpec() const { + int64_t microseconds = InMicroseconds(); + time_t seconds = 0; + if (microseconds >= Time::kMicrosecondsPerSecond) { + seconds = InSeconds(); + microseconds -= seconds * Time::kMicrosecondsPerSecond; + } + struct timespec result = + {seconds, + microseconds * Time::kNanosecondsPerMicrosecond}; + return result; +} + +struct timeval Time::ToTimeVal() const { + struct timeval result; + int64_t us = us_ - kTimeTToMicrosecondsOffset; + result.tv_sec = us / Time::kMicrosecondsPerSecond; + result.tv_usec = us % Time::kMicrosecondsPerSecond; + return result; +} +#endif + } // namespace base diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h index 390fa77a8..7e6beb37a 100644 --- a/ipc/chromium/src/build/build_config.h +++ b/ipc/chromium/src/build/build_config.h @@ -32,6 +32,8 @@ #define OS_NETBSD 1 #elif defined(__OpenBSD__) #define OS_OPENBSD 1 +#elif defined(__sun__) +#define OS_SOLARIS 1 #elif defined(_WIN32) #define OS_WIN 1 #else @@ -47,7 +49,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_BSD) || defined(OS_SOLARIS) #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 b1e5c0fab..e3c40768c 100644 --- a/ipc/chromium/src/chrome/common/transport_dib.h +++ b/ipc/chromium/src/chrome/common/transport_dib.h @@ -68,7 +68,7 @@ class TransportDIB { typedef base::SharedMemoryHandle Handle; // On Mac, the inode number of the backing file is used as an id. typedef base::SharedMemoryId Id; -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_SOLARIS) typedef int Handle; // These two ints are SysV IPC shared memory keys typedef int Id; #endif @@ -98,7 +98,7 @@ class TransportDIB { // wire to give this transport DIB to another process. Handle handle() const; -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_SOLARIS) // Map the shared memory into the X server and return an id for the shared // segment. XID MapToX(Display* connection); @@ -109,7 +109,7 @@ class TransportDIB { #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) explicit TransportDIB(base::SharedMemoryHandle dib); base::SharedMemory shared_memory_; -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_SOLARIS) int key_; // SysV shared memory id void* address_; // mapped address XID x_shm_; // X id for the shared segment diff --git a/ipc/chromium/src/third_party/libevent/arc4random.c b/ipc/chromium/src/third_party/libevent/arc4random.c index cabc46f4b..0dd6934ef 100644 --- a/ipc/chromium/src/third_party/libevent/arc4random.c +++ b/ipc/chromium/src/third_party/libevent/arc4random.c @@ -41,6 +41,10 @@ * RC4 is a registered trademark of RSA Laboratories. */ +#ifdef XP_SOLARIS +#include "build/build_config.h" +#endif + #ifndef ARC4RANDOM_EXPORT #define ARC4RANDOM_EXPORT #endif @@ -477,6 +481,7 @@ arc4random(void) } #endif +#if defined(_we_have_arc4random_buf) || !defined(XP_SOLARIS) ARC4RANDOM_EXPORT void arc4random_buf(void *_buf, size_t n) { @@ -490,6 +495,7 @@ arc4random_buf(void *_buf, size_t n) } _ARC4_UNLOCK(); } +#endif #ifndef ARC4RANDOM_NOUNIFORM /* diff --git a/ipc/chromium/src/third_party/libevent/event.c b/ipc/chromium/src/third_party/libevent/event.c index a979f1f26..f6b44bcaf 100644 --- a/ipc/chromium/src/third_party/libevent/event.c +++ b/ipc/chromium/src/third_party/libevent/event.c @@ -2883,8 +2883,10 @@ event_global_setup_locks_(const int enable_locks) #endif if (evsig_global_setup_locks_(enable_locks) < 0) return -1; +#ifndef OS_SOLARIS if (evutil_secure_rng_global_setup_locks_(enable_locks) < 0) return -1; +#endif return 0; } #endif diff --git a/ipc/chromium/src/third_party/libevent/evutil_rand.c b/ipc/chromium/src/third_party/libevent/evutil_rand.c index 3bab23121..7c92bae23 100644 --- a/ipc/chromium/src/third_party/libevent/evutil_rand.c +++ b/ipc/chromium/src/third_party/libevent/evutil_rand.c @@ -139,7 +139,7 @@ evutil_secure_rng_get_bytes(void *buf, size_t n) ev_arc4random_buf(buf, n); } -#if !defined(__OpenBSD__) && !defined(ANDROID) +#if !defined(__OpenBSD__) && !defined(ANDROID) && !defined(__sun__) void evutil_secure_rng_add_bytes(const char *buf, size_t n) { diff --git a/ipc/chromium/src/third_party/libevent/include/event2/util.h b/ipc/chromium/src/third_party/libevent/include/event2/util.h index 42a28adcb..78516c156 100644 --- a/ipc/chromium/src/third_party/libevent/include/event2/util.h +++ b/ipc/chromium/src/third_party/libevent/include/event2/util.h @@ -672,7 +672,7 @@ void evutil_secure_rng_get_bytes(void *buf, size_t n); */ int evutil_secure_rng_init(void); -#if !defined(__OpenBSD__) && !defined(ANDROID) +#if !defined(__OpenBSD__) && !defined(ANDROID) && !defined(__sun__) /** Seed the random number generator with extra random bytes. You should almost never need to call this function; it should be diff --git a/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h b/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h new file mode 100644 index 000000000..73000106b --- /dev/null +++ b/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h @@ -0,0 +1,480 @@ +/* event2/event-config.h + * + * This file was generated by autoconf when libevent was built, and post- + * processed by Libevent so that its macros would have a uniform prefix. + * + * DO NOT EDIT THIS FILE. + * + * Do not rely on macros in this file existing in later versions. + */ + +#ifndef _EVENT2_EVENT_CONFIG_H_ +#define _EVENT2_EVENT_CONFIG_H_ + +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if libevent should build without support for a debug mode */ +/* #undef _EVENT_DISABLE_DEBUG_MODE */ + +/* Define if libevent should not allow replacing the mm functions */ +/* #undef _EVENT_DISABLE_MM_REPLACEMENT */ + +/* Define if libevent should not be compiled with thread support */ +/* #undef _EVENT_DISABLE_THREAD_SUPPORT */ + +/* Define to 1 if you have the `arc4random' function. */ +#define _EVENT_HAVE_ARC4RANDOM 1 + +/* Define to 1 if you have the `arc4random_buf' function. */ +#define _EVENT_HAVE_ARC4RANDOM_BUF 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the `clock_gettime' function. */ +#define _EVENT_HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the declaration of `CTL_KERN', and to 0 if you + don't. */ +/* #undef _EVENT_HAVE_DECL_CTL_KERN */ + +/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if you + don't. */ +/* #undef _EVENT_HAVE_DECL_KERN_ARND */ + +/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if you + don't. */ +/* #undef _EVENT_HAVE_DECL_KERN_RANDOM */ + +/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if you + don't. */ +/* #undef _EVENT_HAVE_DECL_RANDOM_UUID */ + +/* Define if /dev/poll is available */ +#define _EVENT_HAVE_DEVPOLL 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_DLFCN_H 1 + +/* Define if your system supports the epoll system calls */ +#undef _EVENT_HAVE_EPOLL + +/* Define to 1 if you have the `epoll_ctl' function. */ +/* #undef _EVENT_HAVE_EPOLL_CTL */ + +/* Define to 1 if you have the `eventfd' function. */ +/* #undef _EVENT_HAVE_EVENTFD */ + +/* Define if your system supports event ports */ +/*#define _EVENT_HAVE_EVENT_PORTS 1*/ + +/* Define to 1 if you have the `fcntl' function. */ +#define _EVENT_HAVE_FCNTL 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_FCNTL_H 1 + +/* Define to 1 if the system has the type `fd_mask'. */ +#define _EVENT_HAVE_FD_MASK 1 + +/* Do we have getaddrinfo()? */ +#define _EVENT_HAVE_GETADDRINFO 1 + +/* Define to 1 if you have the `getegid' function. */ +#define _EVENT_HAVE_GETEGID 1 + +/* Define to 1 if you have the `geteuid' function. */ +#define _EVENT_HAVE_GETEUID 1 + +/* Define this if you have any gethostbyname_r() */ +/* #undef _EVENT_HAVE_GETHOSTBYNAME_R */ + +/* Define this if gethostbyname_r takes 3 arguments */ +/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_3_ARG */ + +/* Define this if gethostbyname_r takes 5 arguments */ +/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_5_ARG */ + +/* Define this if gethostbyname_r takes 6 arguments */ +/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_6_ARG */ + +/* Define to 1 if you have the `getnameinfo' function. */ +#define _EVENT_HAVE_GETNAMEINFO 1 + +/* Define to 1 if you have the `getprotobynumber' function. */ +#define _EVENT_HAVE_GETPROTOBYNUMBER 1 + +/* Define to 1 if you have the `getservbyname' function. */ +/* #undef _EVENT_HAVE_GETSERVBYNAME */ + +/* Define to 1 if you have the `gettimeofday' function. */ +#define _EVENT_HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the `inet_aton' function. */ +#define _EVENT_HAVE_INET_ATON 1 + +/* Define to 1 if you have the `inet_ntop' function. */ +#define _EVENT_HAVE_INET_NTOP 1 + +/* Define to 1 if you have the `inet_pton' function. */ +#define _EVENT_HAVE_INET_PTON 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `issetugid' function. */ +#define _EVENT_HAVE_ISSETUGID 1 + +/* Define to 1 if you have the `kqueue' function. */ +/* #undef _EVENT_HAVE_KQUEUE */ + +/* Define if the system has zlib */ +#define _EVENT_HAVE_LIBZ 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mmap' function. */ +#define _EVENT_HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_NETDB_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef _EVENT_HAVE_NETINET_IN6_H */ + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_NETINET_IN_H 1 + +/* Define if the system has openssl */ +#define _EVENT_HAVE_OPENSSL 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_OPENSSL_BIO_H 1 + +/* Define to 1 if you have the `pipe' function. */ +#define _EVENT_HAVE_PIPE 1 + +/* Define to 1 if you have the `poll' function. */ +#define _EVENT_HAVE_POLL 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_POLL_H 1 + +/* Define to 1 if you have the `port_create' function. */ +#define _EVENT_HAVE_PORT_CREATE 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_PORT_H 1 + +/* Define if you have POSIX threads libraries and header files. */ +/* #undef _EVENT_HAVE_PTHREAD */ + +/* Define if we have pthreads on this system */ +#define _EVENT_HAVE_PTHREADS 1 + +/* Define to 1 if you have the `putenv' function. */ +#define _EVENT_HAVE_PUTENV 1 + +/* Define to 1 if the system has the type `sa_family_t'. */ +#define _EVENT_HAVE_SA_FAMILY_T 1 + +/* Define to 1 if you have the `select' function. */ +#define _EVENT_HAVE_SELECT 1 + +/* Define to 1 if you have the `sendfile' function. */ +#define _EVENT_HAVE_SENDFILE 1 + +/* Define to 1 if you have the `setenv' function. */ +#define _EVENT_HAVE_SETENV 1 + +/* Define if F_SETFD is defined in */ +#define _EVENT_HAVE_SETFD 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define _EVENT_HAVE_SIGACTION 1 + +/* Define to 1 if you have the `signal' function. */ +#define _EVENT_HAVE_SIGNAL 1 + +/* Define to 1 if you have the `splice' function. */ +/* #undef _EVENT_HAVE_SPLICE */ + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_STDDEF_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_STRING_H 1 + +/* Define to 1 if you have the `strlcpy' function. */ +#define _EVENT_HAVE_STRLCPY 1 + +/* Define to 1 if you have the `strsep' function. */ +#define _EVENT_HAVE_STRSEP 1 + +/* Define to 1 if you have the `strtok_r' function. */ +#define _EVENT_HAVE_STRTOK_R 1 + +/* Define to 1 if you have the `strtoll' function. */ +#define _EVENT_HAVE_STRTOLL 1 + +/* Define to 1 if the system has the type `struct addrinfo'. */ +#define _EVENT_HAVE_STRUCT_ADDRINFO 1 + +/* Define to 1 if the system has the type `struct in6_addr'. */ +#define _EVENT_HAVE_STRUCT_IN6_ADDR 1 + +/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */ +/* #undef _EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR16 */ + +/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */ +/* #undef _EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR32 */ + +/* Define to 1 if the system has the type `struct sockaddr_in6'. */ +#define _EVENT_HAVE_STRUCT_SOCKADDR_IN6 1 + +/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */ +/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN */ + +/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */ +/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ + +/* Define to 1 if the system has the type `struct sockaddr_storage'. */ +#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE 1 + +/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ +#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 + +/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */ +/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */ + +/* Define to 1 if you have the `sysctl' function. */ +/* #undef _EVENT_HAVE_SYSCTL */ + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_DEVPOLL_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef _EVENT_HAVE_SYS_EPOLL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef _EVENT_HAVE_SYS_EVENTFD_H */ + +/* Define to 1 if you have the header file. */ +/* #undef _EVENT_HAVE_SYS_EVENT_H */ + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_QUEUE_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_SENDFILE_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#undef _EVENT_HAVE_SYS_SYSCTL_H + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_SYS_WAIT_H 1 + +/* Define if TAILQ_FOREACH is defined in */ +#define _EVENT_HAVE_TAILQFOREACH 1 + +/* Define if timeradd is defined in */ +#define _EVENT_HAVE_TIMERADD 1 + +/* Define if timerclear is defined in */ +#define _EVENT_HAVE_TIMERCLEAR 1 + +/* Define if timercmp is defined in */ +#define _EVENT_HAVE_TIMERCMP 1 + +/* Define if timerisset is defined in */ +#define _EVENT_HAVE_TIMERISSET 1 + +/* Define to 1 if the system has the type `uint16_t'. */ +#define _EVENT_HAVE_UINT16_T 1 + +/* Define to 1 if the system has the type `uint32_t'. */ +#define _EVENT_HAVE_UINT32_T 1 + +/* Define to 1 if the system has the type `uint64_t'. */ +#define _EVENT_HAVE_UINT64_T 1 + +/* Define to 1 if the system has the type `uint8_t'. */ +#define _EVENT_HAVE_UINT8_T 1 + +/* Define to 1 if the system has the type `uintptr_t'. */ +#define _EVENT_HAVE_UINTPTR_T 1 + +/* Define to 1 if you have the `umask' function. */ +#define _EVENT_HAVE_UMASK 1 + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `unsetenv' function. */ +#define _EVENT_HAVE_UNSETENV 1 + +/* Define to 1 if you have the `vasprintf' function. */ +#define _EVENT_HAVE_VASPRINTF 1 + +/* Define if kqueue works correctly with pipes */ +/* #undef _EVENT_HAVE_WORKING_KQUEUE */ + +/* Define to 1 if you have the header file. */ +#define _EVENT_HAVE_ZLIB_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define _EVENT_LT_OBJDIR ".libs/" + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef _EVENT_NO_MINUS_C_MINUS_O */ + +/* Numeric representation of the version */ +#define _EVENT_NUMERIC_VERSION 0x02001600 + +/* Name of package */ +#define _EVENT_PACKAGE "libevent" + +/* Define to the address where bug reports for this package should be sent. */ +#define _EVENT_PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define _EVENT_PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define _EVENT_PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define _EVENT_PACKAGE_TARNAME "" + +/* Define to the home page for this package. */ +#define _EVENT_PACKAGE_URL "" + +/* Define to the version of this package. */ +#define _EVENT_PACKAGE_VERSION "" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef _EVENT_PTHREAD_CREATE_JOINABLE */ + +/* ------------------------------------------------------------------------ */ +/* MOZILLA NOTE: the following constants are hand-modified to be suitable */ +/* for both 32-bit and 64-bit platforms. See README.mozilla for details. */ +/* ------------------------------------------------------------------------ */ + +/* The size of `int', as computed by sizeof. */ +#define _EVENT_SIZEOF_INT 4 + +/* The size of `long', as computed by sizeof. */ +#ifdef __LP64__ +#define _EVENT_SIZEOF_LONG 8 +#else +#define _EVENT_SIZEOF_LONG 4 +#endif + +/* The size of `long long', as computed by sizeof. */ +#define _EVENT_SIZEOF_LONG_LONG 8 + +/* The size of `pthread_t', as computed by sizeof. */ +#ifdef __LP64__ +#define _EVENT_SIZEOF_PTHREAD_T 8 +#else +#define _EVENT_SIZEOF_PTHREAD_T 4 +#endif + +/* The size of `short', as computed by sizeof. */ +#define _EVENT_SIZEOF_SHORT 2 + +/* The size of `size_t', as computed by sizeof. */ +#ifdef __LP64__ +#define _EVENT_SIZEOF_SIZE_T 8 +#else +#define _EVENT_SIZEOF_SIZE_T 4 +#endif + +/* The size of `void *', as computed by sizeof. */ +#ifdef __LP64__ +#define _EVENT_SIZEOF_VOID_P 8 +#else +#define _EVENT_SIZEOF_VOID_P 4 +#endif + +/* ------------------------------------------------------------------------ */ +/* END MOZILLA NOTE */ +/* ------------------------------------------------------------------------ */ + +/* Define to 1 if you have the ANSI C header files. */ +#define _EVENT_STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +#define _EVENT_TIME_WITH_SYS_TIME 1 + +/* Version number of package */ +#define _EVENT_VERSION "2.0.22-stable" + +/* Define to appropriate substitue if compiler doesnt have __func__ */ +/* #undef _EVENT___func__ */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef _EVENT_const */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef _EVENT___cplusplus +/* #undef _EVENT_inline */ +#endif + +/* Define to `int' if does not define. */ +/* #undef _EVENT_pid_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef _EVENT_size_t */ + +/* Define to unsigned int if you dont have it */ +/* #undef _EVENT_socklen_t */ + +/* Define to `int' if does not define. */ +/* #undef _EVENT_ssize_t */ + +#endif /* event2/event-config.h */ diff --git a/ipc/chromium/src/third_party/libeventcommon.mozbuild b/ipc/chromium/src/third_party/libeventcommon.mozbuild index 7b0627e17..2b45ecb19 100644 --- a/ipc/chromium/src/third_party/libeventcommon.mozbuild +++ b/ipc/chromium/src/third_party/libeventcommon.mozbuild @@ -9,6 +9,7 @@ os_posix = 0 os_macosx = 0 os_bsd = 0 os_linux = 0 +os_solaris = 0 if CONFIG['OS_ARCH'] == 'WINNT': os_win = 1 @@ -21,6 +22,9 @@ else: 'NetBSD', 'OpenBSD']: os_bsd = 1 libevent_include_suffix = 'bsd' + elif CONFIG['OS_ARCH'] in ['SunOS']: + os_solaris = 1 + libevent_include_suffix = 'solaris' else: os_linux = 1 if CONFIG['OS_TARGET'] == 'Android': diff --git a/ipc/chromium/src/third_party/moz.build b/ipc/chromium/src/third_party/moz.build index 989e2aafc..2b99e53b3 100644 --- a/ipc/chromium/src/third_party/moz.build +++ b/ipc/chromium/src/third_party/moz.build @@ -54,6 +54,11 @@ if os_linux: 'libevent/epoll_sub.c', ] +if os_solaris: + SOURCES += [ + 'libevent/devpoll.c', + ] + # We allow warnings for third-party code that can be updated from upstream. ALLOW_COMPILER_WARNINGS = True -- cgit v1.2.3 From f105b741e549e2c2b985e1458ff6153c3d13929a Mon Sep 17 00:00:00 2001 From: athenian200 Date: Tue, 1 Oct 2019 19:15:26 -0500 Subject: MoonchildProductions#1251 - Part 5: Fix POSIX compliance issue in process_util.h. https://bugzilla.mozilla.org/show_bug.cgi?id=1364865 Solaris doesn't define NAME_MAX because if you read the current POSIX standard literally, no system that supports multiple file systems or networking should be defining it. It's a pedantic choice given that they USED to define NAME_MAX, but Solaris always did take POSIX compliance seriously, for better or worse. --- ipc/chromium/src/base/process_util.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/process_util.h b/ipc/chromium/src/base/process_util.h index 2b257b587..9b1e4fed5 100644 --- a/ipc/chromium/src/base/process_util.h +++ b/ipc/chromium/src/base/process_util.h @@ -44,10 +44,12 @@ typedef PROCESSENTRY32 ProcessEntry; typedef IO_COUNTERS IoCounters; #elif defined(OS_POSIX) // TODO(port): we should not rely on a Win32 structure. +// Using NAME_MAX here would raise POSIX compliance issues +// (see Mozilla bug 1364865). struct ProcessEntry { int pid; int ppid; - char szExeFile[NAME_MAX + 1]; + char szExeFile[_POSIX_PATH_MAX + 1]; }; struct IoCounters { -- cgit v1.2.3 From 57bfda37aebdef6a0f7bbb320d508dfaf1a89718 Mon Sep 17 00:00:00 2001 From: athenian200 Date: Tue, 1 Oct 2019 20:29:46 -0500 Subject: MoonchildProductions#1251 - Part 6: Solaris needs an audio implementation. Current versions of libcubeb already have a Sun audio implementation, but in Firefox 52 and earlier, this was all they had. I'm not completely happy with this implementation because it has issues like video freezing if the soundcard isn't working, but I think fixing this or pulling in a newer libcubeb would be going too far for too little gain. --- ipc/chromium/src/base/sys_info_posix.cc | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/sys_info_posix.cc b/ipc/chromium/src/base/sys_info_posix.cc index 1b88883eb..6adbb1c06 100644 --- a/ipc/chromium/src/base/sys_info_posix.cc +++ b/ipc/chromium/src/base/sys_info_posix.cc @@ -133,6 +133,10 @@ std::string SysInfo::OperatingSystemName() { return std::string(info.sysname); } +// Solaris contains "extern struct utsname utsname;" +// As a consequence, any use of utsname has to be proceeded with struct on +// Solaris. See Mozilla bugs 758483 and 1353332. + // static std::string SysInfo::CPUArchitecture() { #if !defined(XP_SOLARIS) -- cgit v1.2.3 From 52f2321cba8486169779773dc13a213410fc853b Mon Sep 17 00:00:00 2001 From: athenian200 Date: Wed, 2 Oct 2019 01:16:38 -0500 Subject: MoonchildProductions#1251 - Part 10: ipc_channel_posix.cc should use IOV_MAX. https://bugzilla.mozilla.org/show_bug.cgi?id=1345102 I assess this change to be low-risk for the following reasons: 1. It has been in Firefox since version 55 without issues. 2. The current behavior is not POSIX compliant, and is retained in the one instance where the new functionality causes issues. 3. It makes safer assumptions about implementation details than what we have now. --- ipc/chromium/src/chrome/common/ipc_channel_posix.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc index 0d3a2b16c..9a8858656 100644 --- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc +++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc @@ -8,6 +8,7 @@ #include #include +#include #if defined(OS_MACOSX) #include #endif @@ -39,8 +40,16 @@ #include "mozilla/ipc/Faulty.h" #endif -// Work around possible OS limitations. +// Use OS specific iovec array limit where it's possible +#if defined(IOV_MAX) +static const size_t kMaxIOVecSize = IOV_MAX; +// IOV_MAX isn't defined on Android, but the hard-coded 256 works well. +#elif defined(ANDROID) static const size_t kMaxIOVecSize = 256; +// On all other platforms, fallback to 16 (_XOPEN_IOV_MAX) as a safe bet. +#else +static const size_t kMaxIOVecSize = 16; +#endif #ifdef MOZ_TASK_TRACER #include "GeckoTaskTracerImpl.h" -- cgit v1.2.3 From 575f51a27d6b3627ae5675cc8e920c8dcae073bd Mon Sep 17 00:00:00 2001 From: athenian200 Date: Fri, 4 Oct 2019 04:37:51 -0500 Subject: Fix a bunch of dumb typos and omissions. --- ipc/chromium/src/base/message_pump_glib.cc | 2 +- ipc/chromium/src/chrome/common/transport_dib.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/message_pump_glib.cc b/ipc/chromium/src/base/message_pump_glib.cc index a5e719c72..f92378f3b 100644 --- a/ipc/chromium/src/base/message_pump_glib.cc +++ b/ipc/chromium/src/base/message_pump_glib.cc @@ -138,7 +138,7 @@ MessagePumpForUI::MessagePumpForUI() int flags = fcntl(fds[0], F_GETFL,0); if (flags == -1) flags = 0; - fntl(fds[0], F_SETFL, flags | O_NDELAY); + fcntl(fds[0], F_SETFL, flags | O_NDELAY); #endif wakeup_pipe_read_ = fds[0]; wakeup_pipe_write_ = fds[1]; diff --git a/ipc/chromium/src/chrome/common/transport_dib.h b/ipc/chromium/src/chrome/common/transport_dib.h index e3c40768c..f40a97d17 100644 --- a/ipc/chromium/src/chrome/common/transport_dib.h +++ b/ipc/chromium/src/chrome/common/transport_dib.h @@ -15,7 +15,7 @@ #if defined(OS_WIN) #include -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_SOLARIS) #include "chrome/common/x11_util.h" #endif -- cgit v1.2.3 From 7d65eb2b3a345abe22f42361e00c97da2e968009 Mon Sep 17 00:00:00 2001 From: athenian200 Date: Mon, 7 Oct 2019 03:27:01 -0500 Subject: MoonchildProductions#1251 - Part 22: Remove some unused type declarations from IPC process_util. https://bugzilla.mozilla.org/show_bug.cgi?id=1397928 Was looking into that _POSIX_PATH_MAX/NAME_MAX issue earlier because it didn't make a lot of sense and I was thinking of other approaches besides char arrays, and I wanted to make sure it didn't cause problems after they did it. Turns out that one commit after this was added, Mozilla determined the code I was working on fixing to be dead code as of Firefox 58. I don't know if it's dead code in Pale Moon as well, but given that it compiles fine without it and I can't find any other references to szExeFile in the IPC code, that seems like a safe bet. Besides, I determined config/pathsub.c already seems to do what this code looks like it's trying to do, and implements the solution of just defining NAME_MAX to 256 and having done with it that I nearly adopted after realizing that even OS/2 and BeOS, let alone Unix/Linux systems, all basically use that value and there's just disagreement on which system header to check for it. --- ipc/chromium/src/base/process_util.h | 23 +---------------------- ipc/chromium/src/base/process_util_linux.cc | 5 ----- 2 files changed, 1 insertion(+), 27 deletions(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/process_util.h b/ipc/chromium/src/base/process_util.h index 9b1e4fed5..4bb125681 100644 --- a/ipc/chromium/src/base/process_util.h +++ b/ipc/chromium/src/base/process_util.h @@ -39,28 +39,7 @@ #include "base/command_line.h" #include "base/process.h" -#if defined(OS_WIN) -typedef PROCESSENTRY32 ProcessEntry; -typedef IO_COUNTERS IoCounters; -#elif defined(OS_POSIX) -// TODO(port): we should not rely on a Win32 structure. -// Using NAME_MAX here would raise POSIX compliance issues -// (see Mozilla bug 1364865). -struct ProcessEntry { - int pid; - int ppid; - char szExeFile[_POSIX_PATH_MAX + 1]; -}; - -struct IoCounters { - unsigned long long ReadOperationCount; - unsigned long long WriteOperationCount; - unsigned long long OtherOperationCount; - unsigned long long ReadTransferCount; - unsigned long long WriteTransferCount; - unsigned long long OtherTransferCount; -}; - +#if defined(OS_POSIX) #include "base/file_descriptor_shuffle.h" #endif diff --git a/ipc/chromium/src/base/process_util_linux.cc b/ipc/chromium/src/base/process_util_linux.cc index 57388ccb0..a0d5ae816 100644 --- a/ipc/chromium/src/base/process_util_linux.cc +++ b/ipc/chromium/src/base/process_util_linux.cc @@ -34,11 +34,6 @@ namespace { -enum ParsingState { - KEY_NAME, - KEY_VALUE -}; - static mozilla::EnvironmentLog gProcessLog("MOZ_PROCESS_LOG"); } // namespace -- cgit v1.2.3 From 2f4488521db663520c703a9a836d5549d679266c Mon Sep 17 00:00:00 2001 From: athenian200 Date: Thu, 10 Oct 2019 15:38:27 -0500 Subject: MoonchildProductions#1251 - Part 23: Allow AMD64 build to work. https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Compiling_32-bit_Firefox_on_a_Linux_64-bit_OS Setting this up turned out to be easier than I thought it would be. All I had to do was apply these instructions in reverse and add the following to my .mozconfig file: CC="gcc -m64" CXX="g++ -m64" AS="gas --64" ac_add_options --target=x86_64-pc-solaris2.11 export PKG_CONFIG_PATH=/usr/lib/amd64/pkgconfig ac_add_options --libdir=/usr/lib/amd64 ac_add_options --x-libraries=/usr/lib/amd64 Most of these changes were fairly trivial, just requiring me to make a few of the changes I made earlier conditional on a 32-bit build. The biggest challenge was figuring out why the JavaScript engine triggered a segfault everytime it tried to allocate memory. But this patch fixes it: https://github.com/OpenIndiana/oi-userland/blob/oi/hipster/components/web/firefox/patches/patch-js_src_gc_Memory.cpp.patch Turns out that Solaris on AMD64 handles memory management in a fairly unusual way with a segmented memory model, but it's not that different from what we see on other 64-bit processors. In fact, I saw a SPARC crash for a similar reason, and noticed that it looked just like mine except the numbers in the first segment were reversed. Having played around with hex editors before, I had a feeling I might be dealing with a little-endian version of a big-endian problem, but I didn't expect that knowledge to actually yield an easy solution. https://bugzilla.mozilla.org/show_bug.cgi?id=577056 https://www.oracle.com/technetwork/server-storage/solaris10/solaris-memory-135224.html As far as I can tell, this was the last barrier to an AMD64 Solaris build of Pale Moon. --- ipc/chromium/src/base/message_pump_libevent.cc | 2 +- ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/message_pump_libevent.cc b/ipc/chromium/src/base/message_pump_libevent.cc index daba7c2fe..20d529707 100644 --- a/ipc/chromium/src/base/message_pump_libevent.cc +++ b/ipc/chromium/src/base/message_pump_libevent.cc @@ -24,7 +24,7 @@ #include "mozilla/UniquePtr.h" // This macro checks that the _EVENT_SIZEOF_* constants defined in -// ipc/chromiume/src/third_party//event2/event-config.h are correct. +// ipc/chromium/src/third_party//event2/event-config.h are correct. #if defined(_EVENT_SIZEOF_SHORT) #define CHECK_EVENT_SIZEOF(TYPE, type) \ static_assert(_EVENT_SIZEOF_##TYPE == sizeof(type), \ diff --git a/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h b/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h index 73000106b..cc4fb1eb1 100644 --- a/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h +++ b/ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h @@ -417,11 +417,7 @@ #define _EVENT_SIZEOF_LONG_LONG 8 /* The size of `pthread_t', as computed by sizeof. */ -#ifdef __LP64__ -#define _EVENT_SIZEOF_PTHREAD_T 8 -#else #define _EVENT_SIZEOF_PTHREAD_T 4 -#endif /* The size of `short', as computed by sizeof. */ #define _EVENT_SIZEOF_SHORT 2 -- cgit v1.2.3 From 687a798e6dedacb8b42826debcd8e89baa69ce94 Mon Sep 17 00:00:00 2001 From: athenian200 Date: Sat, 19 Oct 2019 14:24:49 -0500 Subject: MoonchildProductions#1251 - Part 27: Fix ifdef style. This should do it for all the commits to files I changed, but while I'm in here I could probably go ahead and turn ALL the singular if defined statements into ifdef statements by using grep/find on the tree. On the other hand, perhaps we should do that as a separate issue so that this doesn't become a case of scope creep. --- ipc/chromium/src/base/message_pump_glib.cc | 6 +++--- ipc/chromium/src/base/message_pump_libevent.cc | 2 +- ipc/chromium/src/base/sys_info_posix.cc | 4 ++-- ipc/chromium/src/base/time.h | 8 ++++---- ipc/chromium/src/base/time_posix.cc | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/message_pump_glib.cc b/ipc/chromium/src/base/message_pump_glib.cc index f92378f3b..24081bd8b 100644 --- a/ipc/chromium/src/base/message_pump_glib.cc +++ b/ipc/chromium/src/base/message_pump_glib.cc @@ -9,7 +9,7 @@ #include #include -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS #include #endif #include @@ -134,7 +134,7 @@ MessagePumpForUI::MessagePumpForUI() // Create our wakeup pipe, which is used to flag when work was scheduled. int fds[2]; CHECK(pipe(fds) == 0); -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS int flags = fcntl(fds[0], F_GETFL,0); if (flags == -1) flags = 0; @@ -324,7 +324,7 @@ void MessagePumpForUI::ScheduleWork() { // variables as we would then need locks all over. This ensures that if // we are sleeping in a poll that we will wake up. char msg = '!'; -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS char buf[32]; while (HANDLE_EINTR(read(wakeup_pipe_read_, &buf, 32))); #endif diff --git a/ipc/chromium/src/base/message_pump_libevent.cc b/ipc/chromium/src/base/message_pump_libevent.cc index 20d529707..51d3205b8 100644 --- a/ipc/chromium/src/base/message_pump_libevent.cc +++ b/ipc/chromium/src/base/message_pump_libevent.cc @@ -8,7 +8,7 @@ #include #include -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS #include #endif #if defined(ANDROID) || defined(OS_POSIX) diff --git a/ipc/chromium/src/base/sys_info_posix.cc b/ipc/chromium/src/base/sys_info_posix.cc index 6adbb1c06..f29c85092 100644 --- a/ipc/chromium/src/base/sys_info_posix.cc +++ b/ipc/chromium/src/base/sys_info_posix.cc @@ -121,7 +121,7 @@ std::wstring SysInfo::GetEnvVar(const wchar_t* var) { // static std::string SysInfo::OperatingSystemName() { -#if !defined(XP_SOLARIS) +#ifndef XP_SOLARIS) utsname info; #else struct utsname info; @@ -139,7 +139,7 @@ std::string SysInfo::OperatingSystemName() { // static std::string SysInfo::CPUArchitecture() { -#if !defined(XP_SOLARIS) +#ifndef XP_SOLARIS utsname info; #else struct utsname info; diff --git a/ipc/chromium/src/base/time.h b/ipc/chromium/src/base/time.h index 6a5c92d14..cee463579 100644 --- a/ipc/chromium/src/base/time.h +++ b/ipc/chromium/src/base/time.h @@ -28,7 +28,7 @@ #include "base/basictypes.h" -#if defined(OS_WIN) +#ifdef OS_WIN // For FILETIME in FromFileTime, until it moves to a new converter class. // See TODO(iyengar) below. #include @@ -64,7 +64,7 @@ class TimeDelta { return delta_; } -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS struct timespec ToTimeSpec() const; #endif @@ -230,11 +230,11 @@ class Time { static Time FromDoubleT(double dt); double ToDoubleT() const; -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS struct timeval ToTimeVal() const; #endif -#if defined(OS_WIN) +#ifdef OS_WIN static Time FromFileTime(FILETIME ft); FILETIME ToFileTime() const; #endif diff --git a/ipc/chromium/src/base/time_posix.cc b/ipc/chromium/src/base/time_posix.cc index 419cc8afb..5e0a922d9 100644 --- a/ipc/chromium/src/base/time_posix.cc +++ b/ipc/chromium/src/base/time_posix.cc @@ -202,7 +202,7 @@ TimeTicks TimeTicks::HighResNow() { return Now(); } -#if defined(OS_SOLARIS) +#ifdef OS_SOLARIS struct timespec TimeDelta::ToTimeSpec() const { int64_t microseconds = InMicroseconds(); time_t seconds = 0; -- cgit v1.2.3 From a9dc528a4a7b0aaad5308aff70963485ec3e9bec Mon Sep 17 00:00:00 2001 From: athenian200 Date: Thu, 31 Oct 2019 19:35:03 -0500 Subject: Fix nits. I hope this addresses everything. --- ipc/chromium/src/base/sys_info_posix.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ipc/chromium/src') diff --git a/ipc/chromium/src/base/sys_info_posix.cc b/ipc/chromium/src/base/sys_info_posix.cc index f29c85092..632aa2f37 100644 --- a/ipc/chromium/src/base/sys_info_posix.cc +++ b/ipc/chromium/src/base/sys_info_posix.cc @@ -134,7 +134,7 @@ std::string SysInfo::OperatingSystemName() { } // Solaris contains "extern struct utsname utsname;" -// As a consequence, any use of utsname has to be proceeded with struct on +// As a consequence, any use of utsname has to be preceded with struct on // Solaris. See Mozilla bugs 758483 and 1353332. // static -- cgit v1.2.3