diff options
author | Pavel Yatcheniy <yatcheniy.pavel@huawei.com> | 2021-01-28 17:51:04 +0300 |
---|---|---|
committer | Cristian Cadar <c.cadar@imperial.ac.uk> | 2022-09-14 20:40:10 +0100 |
commit | 4ccb533158d40e15db9e9f2ade9bb28c3f83f38e (patch) | |
tree | 5086367ddc73b849c41d7621d41a00eacc895872 /lib | |
parent | 39f8069db879e1f859c60c821092452748b4ba37 (diff) | |
download | klee-4ccb533158d40e15db9e9f2ade9bb28c3f83f38e.tar.gz |
Support UBSan-enabled binaries
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Core/SpecialFunctionHandler.cpp | 37 | ||||
-rw-r--r-- | lib/Core/SpecialFunctionHandler.h | 6 |
2 files changed, 2 insertions, 41 deletions
diff --git a/lib/Core/SpecialFunctionHandler.cpp b/lib/Core/SpecialFunctionHandler.cpp index 2b788d60..f4b09f36 100644 --- a/lib/Core/SpecialFunctionHandler.cpp +++ b/lib/Core/SpecialFunctionHandler.cpp @@ -32,7 +32,7 @@ #include "llvm/IR/Instructions.h" #include "llvm/IR/Module.h" -#include <errno.h> +#include <cerrno> #include <sstream> using namespace llvm; @@ -139,13 +139,6 @@ static SpecialFunctionHandler::HandlerInfo handlerInfo[] = { // operator new(unsigned long) add("_Znwm", handleNew, true), - // Run clang with -fsanitize=signed-integer-overflow and/or - // -fsanitize=unsigned-integer-overflow - add("__ubsan_handle_add_overflow", handleAddOverflow, false), - add("__ubsan_handle_sub_overflow", handleSubOverflow, false), - add("__ubsan_handle_mul_overflow", handleMulOverflow, false), - add("__ubsan_handle_divrem_overflow", handleDivRemOverflow, false), - #undef addDNR #undef add }; @@ -878,31 +871,3 @@ void SpecialFunctionHandler::handleMarkGlobal(ExecutionState &state, mo->isGlobal = true; } } - -void SpecialFunctionHandler::handleAddOverflow( - ExecutionState &state, KInstruction *target, - std::vector<ref<Expr>> &arguments) { - executor.terminateStateOnError(state, "overflow on addition", - StateTerminationType::Overflow); -} - -void SpecialFunctionHandler::handleSubOverflow( - ExecutionState &state, KInstruction *target, - std::vector<ref<Expr>> &arguments) { - executor.terminateStateOnError(state, "overflow on subtraction", - StateTerminationType::Overflow); -} - -void SpecialFunctionHandler::handleMulOverflow( - ExecutionState &state, KInstruction *target, - std::vector<ref<Expr>> &arguments) { - executor.terminateStateOnError(state, "overflow on multiplication", - StateTerminationType::Overflow); -} - -void SpecialFunctionHandler::handleDivRemOverflow( - ExecutionState &state, KInstruction *target, - std::vector<ref<Expr>> &arguments) { - executor.terminateStateOnError(state, "overflow on division or remainder", - StateTerminationType::Overflow); -} diff --git a/lib/Core/SpecialFunctionHandler.h b/lib/Core/SpecialFunctionHandler.h index a9f7100d..9487fdf5 100644 --- a/lib/Core/SpecialFunctionHandler.h +++ b/lib/Core/SpecialFunctionHandler.h @@ -34,7 +34,7 @@ namespace klee { KInstruction *target, std::vector<ref<Expr> > &arguments); - typedef std::map<const llvm::Function*, + typedef std::map<const llvm::Function*, std::pair<Handler,bool> > handlers_ty; handlers_ty handlers; @@ -144,10 +144,6 @@ namespace klee { HANDLER(handleUnderConstrained); HANDLER(handleWarning); HANDLER(handleWarningOnce); - HANDLER(handleAddOverflow); - HANDLER(handleMulOverflow); - HANDLER(handleSubOverflow); - HANDLER(handleDivRemOverflow); #undef HANDLER }; } // End klee namespace |