diff -r 84cdfb476431 -r 8e9195853a32 mozilla-bmo1463035.patch --- 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 # 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 --__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) -- --#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 // backtrace, backtrace_symbols - #endif // def __GLIBC__ - #include // index + # include // backtrace, backtrace_symbols + #endif // def __GLIBC__ + #include // index #include #include @@ -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 // backtrace, backtrace_symbols + #endif // def __GLIBC__ + #include // index + #include + #include + + #include "prenv.h" +-#include "mozilla/LinuxSignal.h" + #include "mozilla/PodOperations.h" + #include "mozilla/DebugOnly.h" + + #include + #include + + 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) {