ATLAS Offline Software
Loading...
Searching...
No Matches
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
22
23#include <signal.h> /* siginfo_t */
24#include <vector>
25
27
29public:
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
48private:
53};
54#endif
void unused(Args &&...)
FIXME Access to the underlying protect/restore page access.
void handle(int signal_number, siginfo_t *sigi, void *unused)
the actual signal handler
std::vector< void * > accessed_t
the list of accessed pointers
const accessed_t & accessedPtrs() const
PtrAccessSEGVHandler(PageAccessControl &pac, size_t reservedSize=65535)
PageAccessControl & m_pac
used to restore protection of the page which segfaulted
const_iterator endAccessedPtrs() const
accessed_t::const_iterator const_iterator
accessed_t m_accessed
the addresses accessed since last reset
const_iterator beginAccessedPtrs() const