summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/sanitizer_common.h
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2017-09-14 02:48:41 +0000
committerVitaly Buka <vitalybuka@google.com>2017-09-14 02:48:41 +0000
commita2a96a61a024d0d7f71c3b4b86ce9bd8c50b78cd (patch)
treef2ef04358fb6d264a0a1fd90dad845be69784cb7 /lib/sanitizer_common/sanitizer_common.h
parent2984766b09a658f5fddc5dc4d24554b12f176fa0 (diff)
[compiler-rt] Cleanup SignalContext initialization
Reviewers: eugenis, alekseyshl Subscribers: kubamracek, dberris Differential Revision: https://reviews.llvm.org/D37827 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@313223 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_common.h')
-rw-r--r--lib/sanitizer_common/sanitizer_common.h32
1 files changed, 15 insertions, 17 deletions
diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h
index 6cd21d79a..51c1f3575 100644
--- a/lib/sanitizer_common/sanitizer_common.h
+++ b/lib/sanitizer_common/sanitizer_common.h
@@ -801,41 +801,39 @@ struct SignalContext {
uptr sp;
uptr bp;
bool is_memory_access;
-
enum WriteFlag { UNKNOWN, READ, WRITE } write_flag;
// VS2013 doesn't implement unrestricted unions, so we need a trivial default
// constructor
SignalContext() = default;
+
+ // Creates signal context in a platform-specific manner.
// SignalContext is going to keep pointers to siginfo and context without
// owning them.
- SignalContext(void *siginfo, void *context, uptr addr, uptr pc, uptr sp,
- uptr bp, bool is_memory_access, WriteFlag write_flag)
+ SignalContext(void *siginfo, void *context)
: siginfo(siginfo),
context(context),
- addr(addr),
- pc(pc),
- sp(sp),
- bp(bp),
- is_memory_access(is_memory_access),
- write_flag(write_flag) {}
+ addr(GetAddress()),
+ is_memory_access(IsMemoryAccess()),
+ write_flag(GetWriteFlag()) {
+ InitPcSpBp();
+ }
static void DumpAllRegisters(void *context);
- // Creates signal context in a platform-specific manner.
- static SignalContext Create(void *siginfo, void *context);
-
- // Returns true if the "context" indicates a memory write.
- static WriteFlag GetWriteFlag(void *context);
-
// Type of signal e.g. SIGSEGV or EXCEPTION_ACCESS_VIOLATION.
int GetType() const;
// String description of the signal.
const char *Describe() const;
-};
-void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp);
+ private:
+ // Platform specific initialization.
+ void InitPcSpBp();
+ uptr GetAddress() const;
+ WriteFlag GetWriteFlag() const;
+ bool IsMemoryAccess() const;
+};
void MaybeReexec();