X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=action.h;h=fead25e649a3dfcb575e9d5aae353b4363e92d8c;hp=ad34c830f4b61d0b2a214199c5d208aa5abddca2;hb=a7df00de36ef87549b654cfbc5c6b098cbba7a5b;hpb=b5d7d602016a4640c31b79ba9598dceefa778ab6 diff --git a/action.h b/action.h index ad34c830..fead25e6 100644 --- a/action.h +++ b/action.h @@ -11,18 +11,19 @@ #include "mymemory.h" #include "memoryorder.h" #include "modeltypes.h" +#include "pthread.h" /* Forward declarations */ class ClockVector; class Thread; -class Promise; -namespace std { +namespace cdsc { class mutex; } using std::memory_order; using std::memory_order_relaxed; +using std::memory_order_consume; using std::memory_order_acquire; using std::memory_order_release; using std::memory_order_acq_rel; @@ -49,13 +50,14 @@ using std::memory_order_seq_cst; /** @brief Represents an action type, identifying one of several types of * ModelAction */ typedef enum action_type { - MODEL_FIXUP_RELSEQ, /**< Special ModelAction: finalize a release - * sequence */ 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 */ @@ -70,7 +72,10 @@ typedef enum action_type { 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_WAIT, /**< A wait action */ + ATOMIC_ANNOTATION, /**< An annotation action to pass information + to a trace analysis */ + NOOP } action_type_t; /* Forward declaration */ @@ -94,6 +99,8 @@ public: thread_id_t get_tid() const { return tid; } action_type get_type() const { return type; } memory_order get_mo() const { return order; } + memory_order get_original_mo() const { return original_order; } + void set_mo(memory_order order) { this->order = order; } void * get_location() const { return location; } modelclock_t get_seq_number() const { return seq_number; } uint64_t get_value() const { return value; } @@ -101,14 +108,12 @@ public: uint64_t get_write_value() const; uint64_t get_return_value() const; const ModelAction * get_reads_from() const { return reads_from; } - Promise * get_reads_from_promise() const { return reads_from_promise; } - std::mutex * get_mutex() const; + cdsc::mutex * get_mutex() const; Node * get_node() const; void set_node(Node *n) { node = n; } void set_read_from(const ModelAction *act); - void set_read_from_promise(Promise *promise); /** Store the most recent fence-release from the same thread * @param fence The fence-release that occured prior to this */ @@ -121,7 +126,6 @@ public: void set_try_lock(bool obtainedlock); bool is_thread_start() const; bool is_thread_join() const; - bool is_relseq_fixup() const; bool is_mutex_op() const; bool is_lock() const; bool is_trylock() const; @@ -142,6 +146,7 @@ public: bool is_rmw() const; bool is_fence() const; bool is_initialization() const; + bool is_annotation() const; bool is_relaxed() const; bool is_acquire() const; bool is_release() const; @@ -170,24 +175,31 @@ public: void process_rmw(ModelAction * act); void copy_typeandorder(ModelAction * act); - void set_sleep_flag() { sleep_flag=true; } - bool get_sleep_flag() { return sleep_flag; } unsigned int hash() const; bool equals(const ModelAction *x) const { return this == x; } - bool equals(const Promise *x) const { return false; } - bool may_read_from(const ModelAction *write) const; - bool may_read_from(const Promise *promise) const; MEMALLOC + + void set_value(uint64_t val) { value = val; } + + /* to accomodate pthread create and join */ + Thread * thread_operand; + void set_thread_operand(Thread *th) { thread_operand = th; } private: + const char * get_type_str() const; + const char * get_mo_str() const; + /** @brief Type of action (read, write, RMW, fence, thread create, etc.) */ action_type type; /** @brief The memory order for this operation. */ memory_order order; + /** @brief The original memory order parameter for this operation. */ + memory_order original_order; + /** @brief A pointer to the memory location for this action. */ void *location; @@ -204,13 +216,6 @@ private: */ const ModelAction *reads_from; - /** - * @brief The promise that this action reads from - * - * Only valid for reads - */ - Promise *reads_from_promise; - /** @brief The last fence release from the same thread */ const ModelAction *last_fence_release; @@ -238,8 +243,6 @@ private: * vectors for all operations. */ ClockVector *cv; - - bool sleep_flag; }; #endif /* __ACTION_H__ */