The sanitizers use the versionned llvm-symbolizer provided by the llvm-X package (Closes: #753572)

This commit is contained in:
Sylvestre Ledru 2018-11-01 14:32:04 +01:00
parent f9bd1ba58d
commit a620f52ff6
3 changed files with 64 additions and 5 deletions

4
debian/changelog vendored
View File

@ -11,8 +11,8 @@ llvm-toolchain-7 (1:7-8) unstable; urgency=medium
(Closes: #909705)
* Add tests from old bugs to make sure they don't come back
(Closes: #889832, #827866)
* The sanitizers use the versionned llvm-symbolizer provided by the llvm-X package
(Closes: #753572)
* The sanitizers use the versionned llvm-symbolizer provided by the
llvm-X package (Closes: #753572)
-- Sylvestre Ledru <sylvestre@debian.org> Sat, 20 Oct 2018 16:00:58 +0200

View File

@ -2,20 +2,23 @@ Index: llvm-toolchain-7-7/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_
===================================================================
--- llvm-toolchain-7-7.orig/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
+++ llvm-toolchain-7-7/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
@@ -26,6 +26,7 @@
@@ -26,6 +26,10 @@
#include "sanitizer_symbolizer_internal.h"
#include "sanitizer_symbolizer_libbacktrace.h"
#include "sanitizer_symbolizer_mac.h"
+#include "llvm/Config/llvm-config.h" // for LLVM_VERSION_MAJOR
+
+#define TOSTR2(X) #X
+#define TOSTR(X) TOSTR2(X)
#include <dlfcn.h> // for dlsym()
#include <errno.h>
@@ -481,7 +482,7 @@ static SymbolizerTool *ChooseExternalSym
@@ -481,7 +485,7 @@ static SymbolizerTool *ChooseExternalSym
return new(*allocator) AtosSymbolizer(found_path, allocator);
}
#endif // SANITIZER_MAC
- if (const char *found_path = FindPathToBinary("llvm-symbolizer")) {
+ if (const char *found_path = FindPathToBinary("llvm-symbolizer-"LLVM_VERSION_MAJOR)) {
+ if (const char *found_path = "/usr/bin/llvm-symbolizer-" TOSTR(LLVM_VERSION_MAJOR))) {
VReport(2, "Using llvm-symbolizer found at: %s\n", found_path);
return new(*allocator) LLVMSymbolizer(found_path, allocator);
}

View File

@ -176,6 +176,61 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
}
EOF
echo 'int main(int argc, char **argv) {
int *array = new int[100];
delete [] array;
return array[argc]; // BOOM
}' > foo.cpp
clang++-$VERSION -O1 -g -fsanitize=address -fno-omit-frame-pointer foo.cpp
ASAN_OPTIONS=verbosity=1 ./a.out &> foo.log || true
if ! grep "Init done" foo.log; then
echo "asan verbose mode failed"
cat foo.log
exit 42
fi
if test ! -f /usr/lib/llvm-$VERSION/bin/llvm-symbolizer; then
echo "Install llvm-$VERSION"
exit 1
fi
# See also https://bugs.llvm.org/show_bug.cgi?id=39514 why
# /usr/bin/llvm-symbolizer-7 doesn't work
ASAN_OPTIONS=verbosity=2:external_symbolizer_path=/usr/lib/llvm-$VERSION/bin/llvm-symbolizer ./a.out &> foo.log || true
if ! grep "Using llvm-symbolizer" foo.log; then
echo "could not find llvm-symbolizer path"
cat foo.log
exit 42
fi
if ! grep "new\[\](unsigned long)" foo.log; then
echo "could not symbolize correctly"
cat foo.log
exit 42
fi
if ! grep "foo.cpp:3:3" foo.log; then
echo "could not symbolize correctly"
cat foo.log
exit 42
fi
./a.out &> foo.log || true
if ! grep "Using llvm-symbolizer" foo.log; then
echo "could not find llvm-symbolizer path"
cat foo.log
exit 42
fi
if ! grep "new\[\](unsigned long)" foo.log; then
echo "could not symbolize correctly"
cat foo.log
exit 42
fi
if ! grep "foo.cpp:3:3" foo.log; then
echo "could not symbolize correctly"
cat foo.log
exit 42
fi
if test ! -f /usr/lib/llvm-$VERSION/lib/libFuzzer.a; then
echo "Install libfuzzer-$VERSION-dev";
exit -1;
@ -188,6 +243,7 @@ if ! ./a.out 2>&1 | grep -q -E "(Test unit written|PreferSmall)"; then
fi
# fails on 32 bit, seems a real BUG in the package, using 64bit static libs?
LANG=C clang-$VERSION -fsanitize=fuzzer test_fuzzer.cc &> foo.log
if ! grep "No such file or directory" foo.log; then