about summary refs log tree commit diff homepage
path: root/lib/Core
diff options
context:
space:
mode:
authorMartinNowack <martin.nowack@gmail.com>2016-08-08 22:01:00 +0200
committerGitHub <noreply@github.com>2016-08-08 22:01:00 +0200
commit74d88a5e0d6020fc262c166e42b8acdc335b4999 (patch)
treef6bbef19c49dc0c5b7484fcc563b4a21f2185234 /lib/Core
parentdf62e30a8883f3c146700f3666442c7ada42ba3c (diff)
parentad866e123b6be8a160ecb87249884cc3dfc3a349 (diff)
downloadklee-74d88a5e0d6020fc262c166e42b8acdc335b4999.tar.gz
Merge pull request #447 from hutoTUM/fix-klee_get_obj_size
Fix for klee_get_obj_size() crashing on 64-bit, resolves #446 
Diffstat (limited to 'lib/Core')
-rw-r--r--lib/Core/SpecialFunctionHandler.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Core/SpecialFunctionHandler.cpp b/lib/Core/SpecialFunctionHandler.cpp
index b44b0e1b..0ecbdd07 100644
--- a/lib/Core/SpecialFunctionHandler.cpp
+++ b/lib/Core/SpecialFunctionHandler.cpp
@@ -30,6 +30,14 @@
 #endif
 #include "llvm/ADT/Twine.h"
 
+#if LLVM_VERSION_CODE <= LLVM_VERSION(3, 1)
+#include "llvm/Target/TargetData.h"
+#elif LLVM_VERSION_CODE <= LLVM_VERSION(3, 2)
+#include "llvm/DataLayout.h"
+#else
+#include "llvm/IR/DataLayout.h"
+#endif
+
 #include <errno.h>
 
 using namespace llvm;
@@ -539,8 +547,11 @@ void SpecialFunctionHandler::handleGetObjSize(ExecutionState &state,
   executor.resolveExact(state, arguments[0], rl, "klee_get_obj_size");
   for (Executor::ExactResolutionList::iterator it = rl.begin(), 
          ie = rl.end(); it != ie; ++it) {
-    executor.bindLocal(target, *it->second, 
-                       ConstantExpr::create(it->first.first->size, Expr::Int32));
+    executor.bindLocal(
+        target, *it->second,
+        ConstantExpr::create(it->first.first->size,
+                             executor.kmodule->targetData->getTypeSizeInBits(
+                                 target->inst->getType())));
   }
 }