X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=action.h;h=8f44c7cb9776d895bbb3579dfa7732e3c0964077;hb=0229244d21ca78bf781e41684810e9fb6d5ca56c;hp=ad34c830f4b61d0b2a214199c5d208aa5abddca2;hpb=b5d7d602016a4640c31b79ba9598dceefa778ab6;p=c11tester.git diff --git a/action.h b/action.h index ad34c830..8f44c7cb 100644 --- a/action.h +++ b/action.h @@ -11,18 +11,20 @@ #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; @@ -56,6 +58,9 @@ typedef enum action_type { 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 +75,9 @@ 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 */ } action_type_t; /* Forward declaration */ @@ -94,6 +101,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; } @@ -102,7 +111,7 @@ public: 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; } @@ -142,6 +151,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; @@ -180,14 +190,26 @@ public: 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;