MC_ignore_local_variable("start_time", "*");
/* Static variable used for tracing */
- MCer_ignore_global_variable("counter");
+ this->process().ignore_global_variable("counter");
/* SIMIX */
- MCer_ignore_global_variable("smx_total_comms");
+ this->process().ignore_global_variable("smx_total_comms");
}
void ModelChecker::shutdown()
return nullptr;
}
+void ObjectInformation::remove_global_variable(const char* name)
+{
+ typedef std::vector<Variable>::size_type size_type;
+
+ if (this->global_variables.empty())
+ return;
+
+ // Binary search:
+ size_type start = 0;
+ size_type end = this->global_variables.size() - 1;
+
+ while (start <= end) {
+ size_type cursor = start + (end - start) / 2;
+ simgrid::mc::Variable& current_var = this->global_variables[cursor];
+ int cmp = current_var.name.compare(name);
+
+ if (cmp == 0) {
+ // Find the whole range:
+ start = cursor;
+ while (start != 0 && this->global_variables[start - 1].name == name)
+ start--;
+ size_type size = this->global_variables.size();
+ end = cursor;
+ while (end != size - 1 && this->global_variables[end + 1].name == name)
+ end++;
+ // Remove the whole range:
+ this->global_variables.erase(
+ this->global_variables.begin() + cursor,
+ this->global_variables.begin() + end + 1);
+ return;
+ } else if (cmp < 0)
+ start = cursor + 1;
+ else if (cursor != 0)
+ end = cursor - 1;
+ else
+ break;
+ }
+}
+
}
}
\ No newline at end of file
simgrid::mc::Frame* find_function(const void *ip) const;
simgrid::mc::Variable* find_variable(const char* name) const;
+ void remove_global_variable(const char* name);
};
}
void privatized(bool privatized) { privatized_ = privatized; }
+ void ignore_global_variable(const char* name)
+ {
+ for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info :
+ this->object_infos)
+ info->remove_global_variable(name);
+ }
+
private:
void init_memory_map_info();
void refresh_heap();
}
}
-// ***** Ignore global variables
-
-XBT_PRIVATE void MCer_ignore_global_variable(const char *name)
-{
- simgrid::mc::Process* process = &mc_model_checker->process();
- xbt_assert(!process->object_infos.empty(), "MC subsystem not initialized");
-
- for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info : process->object_infos) {
-
- // Binary search:
- int start = 0;
- int end = info->global_variables.size() - 1;
- while (start <= end) {
- unsigned int cursor = (start + end) / 2;
- simgrid::mc::Variable* current_var = &info->global_variables[cursor];
- int cmp = current_var->name.compare(name);
- if (cmp == 0) {
- info->global_variables.erase(
- info->global_variables.begin() + cursor);
- start = 0;
- end = info->global_variables.size() - 1;
- } else if (cmp < 0) {
- start = cursor + 1;
- } else {
- end = cursor - 1;
- }
- }
- }
-}
-
// ***** Ignore local variables
static void mc_ignore_local_variable_in_scope(const char *var_name,
SG_BEGIN_DECL();
-XBT_PRIVATE void MCer_ignore_global_variable(const char *var_name);
XBT_PRIVATE void MC_heap_region_ignore_insert(mc_heap_ignore_region_t region);
XBT_PRIVATE void MC_heap_region_ignore_remove(void *address, size_t size);