From 2fe3d660260e7b546b5860ac4459014ed9bee907 Mon Sep 17 00:00:00 2001 From: Robert Kovacsics Date: Fri, 13 Jul 2018 14:38:00 +0100 Subject: mem-cache: TempCacheBlk allocates and destroys its own data This change is because I want to make CacheBlk::data private, so that I can track all the places which write to it. But to keep that commit smaller (it is pretty big, because of all the places which might change it), I have split this into a commit of its own. Change-Id: I15a2fc1752085ff3681f5c74ec90be3828a559ea Reviewed-on: https://gem5-review.googlesource.com/11829 Reviewed-by: Nikos Nikoleris Maintainer: Nikos Nikoleris --- src/mem/cache/base.cc | 4 +--- src/mem/cache/blk.hh | 11 +++++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index 862aa3a94..a0614100f 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -113,8 +113,7 @@ BaseCache::BaseCache(const BaseCacheParams *p, unsigned blk_size) // forward snoops is overridden in init() once we can query // whether the connected master is actually snooping or not - tempBlock = new TempCacheBlk(); - tempBlock->data = new uint8_t[blkSize]; + tempBlock = new TempCacheBlk(blkSize); tags->setCache(this); if (prefetcher) @@ -123,7 +122,6 @@ BaseCache::BaseCache(const BaseCacheParams *p, unsigned blk_size) BaseCache::~BaseCache() { - delete [] tempBlock->data; delete tempBlock; } diff --git a/src/mem/cache/blk.hh b/src/mem/cache/blk.hh index 97e1d42d9..3bb0317cc 100644 --- a/src/mem/cache/blk.hh +++ b/src/mem/cache/blk.hh @@ -406,10 +406,17 @@ class TempCacheBlk final : public CacheBlk Addr _addr; public: - TempCacheBlk() : CacheBlk() {} + /** + * Creates a temporary cache block, with its own storage. + * @param size The size (in bytes) of this cache block. + */ + TempCacheBlk(unsigned size) : CacheBlk() + { + data = new uint8_t[size]; + } TempCacheBlk(const TempCacheBlk&) = delete; TempCacheBlk& operator=(const TempCacheBlk&) = delete; - ~TempCacheBlk() {}; + ~TempCacheBlk() { delete [] data; }; /** * Invalidate the block and clear all state. -- cgit v1.2.3