/** @brief Represents an action type, identifying one of several types of
* ModelAction */
typedef enum action_type {
- THREAD_CREATE, // < A thread creation action
- THREAD_START, // < First action in each thread
- THREAD_YIELD, // < A thread yield action
- THREAD_JOIN, // < A thread join action
- THREAD_FINISH, // < A thread completion action
- PTHREAD_CREATE, // < A pthread creation action
- PTHREAD_JOIN, // < A pthread join action
- ATOMIC_UNINIT, // < Represents an uninitialized atomic
- ATOMIC_READ, // < An atomic read action
- ATOMIC_WRITE, // < An atomic write action
- ATOMIC_RMWR, // < The read part of an atomic RMW action
- ATOMIC_RMWRCAS, // < The read part of an atomic RMW action
- ATOMIC_RMW, // < The write part of an atomic RMW action
- ATOMIC_RMWC, // < Convert an atomic RMW action into a READ
- ATOMIC_INIT, // < Initialization of an atomic object (e.g., atomic_init())
- ATOMIC_FENCE, // < A fence action
- ATOMIC_LOCK, // < A lock action
- ATOMIC_TRYLOCK, // < A trylock action
- ATOMIC_UNLOCK, // < An unlock action
- ATOMIC_NOTIFY_ONE, // < A notify_one action
- ATOMIC_NOTIFY_ALL, // < A notify all action
- ATOMIC_WAIT, // < A wait action
- ATOMIC_ANNOTATION, // < An annotation action to pass information to a trace analysis
- NOOP
+ THREAD_CREATE, // < A thread creation action
+ THREAD_START, // < First action in each thread
+ THREAD_YIELD, // < A thread yield action
+ THREAD_JOIN, // < A thread join action
+ THREAD_FINISH, // < A thread completion action
+ PTHREAD_CREATE, // < A pthread creation action
+ PTHREAD_JOIN, // < A pthread join action
+ ATOMIC_UNINIT, // < Represents an uninitialized atomic
+ ATOMIC_READ, // < An atomic read action
+ ATOMIC_WRITE, // < An atomic write action
+ ATOMIC_RMWR, // < The read part of an atomic RMW action
+ ATOMIC_RMWRCAS, // < The read part of an atomic RMW action
+ ATOMIC_RMW, // < The write part of an atomic RMW action
+ ATOMIC_RMWC, // < Convert an atomic RMW action into a READ
+ ATOMIC_INIT, // < Initialization of an atomic object (e.g., atomic_init())
+ ATOMIC_FENCE, // < A fence action
+ ATOMIC_LOCK, // < A lock action
+ ATOMIC_TRYLOCK, // < A trylock action
+ ATOMIC_UNLOCK, // < An unlock action
+ ATOMIC_NOTIFY_ONE, // < A notify_one action
+ ATOMIC_NOTIFY_ALL, // < A notify all action
+ ATOMIC_WAIT, // < A wait action
+ ATOMIC_ANNOTATION, // < An annotation action to pass information to a trace analysis
+ NOOP // no operation, which returns control to scheduler
} action_type_t;
public:
ModelAction(action_type_t type, memory_order order, void *loc, uint64_t value = VALUE_NONE, Thread *thread = NULL);
ModelAction(action_type_t type, memory_order order, void *loc, uint64_t value, int size);
+ ModelAction(action_type_t type, const char * position, memory_order order, void *loc, uint64_t value = VALUE_NONE, Thread *thread = NULL);
~ModelAction();
void print() const;
memory_order get_original_mo() const { return original_order; }
void set_mo(memory_order order) { this->order = order; }
void * get_location() const { return location; }
+ const char * get_position() const { return position; }
modelclock_t get_seq_number() const { return seq_number; }
uint64_t get_value() const { return value; }
uint64_t get_reads_from_value() const;
/** @brief A pointer to the memory location for this action. */
void *location;
+ /** @brief A pointer to the source line for this atomic action. */
+ const char * position;
+
union {
/**
* @brief The store that this action reads from
modelclock_t seq_number;
};
-#endif/* __ACTION_H__ */
+#endif /* __ACTION_H__ */