diff options
author | Lukas Zaoral <lzaoral@redhat.com> | 2021-09-13 10:33:09 +0200 |
---|---|---|
committer | MartinNowack <2443641+MartinNowack@users.noreply.github.com> | 2021-10-27 12:06:36 +0100 |
commit | c9aadba9107ad4a6abaa2b2539c47adac2d2b810 (patch) | |
tree | 197260049b119af2121431a3b7e593aaebc89395 /tools | |
parent | 46dc29aa60e4a662c18ea7b2bac1c570ea7a728f (diff) | |
download | klee-c9aadba9107ad4a6abaa2b2539c47adac2d2b810.tar.gz |
tools/klee: Warn if module and host target triples differ
... as running a bitcode with a different target triple may result in unexpected crashes or assertion violations.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/klee/main.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp index f340e743..1ab809aa 100644 --- a/tools/klee/main.cpp +++ b/tools/klee/main.cpp @@ -34,6 +34,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Errno.h" #include "llvm/Support/FileSystem.h" +#include "llvm/Support/Host.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" @@ -1258,12 +1259,20 @@ int main(int argc, char **argv, char **envp) { llvm::Module *mainModule = M.get(); + const std::string &module_triple = mainModule->getTargetTriple(); + std::string host_triple = llvm::sys::getDefaultTargetTriple(); + + if (module_triple != host_triple) + klee_warning("Module and host target triples do not match: '%s' != '%s'\n" + "This may cause unexpected crashes or assertion violations.", + module_triple.c_str(), host_triple.c_str()); + // Detect architecture std::string opt_suffix = "64"; // Fall back to 64bit - if (mainModule->getTargetTriple().find("i686") != std::string::npos || - mainModule->getTargetTriple().find("i586") != std::string::npos || - mainModule->getTargetTriple().find("i486") != std::string::npos || - mainModule->getTargetTriple().find("i386") != std::string::npos) + if (module_triple.find("i686") != std::string::npos || + module_triple.find("i586") != std::string::npos || + module_triple.find("i486") != std::string::npos || + module_triple.find("i386") != std::string::npos) opt_suffix = "32"; // Add additional user-selected suffix |