cpu: Add support to checker for CACHE_BLOCK_ZERO commands.
authorAli Saidi <Ali.Saidi@ARM.com>
Thu, 30 Oct 2014 04:18:24 +0000 (23:18 -0500)
committerAli Saidi <Ali.Saidi@ARM.com>
Thu, 30 Oct 2014 04:18:24 +0000 (23:18 -0500)
The checker didn't know how to properly validate these new commands.

src/cpu/checker/cpu.cc

index 61c127ec4c418e32883f00161f7c2150e4ee14ad..f91bad2944b60e075a376f74dbf9de2e21f19e8b 100644 (file)
@@ -231,6 +231,7 @@ CheckerCPU::writeMem(uint8_t *data, unsigned size,
     bool checked_flags = false;
     bool flags_match = true;
     Addr pAddr = 0x0;
+    static uint8_t zero_data[64] = {};
 
     int fullSize = size;
 
@@ -304,6 +305,15 @@ CheckerCPU::writeMem(uint8_t *data, unsigned size,
                         unverifiedReq->getExtraData() : true;
    }
 
+   // If the request is to ZERO a cache block, there is no data to check
+   // against, but it's all zero. We need something to compare to, so use a
+   // const set of zeros.
+   if (flags & Request::CACHE_BLOCK_ZERO) {
+       assert(!data);
+       assert(sizeof(zero_data) <= fullSize);
+       data = zero_data;
+   }
+
    if (unverifiedReq && unverifiedMemData &&
        memcmp(data, unverifiedMemData, fullSize) && extraData) {
            warn("%lli: Store value does not match value sent to memory! "