misc: Segmentation Fault during O3PipeView execution

During the O3PipeView execution, a potential invalid iterator is used to
Update the instruction storeTick field.

If the store_idx iterator is the first() of the StoreQueue, the
corresponding instruction is removed from the queue, leaving the iterator
invalid and not usable in the TRACING_ON block.

This patch uses the store_inst variable to access (and update) the
instruction tick, instead of the (potential) invalid one.

Change-Id: I671052ef282b9048e5239da8629b89e8afa86bf0
Reviewed-on: https://gem5-review.googlesource.com/c/16322
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Andrea Mondelli
2019-02-11 14:53:13 -05:00
parent ae233c7723
commit 38560efd8b

View File

@@ -999,8 +999,8 @@ LSQUnit<Impl>::completeStore(typename StoreQueue::iterator store_idx)
#if TRACING_ON
if (DTRACE(O3PipeView)) {
store_idx->instruction()->storeTick =
curTick() - store_idx->instruction()->fetchTick;
store_inst->storeTick =
curTick() - store_inst->fetchTick;
}
#endif