69 writes.insert(std::make_pair(serial,
77 auto it =
writes.find(serial);
80 warn(
"Could not locate write transaction: serial = %d, "
81 "complete = %d\n", serial, _complete);
87 it->second.complete = _complete;
108 if (!
writes.erase(serial)) {
109 warn(
"Could not locate write transaction: serial = %d\n", serial);
137 bool wc_overlap =
true;
148 for (
const auto& addr_write : cluster->writes) {
184 last_obs_valid =
false;
191 if (last_obs_valid) {
219 "complete = %d, data = %#x\n", start, complete,
data);
233 warn(
"Could not locate read transaction: serial = %d, complete = %d\n",
238 Tick start = it->second.start;
308 "completing read: serial = %d, complete = %d, "
309 "addr = %#llx, size = %d\n", serial, complete,
addr, size);
311 for (
size_t i = 0;
i < size; ++
i) {
325 "failed: received %#x, expected ",
349 for (
size_t i = 0;
i < size; ++
i) {
The ByteTracker keeps track of transactions for the same byte – all outstanding reads,...
std::vector< uint8_t > _lastExpectedData
See lastExpectedData().
void abortWrite(Serial serial)
Aborts a write transaction.
void completeWrite(Serial serial, Tick complete)
Completes a write transaction.
bool completeRead(Serial serial, Tick complete, uint8_t data)
Completes a read transaction that is still outstanding.
WriteCluster * getIncompleteWriteCluster()
Convenience function to return the most recent incomplete write cluster.
bool inExpectedData(Tick start, Tick complete, uint8_t data)
Given a start and end time (of any read transaction), this function iterates through all data that su...
void startWrite(Serial serial, Tick start, uint8_t data)
Starts a write transaction.
std::map< Serial, Transaction > outstandingReads
Maintains a map of Serial -> Transaction for all outstanding reads.
void pruneTransactions()
Prunes no longer needed transactions.
void startRead(Serial serial, Tick start)
Starts a read transaction.
TransactionList readObservations
List of completed reads, i.e.
WriteClusterList writeClusters
List of write clusters for this address.
TList::iterator lastCompletedTransaction(TList *l, Tick before)
Helper function to return an iterator to the entry of a container of Transaction compatible classes,...
const std::vector< uint8_t > & lastExpectedData() const
This function returns the expected data that inExpectedData iterated through in the last call.
The Transaction class captures the lifetimes of read and write operations, and the values they consum...
uint8_t data
Depending on the memory operation, the data value either represents: for writes, the value written up...
Tick complete
Completion tick.
The WriteCluster class captures sets of writes where all writes are overlapping with at least one oth...
void completeWrite(Serial serial, Tick _complete)
Completes a write transaction.
std::unordered_map< Serial, Transaction > writes
Map of Serial --> Transaction of all writes in cluster; contains all, in-flight or already completed.
void abortWrite(Serial serial)
Aborts a write transaction.
void startWrite(Serial serial, Tick _start, uint8_t data)
Starts a write transaction.
Tick start
Start of earliest write in cluster.
Tick complete
Completion of last write in cluster.
MemChecker(const MemCheckerParams &p)
bool completeRead(Serial serial, Tick complete, Addr addr, size_t size, uint8_t *data)
Completes a previously started read transaction.
std::unordered_map< Addr, ByteTracker > byte_trackers
Maintain a map of address --> byte-tracker.
static const Tick TICK_FUTURE
The maximum value that curTick() could ever return.
ByteTracker * getByteTracker(Addr addr)
Returns the instance of ByteTracker for the requested location.
void reset()
Resets the entire checker.
uint64_t Serial
The Serial type is used to be able to uniquely identify a transaction as it passes through the system...
std::string errorMessage
Detailed error message of the last violation in completeRead.
static const Tick TICK_INITIAL
The initial tick the system starts with.
#define gem5_assert(cond,...)
The assert macro will function like a normal assert, but will use panic instead of straight abort().
Copyright (c) 2024 Arm Limited All rights reserved.
Tick curTick()
The universal simulation clock.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t Tick
Tick count type.
std::string csprintf(const char *format, const Args &...args)