--- a/mozilla-bmo1463035.patch Sun Mar 17 10:00:10 2019 +0100
+++ b/mozilla-bmo1463035.patch Tue Nov 19 22:54:22 2019 +0100
@@ -3,7 +3,7 @@
# User Mike Hommey <mh+mozilla@glandium.org>
# Date 1526871862 -32400
# Node ID 94f21505ff13cd089f7129cd24927cf8b31a0f43
-# Parent 25ab6bab437517a8a182f1ab77898ae13b26a696
+# Parent 5dc1d2186f44dd6ccfc4b28b9e1ed859cffc63bb
Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r?darchons
For some reason, GNU as is not happy with the assembly generated after
@@ -12,53 +12,10 @@
OTOH, as mentioned in bug 1238661 comment 4, we actually don't need this
workaround anymore, so let's just kill it.
-diff --git a/mfbt/LinuxSignal.h b/mfbt/LinuxSignal.h
-deleted file mode 100644
---- a/mfbt/LinuxSignal.h
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* This Source Code Form is subject to the terms of the Mozilla Public
-- * License, v. 2.0. If a copy of the MPL was not distributed with this
-- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
--#ifndef mozilla_LinuxSignal_h
--#define mozilla_LinuxSignal_h
--
--namespace mozilla {
--
--#if defined(__arm__)
--
--// Some (old) Linux kernels on ARM have a bug where a signal handler
--// can be called without clearing the IT bits in CPSR first. The result
--// is that the first few instructions of the handler could be skipped,
--// ultimately resulting in crashes. To workaround this bug, the handler
--// on ARM is a trampoline that starts with enough NOP instructions, so
--// that even if the IT bits are not cleared, only the NOP instructions
--// will be skipped over.
--
--template <void (*H)(int, siginfo_t*, void*)>
--__attribute__((naked)) void SignalTrampoline(int aSignal, siginfo_t* aInfo,
-- void* aContext) {
-- asm volatile("nop; nop; nop; nop" : : : "memory");
--
-- asm volatile("b %0" : : "X"(H) : "memory");
--}
--
--#define MOZ_SIGNAL_TRAMPOLINE(h) (mozilla::SignalTrampoline<h>)
--
--#else // __arm__
--
--#define MOZ_SIGNAL_TRAMPOLINE(h) (h)
--
--#endif // __arm__
--
--} // namespace mozilla
--
--#endif // mozilla_LinuxSignal_h
diff --git a/mfbt/moz.build b/mfbt/moz.build
--- a/mfbt/moz.build
+++ b/mfbt/moz.build
-@@ -124,20 +124,16 @@ EXPORTS["double-conversion"] = [
+@@ -122,20 +122,16 @@ EXPORTS["double-conversion"] = [
LOCAL_INCLUDES += [
'/mfbt/double-conversion',
]
@@ -79,14 +36,14 @@
'double-conversion/double-conversion/bignum.cc',
'double-conversion/double-conversion/cached-powers.cc',
'double-conversion/double-conversion/diy-fp.cc',
-diff --git a/tools/profiler/core/platform-linux-android.cpp b/tools/profiler/core/platform-linux-android.cpp
---- a/tools/profiler/core/platform-linux-android.cpp
-+++ b/tools/profiler/core/platform-linux-android.cpp
+diff --git a/mozglue/baseprofiler/core/platform-linux-android.cpp b/mozglue/baseprofiler/core/platform-linux-android.cpp
+--- a/mozglue/baseprofiler/core/platform-linux-android.cpp
++++ b/mozglue/baseprofiler/core/platform-linux-android.cpp
@@ -55,17 +55,16 @@
#ifdef __GLIBC__
- #include <execinfo.h> // backtrace, backtrace_symbols
- #endif // def __GLIBC__
- #include <strings.h> // index
+ # include <execinfo.h> // backtrace, backtrace_symbols
+ #endif // def __GLIBC__
+ #include <strings.h> // index
#include <errno.h>
#include <stdarg.h>
@@ -100,7 +57,7 @@
using namespace mozilla;
-@@ -248,17 +247,17 @@ Sampler::Sampler(PSLockRef aLock)
+@@ -266,17 +265,17 @@ Sampler::Sampler(PSLockRef aLock)
// NOTE: We don't initialize LUL here, instead initializing it in
// SamplerThread's constructor. This is because with the
@@ -119,3 +76,43 @@
}
void Sampler::Disable(PSLockRef aLock) {
+diff --git a/tools/profiler/core/platform-linux-android.cpp b/tools/profiler/core/platform-linux-android.cpp
+--- a/tools/profiler/core/platform-linux-android.cpp
++++ b/tools/profiler/core/platform-linux-android.cpp
+@@ -55,17 +55,16 @@
+ #ifdef __GLIBC__
+ # include <execinfo.h> // backtrace, backtrace_symbols
+ #endif // def __GLIBC__
+ #include <strings.h> // index
+ #include <errno.h>
+ #include <stdarg.h>
+
+ #include "prenv.h"
+-#include "mozilla/LinuxSignal.h"
+ #include "mozilla/PodOperations.h"
+ #include "mozilla/DebugOnly.h"
+
+ #include <string.h>
+ #include <list>
+
+ using namespace mozilla;
+
+@@ -257,17 +256,17 @@ Sampler::Sampler(PSLockRef aLock)
+
+ // NOTE: We don't initialize LUL here, instead initializing it in
+ // SamplerThread's constructor. This is because with the
+ // profiler_suspend_and_sample_thread entry point, we want to be able to
+ // sample without waiting for LUL to be initialized.
+
+ // Request profiling signals.
+ struct sigaction sa;
+- sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
++ sa.sa_sigaction = SigprofHandler;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
+ MOZ_CRASH("Error installing SIGPROF handler in the profiler");
+ }
+ }
+
+ void Sampler::Disable(PSLockRef aLock) {