You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB

/*
* Copyright 2002-2019 Intel Corporation.
*
* This software is provided to you as Sample Source Code as defined in the accompanying
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
* section 1.L.
*
* This software and the related documents are provided as is, with no express or implied
* warranties, other than those that are expressly stated in the License.
*/
#ifndef _INIT_ALARM_H_
#define _INIT_ALARM_H_
#include "pin.H"
#include <set>
namespace CONTROLLER{
class CONTROL_MANAGER;
class INIT_ALARM{
public:
INIT_ALARM() : _manager(NULL), _disabled(FALSE) {}
VOID Activate(CONTROL_MANAGER* manager);
VOID Disable() {_disabled = TRUE;}
private:
CONTROL_MANAGER* _manager;
ADDRINT _start_thread[PIN_MAX_THREADS];
std::set<ADDRINT> _thread_first_ip;
volatile BOOL _disabled;
static VOID OnTrace(TRACE trace, VOID *vthis);
static VOID ThreadStart(THREADID tid, CONTEXT *ctxt, INT32 flags, VOID *v);
static inline ADDRINT ShouldStart(INIT_ALARM* init_alarm, THREADID tid){
return init_alarm->_start_thread[tid] & !init_alarm->_disabled;
}
static VOID Start(CONTEXT *ctxt, ADDRINT ip, THREADID tid, VOID *vthis);
};
} //namespace
#endif