From 9d0e072e3b40b720a26265f0d9b2b99f2d3a954e Mon Sep 17 00:00:00 2001 From: Daniel Schemmel Date: Wed, 15 Mar 2023 00:13:28 +0000 Subject: Integrate KDAlloc into KLEE --- lib/Core/AddressSpace.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'lib/Core/AddressSpace.cpp') diff --git a/lib/Core/AddressSpace.cpp b/lib/Core/AddressSpace.cpp index f3462ca1..ab3bbb8c 100644 --- a/lib/Core/AddressSpace.cpp +++ b/lib/Core/AddressSpace.cpp @@ -297,19 +297,25 @@ bool AddressSpace::resolve(ExecutionState &state, TimingSolver *solver, // transparently avoid screwing up symbolics (if the byte is symbolic // then its concrete cache byte isn't being used) but is just a hack. -void AddressSpace::copyOutConcretes() { - for (MemoryMap::iterator it = objects.begin(), ie = objects.end(); - it != ie; ++it) { - const MemoryObject *mo = it->first; - - if (!mo->isUserSpecified) { - const auto &os = it->second; - auto address = reinterpret_cast(mo->address); - - if (!os->readOnly) - memcpy(address, os->concreteStore, mo->size); +std::size_t AddressSpace::copyOutConcretes() { + std::size_t numPages{}; + for (const auto &object : objects) { + auto &mo = object.first; + auto &os = object.second; + if (!mo->isUserSpecified && !os->readOnly && os->size != 0) { + auto size = std::max(os->size, mo->alignment); + numPages += + (size + MemoryManager::pageSize - 1) / MemoryManager::pageSize; + copyOutConcrete(mo, os.get()); } } + return numPages; +} + +void AddressSpace::copyOutConcrete(const MemoryObject *mo, + const ObjectState *os) const { + auto address = reinterpret_cast(mo->address); + std::memcpy(address, os->concreteStore, mo->size); } bool AddressSpace::copyInConcretes() { -- cgit 1.4.1