diff options
Diffstat (limited to 'lib/Core/AddressSpace.cpp')
-rw-r--r-- | lib/Core/AddressSpace.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/Core/AddressSpace.cpp b/lib/Core/AddressSpace.cpp index 811e52c3..2169ed06 100644 --- a/lib/Core/AddressSpace.cpp +++ b/lib/Core/AddressSpace.cpp @@ -313,22 +313,29 @@ bool AddressSpace::copyInConcretes() { if (!mo->isUserSpecified) { const ObjectState *os = it->second; - uint8_t *address = (uint8_t*) (unsigned long) mo->address; - if (memcmp(address, os->concreteStore, mo->size)!=0) { - if (os->readOnly) { - return false; - } else { - ObjectState *wos = getWriteable(mo, os); - memcpy(wos->concreteStore, address, mo->size); - } - } + if (!copyInConcrete(mo, os, mo->address)) + return false; } } return true; } +bool AddressSpace::copyInConcrete(const MemoryObject *mo, const ObjectState *os, + uint64_t src_address) { + uint8_t *address = (uint8_t *)(unsigned long)src_address; + if (memcmp(address, os->concreteStore, mo->size) != 0) { + if (os->readOnly) { + return false; + } else { + ObjectState *wos = getWriteable(mo, os); + memcpy(wos->concreteStore, address, mo->size); + } + } + return true; +} + /***/ bool MemoryObjectLT::operator()(const MemoryObject *a, const MemoryObject *b) const { |