From 4cadf04ee01fa92cd003709f90a4256bc655fc29 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Mon, 21 May 2018 12:04:22 +0900 Subject: [PATCH] Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r?darchons For some reason, GNU as is not happy with the assembly generated after bug 1238661 anymore on Debian armel. OTOH, as mentioned in bug 1238661 comment 4, we actually don't need this workaround anymore, so let's just kill it. Gbp-Pq: Topic porting-armel Gbp-Pq: Name Bug-1463035-Remove-MOZ_SIGNAL_TRAMPOLINE.-r-darchons.patch --- mfbt/LinuxSignal.h | 38 ------------------- mfbt/moz.build | 4 -- .../core/platform-linux-android.cpp | 3 +- .../profiler/core/platform-linux-android.cpp | 3 +- 4 files changed, 2 insertions(+), 46 deletions(-) delete mode 100644 mfbt/LinuxSignal.h diff --git a/mfbt/LinuxSignal.h b/mfbt/LinuxSignal.h deleted file mode 100644 index cdebb77084..0000000000 --- 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__) && defined(__ANDROID__) - -// 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 index bd0885a36d..78a526850d 100644 --- a/mfbt/moz.build +++ b/mfbt/moz.build @@ -137,10 +137,6 @@ if CONFIG['OS_ARCH'] == 'WINNT': EXPORTS.mozilla += [ 'WindowsVersion.h', ] -elif CONFIG['OS_ARCH'] == 'Linux' or CONFIG['OS_ARCH'] == 'FreeBSD': - EXPORTS.mozilla += [ - 'LinuxSignal.h', - ] if CONFIG['MOZ_TSAN']: EXPORTS.mozilla += [ diff --git a/mozglue/baseprofiler/core/platform-linux-android.cpp b/mozglue/baseprofiler/core/platform-linux-android.cpp index 8e69569be1..1dfd64b248 100644 --- a/mozglue/baseprofiler/core/platform-linux-android.cpp +++ b/mozglue/baseprofiler/core/platform-linux-android.cpp @@ -63,7 +63,6 @@ #include #include "prenv.h" -#include "mozilla/LinuxSignal.h" #include "mozilla/PodOperations.h" #include "mozilla/DebugOnly.h" @@ -294,7 +293,7 @@ Sampler::Sampler(PSLockRef aLock) // 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) { diff --git a/tools/profiler/core/platform-linux-android.cpp b/tools/profiler/core/platform-linux-android.cpp index 296d3ed01b..ea401b799a 100644 --- a/tools/profiler/core/platform-linux-android.cpp +++ b/tools/profiler/core/platform-linux-android.cpp @@ -63,7 +63,6 @@ #include #include "prenv.h" -#include "mozilla/LinuxSignal.h" #include "mozilla/PodOperations.h" #include "mozilla/DebugOnly.h" #if defined(GP_OS_linux) || defined(GP_OS_android) @@ -288,7 +287,7 @@ Sampler::Sampler(PSLockRef aLock) // 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) { -- 2.30.2