diff options
author | Jason Power <power.jg@gmail.com> | 2012-08-28 17:57:51 -0500 |
---|---|---|
committer | Jason Power <power.jg@gmail.com> | 2012-08-28 17:57:51 -0500 |
commit | 494f6a858e47db3e5352468f504e82af01b931f9 (patch) | |
tree | 77d446867e1050b09f7aa251e64f150e7a856cf2 /src/mem | |
parent | 0cacf7e8178defce4063b7cfc8a592c595f56fa2 (diff) | |
download | gem5-494f6a858e47db3e5352468f504e82af01b931f9.tar.xz |
Ruby: Correct DataBlock =operator
The =operator for the DataBlock class was incorrectly interpreting the class
member m_alloc. This variable stands for whether the assigned memory for the
data block needs to be freed or not by the class itself. It seems that the
=operator interpreted the variable as whether the memory is assigned to the
data block. This wrong interpretation was causing values not to propagate
to RubySystem::m_mem_vec_ptr. This caused major issues with restoring from
checkpoints when using a protocol which verified that the cache data was
consistent with the backing store (i.e. MOESI-hammer).
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/ruby/common/DataBlock.cc | 10 | ||||
-rw-r--r-- | src/mem/ruby/common/DataBlock.hh | 2 |
2 files changed, 3 insertions, 9 deletions
diff --git a/src/mem/ruby/common/DataBlock.cc b/src/mem/ruby/common/DataBlock.cc index 5aba4332a..59a0f692a 100644 --- a/src/mem/ruby/common/DataBlock.cc +++ b/src/mem/ruby/common/DataBlock.cc @@ -87,14 +87,6 @@ DataBlock::setData(uint8* data, int offset, int len) DataBlock & DataBlock::operator=(const DataBlock & obj) { - if (this == &obj) { - // assert(false); - } else { - if (!m_alloc) - m_data = new uint8[RubySystem::getBlockSizeBytes()]; - memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); - m_alloc = true; - } - + memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); return *this; } diff --git a/src/mem/ruby/common/DataBlock.hh b/src/mem/ruby/common/DataBlock.hh index 7bd92710d..0ab4cfc01 100644 --- a/src/mem/ruby/common/DataBlock.hh +++ b/src/mem/ruby/common/DataBlock.hh @@ -29,6 +29,7 @@ #ifndef __MEM_RUBY_COMMON_DATABLOCK_HH__ #define __MEM_RUBY_COMMON_DATABLOCK_HH__ +#include <cassert> #include <iomanip> #include <iostream> @@ -72,6 +73,7 @@ class DataBlock inline void DataBlock::assign(uint8* data) { + assert(data != NULL); if (m_alloc) { delete [] m_data; } |