#include <xbt/mmalloc.h>
-#include "mc_object_info.h"
-#include "mc_unw.h"
-#include "mc_snapshot.h"
-#include "mc_ignore.h"
-#include "mc_smx.h"
+#include "src/mc/mc_object_info.h"
+#include "src/mc/mc_unw.h"
+#include "src/mc/mc_snapshot.h"
+#include "src/mc/mc_ignore.h"
+#include "src/mc/mc_smx.h"
#include "src/mc/Process.hpp"
#include "src/mc/AddressSpace.hpp"
xbt_die("Could not read pagemap");
}
+void Process::ignore_heap(IgnoredHeapRegion const& region)
+{
+ if (ignored_heap_.empty()) {
+ ignored_heap_.push_back(std::move(region));
+ return;
+ }
+
+ typedef std::vector<IgnoredHeapRegion>::size_type size_type;
+
+ size_type start = 0;
+ size_type end = ignored_heap_.size() - 1;
+
+ // Binary search the position of insertion:
+ size_type cursor;
+ while (start <= end) {
+ cursor = start + (end - start) / 2;
+ auto& current_region = ignored_heap_[cursor];
+ if (current_region.address == region.address)
+ return;
+ else if (current_region.address < region.address)
+ start = cursor + 1;
+ else if (cursor != 0)
+ end = cursor - 1;
+ // Avoid underflow:
+ else
+ break;
+ }
+
+ // Insert it mc_heap_ignore_region_t:
+ if (ignored_heap_[cursor].address < region.address)
+ ++cursor;
+ ignored_heap_.insert( ignored_heap_.begin() + cursor, region);
+}
+
+void Process::unignore_heap(void *address, size_t size)
+{
+ typedef std::vector<IgnoredHeapRegion>::size_type size_type;
+
+ size_type start = 0;
+ size_type end = ignored_heap_.size() - 1;
+
+ // Binary search:
+ size_type cursor;
+ while (start <= end) {
+ cursor = (start + end) / 2;
+ auto& region = ignored_heap_[cursor];
+ if (region.address == address) {
+ ignored_heap_.erase(ignored_heap_.begin() + cursor);
+ return;
+ } else if (region.address < address)
+ start = cursor + 1;
+ else if ((char *) region.address <= ((char *) address + size)) {
+ ignored_heap_.erase(ignored_heap_.begin() + cursor);
+ return;
+ } else if (cursor != 0)
+ end = cursor - 1;
+ // Avoid underflow:
+ else
+ break;
+ }
+}
+
+void Process::ignore_local_variable(const char *var_name, const char *frame_name)
+{
+ if (frame_name != nullptr && strcmp(frame_name, "*") == 0)
+ frame_name = nullptr;
+ for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info :
+ this->object_infos)
+ info->remove_local_variable(var_name, frame_name);
+}
+
}
}