1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh 2*08b48e0bSAndroid Build Coastguard Worker 3*08b48e0bSAndroid Build Coastguard Worker. ./test-pre.sh 4*08b48e0bSAndroid Build Coastguard Worker 5*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: LTO llvm_mode" 6*08b48e0bSAndroid Build Coastguard Workertest -e ../afl-clang-lto -a -e ../SanitizerCoverageLTO.so && { 7*08b48e0bSAndroid Build Coastguard Worker # on FreeBSD need to set AFL_CC 8*08b48e0bSAndroid Build Coastguard Worker test `uname -s` = 'FreeBSD' && { 9*08b48e0bSAndroid Build Coastguard Worker if type clang >/dev/null; then 10*08b48e0bSAndroid Build Coastguard Worker export AFL_CC=`command -v clang` 11*08b48e0bSAndroid Build Coastguard Worker else 12*08b48e0bSAndroid Build Coastguard Worker export AFL_CC=`$LLVM_CONFIG --bindir`/clang 13*08b48e0bSAndroid Build Coastguard Worker fi 14*08b48e0bSAndroid Build Coastguard Worker } 15*08b48e0bSAndroid Build Coastguard Worker 16*08b48e0bSAndroid Build Coastguard Worker ../afl-clang-lto -o test-instr.plain ../test-instr.c > /dev/null 2>&1 17*08b48e0bSAndroid Build Coastguard Worker test -e test-instr.plain && { 18*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] llvm_mode LTO compilation succeeded" 19*08b48e0bSAndroid Build Coastguard Worker echo 0 | AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o test-instr.plain.0 -r -- ./test-instr.plain > /dev/null 2>&1 20*08b48e0bSAndroid Build Coastguard Worker AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o test-instr.plain.1 -r -- ./test-instr.plain < /dev/null > /dev/null 2>&1 21*08b48e0bSAndroid Build Coastguard Worker test -e test-instr.plain.0 -a -e test-instr.plain.1 && { 22*08b48e0bSAndroid Build Coastguard Worker diff -q test-instr.plain.0 test-instr.plain.1 > /dev/null 2>&1 && { 23*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO instrumentation should be different on different input but is not" 24*08b48e0bSAndroid Build Coastguard Worker CODE=1 25*08b48e0bSAndroid Build Coastguard Worker } || { 26*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] llvm_mode LTO instrumentation present and working correctly" 27*08b48e0bSAndroid Build Coastguard Worker TUPLES=`echo 0|AFL_QUIET=1 ../afl-showmap -m ${MEM_LIMIT} -o /dev/null -- ./test-instr.plain 2>&1 | grep Captur | awk '{print$3}'` 28*08b48e0bSAndroid Build Coastguard Worker test "$TUPLES" -gt 2 -a "$TUPLES" -lt 7 && { 29*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] llvm_mode LTO run reported $TUPLES instrumented locations which is fine" 30*08b48e0bSAndroid Build Coastguard Worker } || { 31*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO instrumentation produces weird numbers: $TUPLES" 32*08b48e0bSAndroid Build Coastguard Worker CODE=1 33*08b48e0bSAndroid Build Coastguard Worker } 34*08b48e0bSAndroid Build Coastguard Worker } 35*08b48e0bSAndroid Build Coastguard Worker } || { 36*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO instrumentation failed" 37*08b48e0bSAndroid Build Coastguard Worker CODE=1 38*08b48e0bSAndroid Build Coastguard Worker } 39*08b48e0bSAndroid Build Coastguard Worker rm -f test-instr.plain.0 test-instr.plain.1 40*08b48e0bSAndroid Build Coastguard Worker } || { 41*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] LTO llvm_mode failed" 42*08b48e0bSAndroid Build Coastguard Worker CODE=1 43*08b48e0bSAndroid Build Coastguard Worker } 44*08b48e0bSAndroid Build Coastguard Worker rm -f test-instr.plain 45*08b48e0bSAndroid Build Coastguard Worker 46*08b48e0bSAndroid Build Coastguard Worker echo foobar.c > instrumentlist.txt 47*08b48e0bSAndroid Build Coastguard Worker AFL_DEBUG=1 AFL_LLVM_INSTRUMENT_FILE=instrumentlist.txt ../afl-clang-lto -o test-compcov test-compcov.c > test.out 2>&1 48*08b48e0bSAndroid Build Coastguard Worker test -e test-compcov && { 49*08b48e0bSAndroid Build Coastguard Worker grep -q "No instrumentation targets found" test.out && { 50*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] llvm_mode LTO instrumentlist feature works correctly" 51*08b48e0bSAndroid Build Coastguard Worker } || { 52*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 53*08b48e0bSAndroid Build Coastguard Worker cat test.out 54*08b48e0bSAndroid Build Coastguard Worker echo CUT------------------------------------------------------------------CUT 55*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO instrumentlist feature failed" 56*08b48e0bSAndroid Build Coastguard Worker CODE=1 57*08b48e0bSAndroid Build Coastguard Worker } 58*08b48e0bSAndroid Build Coastguard Worker } || { 59*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO instrumentlist feature compilation failed" 60*08b48e0bSAndroid Build Coastguard Worker CODE=1 61*08b48e0bSAndroid Build Coastguard Worker } 62*08b48e0bSAndroid Build Coastguard Worker rm -f test-compcov test.out instrumentlist.txt 63*08b48e0bSAndroid Build Coastguard Worker ../afl-clang-lto -o test-persistent ../utils/persistent_mode/persistent_demo.c > /dev/null 2>&1 64*08b48e0bSAndroid Build Coastguard Worker test -e test-persistent && { 65*08b48e0bSAndroid Build Coastguard Worker echo foo | AFL_QUIET=1 ../afl-showmap -m none -o /dev/null -q -r ./test-persistent && { 66*08b48e0bSAndroid Build Coastguard Worker $ECHO "$GREEN[+] llvm_mode LTO persistent mode feature works correctly" 67*08b48e0bSAndroid Build Coastguard Worker } || { 68*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO persistent mode feature failed to work" 69*08b48e0bSAndroid Build Coastguard Worker CODE=1 70*08b48e0bSAndroid Build Coastguard Worker } 71*08b48e0bSAndroid Build Coastguard Worker } || { 72*08b48e0bSAndroid Build Coastguard Worker $ECHO "$RED[!] llvm_mode LTO persistent mode feature compilation failed" 73*08b48e0bSAndroid Build Coastguard Worker CODE=1 74*08b48e0bSAndroid Build Coastguard Worker } 75*08b48e0bSAndroid Build Coastguard Worker rm -f test-persistent 76*08b48e0bSAndroid Build Coastguard Worker} || { 77*08b48e0bSAndroid Build Coastguard Worker $ECHO "$YELLOW[-] LTO llvm_mode not compiled, cannot test" 78*08b48e0bSAndroid Build Coastguard Worker INCOMPLETE=1 79*08b48e0bSAndroid Build Coastguard Worker} 80*08b48e0bSAndroid Build Coastguard Worker 81*08b48e0bSAndroid Build Coastguard Worker. ./test-post.sh 82