#include <stdio.h>
+#include <string>
+
#include "model.h"
+#include "execution.h"
#include "action.h"
+#include "history.h"
#include "cmodelint.h"
#include "threads-model.h"
/* --- helper functions --- */
uint64_t model_rmwrcas_action_helper(void *obj, int atomic_index, uint64_t oldval, int size, const char *position) {
return model->switch_to_master(
- new ModelAction(ATOMIC_RMWRCAS, position, orders[atomic_index], obj)
+ new ModelAction(ATOMIC_RMWRCAS, position, orders[atomic_index], obj, oldval, size)
);
}
*/
void cds_func_entry(const char * funcName) {
+ if (!model) return;
+
Thread * th = thread_current();
- printf("thread %d Enter function %s\n", th->get_id(), funcName);
+ uint32_t func_id;
+
+ ModelHistory *history = model->get_history();
+ if ( !history->getFuncMap()->contains(funcName) ) {
+ func_id = history->get_func_counter();
+ history->incr_func_counter();
+
+ history->getFuncMap()->put(funcName, func_id);
+ } else {
+ func_id = history->getFuncMap()->get(funcName);
+ }
+
+ history->enter_function(func_id, th->get_id());
}
void cds_func_exit(const char * funcName) {
+ if (!model) return;
+
Thread * th = thread_current();
- printf("thread %d Exit from function %s\n", th->get_id(), funcName);
+ uint32_t func_id;
+
+ ModelHistory *history = model->get_history();
+ func_id = history->getFuncMap()->get(funcName);
+
+ history->exit_function(func_id, th->get_id());
}