mem: Fix initial value problem with MemChecker

In highly loaded cases, reads might actually overlap with writes to the
initial memory state. The mem checker needs to detect such cases and
permit the read reading either from the writes (what it is doing now) or
read from the initial, unknown value.

This patch adds this logic.
This commit is contained in:
Stephan Diestelhorst 2015-02-16 03:34:47 -05:00
parent 661dac1598
commit 93fa8e3cd4

View file

@ -195,6 +195,17 @@ MemChecker::ByteTracker::inExpectedData(Tick start, Tick complete, uint8_t data)
}
// Record non-matching, but possible value
_lastExpectedData.push_back(last_obs.data);
} else {
// We have not seen any valid observation, and the only writes
// observed are overlapping, so anything (in particular the
// initialisation value) goes
// NOTE: We can overlap with multiple write clusters, here
if (!writeClusters.empty() && wc_overlap) {
// ensure that all write clusters really overlap this read
assert(writeClusters.begin()->start < complete &&
writeClusters.rbegin()->complete > start);
return true;
}
}
if (_lastExpectedData.empty()) {