diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-09-14 02:48:41 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-09-14 02:48:41 +0000 |
commit | a2a96a61a024d0d7f71c3b4b86ce9bd8c50b78cd (patch) | |
tree | f2ef04358fb6d264a0a1fd90dad845be69784cb7 /lib/sanitizer_common/sanitizer_common.h | |
parent | 2984766b09a658f5fddc5dc4d24554b12f176fa0 (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.h | 32 |
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(); |