[esan] Fix compilation of signal handlers
authorVitaly Buka <vitalybuka@google.com>
Fri, 10 Nov 2017 05:41:13 +0000 (05:41 +0000)
committerVitaly Buka <vitalybuka@google.com>
Fri, 10 Nov 2017 05:41:13 +0000 (05:41 +0000)
llvm-svn: 317874

compiler-rt/lib/esan/esan_sideline.h
compiler-rt/lib/esan/esan_sideline_linux.cpp
compiler-rt/lib/esan/working_set_posix.cpp

index aa3fae1..04aff22 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "sanitizer_common/sanitizer_atomic.h"
 #include "sanitizer_common/sanitizer_internal_defs.h"
+#include "sanitizer_common/sanitizer_platform_limits_posix.h"
 
 namespace __esan {
 
@@ -46,7 +47,8 @@ public:
 private:
   static int runSideline(void *Arg);
   static void registerSignal(int SigNum);
-  static void handleSidelineSignal(int SigNum, void *SigInfo, void *Ctx);
+  static void handleSidelineSignal(int SigNum, __sanitizer_siginfo *SigInfo,
+                                   void *Ctx);
 
   char *Stack;
   SidelineFunc sampleFunc;
index bc272df..4a96910 100644 (file)
@@ -40,7 +40,8 @@ static const uptr SidelineIdUninitialized = 1;
 static SidelineThread *TheThread;
 
 // We aren't passing SA_NODEFER so the same signal is blocked while here.
-void SidelineThread::handleSidelineSignal(int SigNum, void *SigInfo,
+void SidelineThread::handleSidelineSignal(int SigNum,
+                                          __sanitizer_siginfo *SigInfo,
                                           void *Ctx) {
   VPrintf(3, "Sideline signal %d\n", SigNum);
   CHECK_EQ(SigNum, SIGALRM);
index fcfa871..5ec53b9 100644 (file)
@@ -34,7 +34,7 @@ bool processWorkingSetSignal(int SigNum, void (*Handler)(int),
   VPrintf(2, "%s: %d\n", __FUNCTION__, SigNum);
   if (SigNum == SIGSEGV) {
     *Result = AppSigAct.handler;
-    AppSigAct.sigaction = (void (*)(int, void*, void*))Handler;
+    AppSigAct.sigaction = (decltype(AppSigAct.sigaction))Handler;
     return false; // Skip real call.
   }
   return true;
@@ -73,7 +73,7 @@ bool processWorkingSetSigprocmask(int How, void *Set, void *OldSet) {
 static void reinstateDefaultHandler(int SigNum) {
   __sanitizer_sigaction SigAct;
   internal_memset(&SigAct, 0, sizeof(SigAct));
-  SigAct.sigaction = (void (*)(int, void*, void*)) SIG_DFL;
+  SigAct.sigaction = (decltype(SigAct.sigaction))SIG_DFL;
   int Res = internal_sigaction(SigNum, &SigAct, nullptr);
   CHECK(Res == 0);
   VPrintf(1, "Unregistered for %d handler\n", SigNum);
@@ -81,7 +81,8 @@ static void reinstateDefaultHandler(int SigNum) {
 
 // If this is a shadow fault, we handle it here; otherwise, we pass it to the
 // app to handle it just as the app would do without our tool in place.
-static void handleMemoryFault(int SigNum, void *Info, void *Ctx) {
+static void handleMemoryFault(int SigNum, __sanitizer_siginfo *Info,
+                              void *Ctx) {
   if (SigNum == SIGSEGV) {
     // We rely on si_addr being filled in (thus we do not support old kernels).
     siginfo_t *SigInfo = (siginfo_t *)Info;