diff options
| author | Daniel Schemmel <daniel@schemmel.net> | 2023-03-15 00:13:28 +0000 |
|---|---|---|
| committer | Frank Busse <f.busse@imperial.ac.uk> | 2023-03-16 11:57:59 +0000 |
| commit | 9d0e072e3b40b720a26265f0d9b2b99f2d3a954e (patch) | |
| tree | 23bbe4dca4432acbe1b52ae0861310ad1eec818f /lib/Core/AddressSpace.cpp | |
| parent | 51655c601b3246457e27cf296284c049641c470c (diff) | |
| download | klee-9d0e072e3b40b720a26265f0d9b2b99f2d3a954e.tar.gz | |
Integrate KDAlloc into KLEE
Diffstat (limited to 'lib/Core/AddressSpace.cpp')
| -rw-r--r-- | lib/Core/AddressSpace.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
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<std::uint8_t*>(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<std::uint8_t *>(mo->address); + std::memcpy(address, os->concreteStore, mo->size); } bool AddressSpace::copyInConcretes() { |
