From 364157bb57dc8d212d973a0c1e9a27271047d39b Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 20 Oct 2019 14:05:20 +0200 Subject: [PATCH 1/4] debian/orig-tar.sh: fix bash syntax --- debian/orig-tar.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/orig-tar.sh b/debian/orig-tar.sh index ea87640b..030f9c2a 100755 --- a/debian/orig-tar.sh +++ b/debian/orig-tar.sh @@ -144,6 +144,6 @@ if test -n "$RCRELEASE" -o -n "$BRANCH"; then EXTRA_DCH_FLAGS="--force-bad-version --allow-lower-version" fi -dch "$EXTRA_DCH_FLAGS" --distribution $DISTRIBUTION --newversion 1:"$VERSION"-1~exp1 "New snapshot release" +dch $EXTRA_DCH_FLAGS --distribution $DISTRIBUTION --newversion 1:"$VERSION"-1~exp1 "New snapshot release" exit 0 From d2c4dc94171cb2b978d1d18d4788f1852192af87 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 20 Oct 2019 17:28:06 +0200 Subject: [PATCH 2/4] polly, openmp & lldb aren't enabled for every platform So, add to PROJECTS only when enabled --- debian/changelog | 7 +++++++ debian/rules | 10 ++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 44d7342b..850158ff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +llvm-toolchain-9 (1:9.0.0-2) unstable; urgency=medium + + * polly, openmp & lldb aren't enabled for every platform + So, add to PROJECTS only when enabled + + -- Sylvestre Ledru Sun, 20 Oct 2019 17:27:50 +0200 + llvm-toolchain-9 (1:9.0.0-1) unstable; urgency=medium * Repack to move to git diff --git a/debian/rules b/debian/rules index 83468891..dfbab504 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,7 @@ #!/usr/bin/make -f -PROJECTS="clang;clang-tools-extra;libcxx;libcxxabi;lldb;compiler-rt;lld;polly;debuginfo-tests;openmp" +# polly, openmp & lldb aren't enabled for every platform +PROJECTS="clang;clang-tools-extra;libcxx;libcxxabi;compiler-rt;lld;debuginfo-tests" TARGET_BUILD := build-llvm TARGET_BUILD_STAGE2 := $(TARGET_BUILD)/tools/clang/stage2-bins @@ -169,12 +170,16 @@ BOOTSTRAP_CFLAGS_EXTRA = $(CFLAGS_EXTRA) # Nothing for now. Keeping in case w POLLY_ENABLE=yes ifneq (,$(filter $(DEB_HOST_ARCH), powerpc powerpcspe)) POLLY_ENABLE=no +else + PROJECTS += ";polly" endif # Enable openmp (or not) OPENMP_ENABLE=yes ifneq (,$(filter $(DEB_HOST_ARCH), mips mipsel powerpc powerpcspe riscv64 sparc64 s390x x32)) OPENMP_ENABLE=no +else + PROJECTS= += ";openmp" endif RUN_TEST=yes @@ -218,11 +223,12 @@ LLDB_DISABLE_ARCHS := hurd-i386 ia64 powerpc powerpcspe ppc64 riscv64 sparc64 # hurd has threading issues ifeq (,$(filter-out $(LLDB_DISABLE_ARCHS), $(DEB_HOST_ARCH))) # Disable LLDB for this arch. - LLDB_ENABLE=no + LLDB_ENABLE=no else # See https://llvm.org/bugs/show_bug.cgi?id=28898 # Enable it again as it seems it is fixed upstream https://bugs.llvm.org/show_bug.cgi?id=35291 # CMAKE_EXTRA += -DLLDB_DISABLE_LIBEDIT=ON + PROJECTS += ";lldb" endif LLD_ENABLE=yes From 87423490acc95371c3b30ff76c18ba6eeadc630a Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 20 Oct 2019 18:40:02 +0200 Subject: [PATCH 3/4] test code coverage fuzzing --- debian/qualify-clang.sh | 83 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 2 deletions(-) diff --git a/debian/qualify-clang.sh b/debian/qualify-clang.sh index 6d04d90b..5f255b19 100755 --- a/debian/qualify-clang.sh +++ b/debian/qualify-clang.sh @@ -201,7 +201,7 @@ if ! ldd o 2>&1|grep -q libclang-cpp; then echo "Didn't link against libclang-cpp$VERSION" # exit 42 fi -./o > /dev/null +#./o > /dev/null # Check that the symlink is correct ls -al /usr/lib/llvm-$VERSION/lib/libclang-cpp.so.1 > /dev/null @@ -328,14 +328,20 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { __builtin_trap(); return 0; } + EOF clang++-$VERSION -fsanitize=address -fsanitize-coverage=edge,trace-pc test_fuzzer.cc /usr/lib/llvm-$VERSION/lib/libFuzzer.a if ! ./a.out 2>&1 | grep -q -E "(Test unit written|PreferSmall)"; then - echo "fuzzer" + echo "fuzzer failed" exit 42 fi +clang++-$VERSION -fsanitize=address,fuzzer test_fuzzer.cc +if ! ./a.out 2>&1 | grep -q "libFuzzer: deadly signal"; then + echo "fuzzer failed" +fi + echo 'int main(int argc, char **argv) { int *array = new int[100]; delete [] array; @@ -381,6 +387,79 @@ if ! grep -q "foo.cpp:3:3" foo.log; then exit 42 fi +# Example from https://github.com/google/fuzzing/blob/master/tutorial/libFuzzerTutorial.md +# coverage fuzzing +cat << EOF > StandaloneFuzzTargetMain.c +#include +#include +#include + +extern int LLVMFuzzerTestOneInput(const unsigned char *data, size_t size); +__attribute__((weak)) extern int LLVMFuzzerInitialize(int *argc, char ***argv); +int main(int argc, char **argv) { + fprintf(stderr, "StandaloneFuzzTargetMain: running %d inputs\n", argc - 1); + if (LLVMFuzzerInitialize) + LLVMFuzzerInitialize(&argc, &argv); + for (int i = 1; i < argc; i++) { + fprintf(stderr, "Running: %s\n", argv[i]); + FILE *f = fopen(argv[i], "r"); + assert(f); + fseek(f, 0, SEEK_END); + size_t len = ftell(f); + fseek(f, 0, SEEK_SET); + unsigned char *buf = (unsigned char*)malloc(len); + size_t n_read = fread(buf, 1, len, f); + fclose(f); + assert(n_read == len); + LLVMFuzzerTestOneInput(buf, len); + free(buf); + fprintf(stderr, "Done: %s: (%zd bytes)\n", argv[i], n_read); + } +} +EOF + +cat << EOF > fuzz_me.cc +#include +#include + +bool FuzzMe(const uint8_t *Data, size_t DataSize) { + return DataSize >= 3 && + Data[0] == 'F' && + Data[1] == 'U' && + Data[2] == 'Z' && + Data[3] == 'Z'; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + FuzzMe(Data, Size); + return 0; +} +EOF +clang-9 -fprofile-instr-generate -fcoverage-mapping fuzz_me.cc StandaloneFuzzTargetMain.c + +rm -rf CORPUS +mkdir -p CORPUS +echo -n A > CORPUS/A +./a.out CORPUS/* +if ! ./a.out CORPUS/* 2>&1 | grep -q "running 1 inputs"; then + echo "Coverage fuzzing failed" + exit 1 +fi +llvm-profdata-$VERSION merge -sparse *.profraw -o default.profdata +llvm-cov-$VERSION show a.out -instr-profile=default.profdata -name=FuzzMe &> foo.log +if ! grep -q "return DataSize >= 3" foo.log; then + echo "llvm-cov didn't show the expected output in fuzzing" + exit 1 +fi +echo -n FUZA > CORPUS/FUZA && ./a.out CORPUS/* +llvm-profdata-$VERSION merge -sparse *.profraw -o default.profdata +llvm-cov-$VERSION show a.out -instr-profile=default.profdata -name=FuzzMe &> foo.log +if ! grep -q "Data\[3\] == 'Z';" foo.log; then + echo "llvm-cov didn't show the expected output in fuzzing" + exit 1 +fi +rm -rf CORPUS fuzz_me.cc StandaloneFuzzTargetMain.c + echo "Testing sanitizers ..." echo '#include From 38d4c89035e716c83d8c4f4a3c55c7a790938992 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 20 Oct 2019 18:40:16 +0200 Subject: [PATCH 4/4] unpack script for 9 --- debian/unpack.sh | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/debian/unpack.sh b/debian/unpack.sh index 5f6a5b20..3b521a70 100644 --- a/debian/unpack.sh +++ b/debian/unpack.sh @@ -1,28 +1,16 @@ set -e ORIG_VERSION=9 MAJOR_VERSION=9 # 8.0.1 -SVN_REV=`ls -1 *9_$MAJOR_VERSION*svn*bz2 | tail -1|perl -ne 'print "$1\n" if /svn(\d+)/;' | sort -ru` +REV=`ls -1 *$ORIG_VERSION_$MAJOR_VERSION*~+*xz | tail -1|perl -ne 'print "$1\n" if /~\+(.*)\.orig/;' | sort -ru` + #SVN_REV=347285 -VERSION=svn$SVN_REV +VERSION=$REV +echo $VERSION #VERSION=+rc3 -LLVM_ARCHIVE=llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig.tar.bz2 +LLVM_ARCHIVE=llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~+$VERSION.orig.tar.xz echo "unpack of $LLVM_ARCHIVE" -tar jxf $LLVM_ARCHIVE -cd llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION/ || ( echo "Bad SVN_REV:\"$SVN_REV\"" && exit 1 ) -for f in ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-clang.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-clang-tools-extra.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-compiler-rt.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-lld.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-lldb.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-polly.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-libcxxabi.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-libcxx.tar.bz2 ../llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~$VERSION.orig-openmp.tar.bz2; do - echo "Unpack of $f" - tar jxf $f - done +tar Jxf $LLVM_ARCHIVE +cd llvm-toolchain-${ORIG_VERSION}_$MAJOR_VERSION~+$VERSION/ -ln -s clang_$MAJOR_VERSION~$VERSION clang -ln -s clang-tools-extra_$MAJOR_VERSION~$VERSION clang-tools-extra -ln -s compiler-rt_$MAJOR_VERSION~$VERSION compiler-rt -ln -s polly_$MAJOR_VERSION~$VERSION polly -ln -s lldb_$MAJOR_VERSION~$VERSION lldb -ln -s lld_$MAJOR_VERSION~$VERSION lld -ln -s openmp_$MAJOR_VERSION~$VERSION openmp -ln -s libcxx_$MAJOR_VERSION~$VERSION libcxx -ln -s libcxxabi_$MAJOR_VERSION~$VERSION libcxxabi - -cp -R ../9/debian . +cp -R ../snapshot/debian . QUILT_PATCHES=debian/patches/ quilt push -a --fuzz=0