ATLAS Offline Software
PtrAccessSEGVHandler.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 
3 /*
4  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 #ifndef CXXUTILS_PTRACCESSSEGVHANDLER_H
8 #define CXXUTILS_PTRACCESSSEGVHANDLER_H 1
9 
23 #include <signal.h> /* siginfo_t */
24 #include <vector>
25 
26 class PageAccessControl;
27 
29 public:
31  typedef std::vector<void*> accessed_t;
32  typedef accessed_t::const_iterator const_iterator;
33  const accessed_t& accessedPtrs() const { return m_accessed; }
34  const_iterator beginAccessedPtrs() const { return m_accessed.begin(); }
35  const_iterator endAccessedPtrs() const { return m_accessed.end(); }
36  void reset() { m_accessed.clear(); }
37 
38  PtrAccessSEGVHandler(PageAccessControl& pac, size_t reservedSize=65535) :
39  m_pac(pac)
40  {
41  //we must reserve enough elements, or we risk vector allocating in a protected page during handle()...
42  m_accessed.reserve(reservedSize);
43  }
44 
46  void handle(int signal_number,siginfo_t *sigi,void *unused);
47 
48 private:
53 };
54 #endif
PtrAccessSEGVHandler::const_iterator
accessed_t::const_iterator const_iterator
Definition: PtrAccessSEGVHandler.h:32
siginfo_t
Definition: SealSignal.h:77
PageAccessControl
Definition: PageAccessControl.h:27
PtrAccessSEGVHandler
Definition: PtrAccessSEGVHandler.h:28
PtrAccessSEGVHandler::PtrAccessSEGVHandler
PtrAccessSEGVHandler(PageAccessControl &pac, size_t reservedSize=65535)
Definition: PtrAccessSEGVHandler.h:38
PtrAccessSEGVHandler::endAccessedPtrs
const_iterator endAccessedPtrs() const
Definition: PtrAccessSEGVHandler.h:35
PtrAccessSEGVHandler::m_pac
PageAccessControl & m_pac
used to restore protection of the page which segfaulted
Definition: PtrAccessSEGVHandler.h:50
PtrAccessSEGVHandler::handle
void handle(int signal_number, siginfo_t *sigi, void *unused)
the actual signal handler
Definition: PtrAccessSEGVHandler.cxx:13
PtrAccessSEGVHandler::accessedPtrs
const accessed_t & accessedPtrs() const
Definition: PtrAccessSEGVHandler.h:33
PtrAccessSEGVHandler::beginAccessedPtrs
const_iterator beginAccessedPtrs() const
Definition: PtrAccessSEGVHandler.h:34
unused
void unused(Args &&...)
Definition: VP1ExpertSettings.cxx:39
PtrAccessSEGVHandler::accessed_t
std::vector< void * > accessed_t
the list of accessed pointers
Definition: PtrAccessSEGVHandler.h:31
PtrAccessSEGVHandler::reset
void reset()
Definition: PtrAccessSEGVHandler.h:36
PtrAccessSEGVHandler::m_accessed
accessed_t m_accessed
the addresses accessed since last reset
Definition: PtrAccessSEGVHandler.h:52