From 0573d6c7f326a08eeff6e595fd77045a0210c32a Mon Sep 17 00:00:00 2001 From: Derek Bruening Date: Tue, 31 May 2016 13:21:03 +0000 Subject: [esan] Intercept and chain signal handlers Summary: In preparation for fault-based shadow memory iteration, we add support for our own signal handler by adding app signal handler interception as well as chaining for SIGSEGV. This is done in a simple manner: we do not honor the app's alternate stack nor any sigaction flags for SIGSEGV. Adds a new test of transparency in app signal handling. Reviewers: aizatsky Subscribers: filcab, kubabrecka, vitalybuka, zhaoqin, kcc, eugenis, llvm-commits Differential Revision: http://reviews.llvm.org/D20577 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@271272 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/esan/esan.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib/esan/esan.cpp') diff --git a/lib/esan/esan.cpp b/lib/esan/esan.cpp index 2711e4b97..c9629d65c 100644 --- a/lib/esan/esan.cpp +++ b/lib/esan/esan.cpp @@ -73,6 +73,18 @@ void processRangeAccess(uptr PC, uptr Addr, int Size, bool IsWrite) { } } +bool processSignal(int SigNum, void (*Handler)(int), void (**Result)(int)) { + if (WhichTool == ESAN_WorkingSet) + return processWorkingSetSignal(SigNum, Handler, Result); + return true; +} + +bool processSigaction(int SigNum, const void *Act, void *OldAct) { + if (WhichTool == ESAN_WorkingSet) + return processWorkingSetSigaction(SigNum, Act, OldAct); + return true; +} + #if SANITIZER_DEBUG static bool verifyShadowScheme() { // Sanity checks for our shadow mapping scheme. -- cgit v1.2.3