about summary refs log tree commit diff homepage
path: root/lib/Core/Executor.h
diff options
context:
space:
mode:
authorJulian Büning <julian.buening@comsys.rwth-aachen.de>2021-05-06 22:01:30 +0200
committerMartinNowack <2443641+MartinNowack@users.noreply.github.com>2021-05-10 17:48:34 +0100
commit24badb5bf17ff586dc3f1856901f27210713b2ac (patch)
tree00368e6c71eda9911768946649fddef855d88cf5 /lib/Core/Executor.h
parentc155cc7132a4d4bff042bf982ee08bf142a21b5e (diff)
downloadklee-24badb5bf17ff586dc3f1856901f27210713b2ac.tar.gz
allocate memory objects for functions
Before, we reused the llvm::Function* value in the target program,
even though it stems from KLEE's own address space. This leads to
non-deterministic function pointers, even with --allocate-determ.
This issue was identified in the MoKLEE paper. Now, we allocate a
memory object per function, for its (potentially) deterministic
address. Mapping this address back to llvm::Functions is done by
the legalFunctions map.

Also, pointer width now depends on the target, not the host.
Diffstat (limited to 'lib/Core/Executor.h')
-rw-r--r--lib/Core/Executor.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Core/Executor.h b/lib/Core/Executor.h
index ae960731..987edf47 100644
--- a/lib/Core/Executor.h
+++ b/lib/Core/Executor.h
@@ -34,6 +34,7 @@
 #include <memory>
 #include <set>
 #include <string>
+#include <unordered_map>
 #include <vector>
 
 struct KTest;
@@ -164,9 +165,9 @@ private:
   /// globals that have no representative object (i.e. functions).
   std::map<const llvm::GlobalValue*, ref<ConstantExpr> > globalAddresses;
 
-  /// The set of legal function addresses, used to validate function
-  /// pointers. We use the actual Function* address as the function address.
-  std::set<uint64_t> legalFunctions;
+  /// Map of legal function addresses to the corresponding Function.
+  /// Used to validate and dereference function pointers.
+  std::unordered_map<std::uint64_t, llvm::Function*> legalFunctions;
 
   /// When non-null the bindings that will be used for calls to
   /// klee_make_symbolic in order replay.