From b119073ab013f387000435ba5a55a3026fc8a8d9 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Wed, 13 Feb 2013 12:59:53 -0800 Subject: add I$/D$/L2$ simulators --- riscv/memtracer.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 riscv/memtracer.h (limited to 'riscv/memtracer.h') diff --git a/riscv/memtracer.h b/riscv/memtracer.h new file mode 100644 index 0000000..ed62be5 --- /dev/null +++ b/riscv/memtracer.h @@ -0,0 +1,46 @@ +#ifndef _MEMTRACER_H +#define _MEMTRACER_H + +#include +#include +#include + +class memtracer_t +{ + public: + memtracer_t() : link(NULL) {} + virtual ~memtracer_t() {} + + virtual bool interested_in_range(uint64_t begin, uint64_t end, bool store, bool fetch) = 0; + virtual void trace(uint64_t addr, size_t bytes, bool store, bool fetch) = 0; + + protected: + + private: + memtracer_t* link; +}; + +class memtracer_list_t : public memtracer_t +{ + public: + bool interested_in_range(uint64_t begin, uint64_t end, bool store, bool fetch) + { + for (std::vector::iterator it = list.begin(); it != list.end(); ++it) + if ((*it)->interested_in_range(begin, end, store, fetch)) + return true; + return false; + } + void trace(uint64_t addr, size_t bytes, bool store, bool fetch) + { + for (std::vector::iterator it = list.begin(); it != list.end(); ++it) + (*it)->trace(addr, bytes, store, fetch); + } + void hook(memtracer_t* h) + { + list.push_back(h); + } + private: + std::vector list; +}; + +#endif -- cgit v1.1