mem-cache: Add setters to validate and secure block
[gem5.git] / src / mem / mem_checker_monitor.cc
index 7c0605ca57f2b13c1c8142fd422c188b8b53b669..ee7eb3fcc8c7b88ead0155432f3089e3ee1cb465 100644 (file)
  *          Marco Elver
  */
 
+#include "mem/mem_checker_monitor.hh"
+
 #include <memory>
 
 #include "base/output.hh"
 #include "base/trace.hh"
 #include "debug/MemCheckerMonitor.hh"
-#include "mem/mem_checker_monitor.hh"
-
-using namespace std;
 
 MemCheckerMonitor::MemCheckerMonitor(Params* params)
     : MemObject(params),
@@ -157,7 +156,7 @@ MemCheckerMonitor::recvTimingReq(PacketPtr pkt)
     unsigned size = pkt->getSize();
     Addr addr = pkt->getAddr();
     bool expects_response = pkt->needsResponse() && !pkt->cacheResponding();
-    std::unique_ptr<uint8_t> pkt_data;
+    std::unique_ptr<uint8_t[]> pkt_data;
     MemCheckerMonitorSenderState* state = NULL;
 
     if (expects_response && is_write) {
@@ -165,7 +164,7 @@ MemCheckerMonitor::recvTimingReq(PacketPtr pkt)
         // write. For reads, we have no data yet, so it doesn't make sense to
         // allocate.
         pkt_data.reset(new uint8_t[size]);
-        memcpy(pkt_data.get(), pkt->getConstPtr<uint8_t*>(), size);
+        pkt->writeData(pkt_data.get());
     }
 
     // If a cache miss is served by a cache, a monitor near the memory
@@ -246,7 +245,7 @@ MemCheckerMonitor::recvTimingResp(PacketPtr pkt)
     bool is_failed_LLSC = pkt->isLLSC() && pkt->req->getExtraData() == 0;
     unsigned size = pkt->getSize();
     Addr addr = pkt->getAddr();
-    std::unique_ptr<uint8_t> pkt_data;
+    std::unique_ptr<uint8_t[]> pkt_data;
     MemCheckerMonitorSenderState* received_state = NULL;
 
     if (is_read) {
@@ -254,7 +253,7 @@ MemCheckerMonitor::recvTimingResp(PacketPtr pkt)
         // a read. For writes, we have already given the MemChecker the data on
         // the request, so it doesn't make sense to allocate on write.
         pkt_data.reset(new uint8_t[size]);
-        memcpy(pkt_data.get(), pkt->getConstPtr<uint8_t*>(), size);
+        pkt->writeData(pkt_data.get());
     }
 
     if (is_read || is_write) {