xref: /aosp_15_r20/external/AFLplusplus/test/test-performance.sh (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1*08b48e0bSAndroid Build Coastguard Worker#!/bin/bash
2*08b48e0bSAndroid Build Coastguard Worker
3*08b48e0bSAndroid Build Coastguard Worker# if you want a specific performance file (e.g. to compare features to another)
4*08b48e0bSAndroid Build Coastguard Worker# you can set the AFL_PERFORMANCE_FILE environment variable:
5*08b48e0bSAndroid Build Coastguard WorkerFILE=$AFL_PERFORMANCE_FILE
6*08b48e0bSAndroid Build Coastguard Worker# otherwise we use ~/.afl_performance
7*08b48e0bSAndroid Build Coastguard Workertest -z "$FILE" && FILE=.afl_performance
8*08b48e0bSAndroid Build Coastguard Worker
9*08b48e0bSAndroid Build Coastguard Workertest -e $FILE || {
10*08b48e0bSAndroid Build Coastguard Worker  echo Warning: This script measure the performance of AFL++ and saves the result for future comparisons into $FILE
11*08b48e0bSAndroid Build Coastguard Worker  echo Press ENTER to continue or CONTROL-C to abort
12*08b48e0bSAndroid Build Coastguard Worker  read IN
13*08b48e0bSAndroid Build Coastguard Worker}
14*08b48e0bSAndroid Build Coastguard Worker
15*08b48e0bSAndroid Build Coastguard Workertest -e ./test-performance.sh || { echo Error: this script must be run from the directory in which it lies. ; exit 1 ; }
16*08b48e0bSAndroid Build Coastguard Worker
17*08b48e0bSAndroid Build Coastguard Workerexport AFL_QUIET=1
18*08b48e0bSAndroid Build Coastguard Workerexport AFL_PATH=`pwd`/..
19*08b48e0bSAndroid Build Coastguard Worker
20*08b48e0bSAndroid Build Coastguard Workerunset AFL_EXIT_WHEN_DONE
21*08b48e0bSAndroid Build Coastguard Workerunset AFL_EXIT_ON_TIME
22*08b48e0bSAndroid Build Coastguard Workerunset AFL_SKIP_CPUFREQ
23*08b48e0bSAndroid Build Coastguard Workerunset AFL_DEBUG
24*08b48e0bSAndroid Build Coastguard Workerunset AFL_HARDEN
25*08b48e0bSAndroid Build Coastguard Workerunset AFL_USE_ASAN
26*08b48e0bSAndroid Build Coastguard Workerunset AFL_USE_MSAN
27*08b48e0bSAndroid Build Coastguard Workerunset AFL_CC
28*08b48e0bSAndroid Build Coastguard Workerunset AFL_PRELOAD
29*08b48e0bSAndroid Build Coastguard Workerunset AFL_GCC_INSTRUMENT_FILE
30*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_INSTRUMENT_FILE
31*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_INSTRIM
32*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_LAF_SPLIT_SWITCHES
33*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_LAF_TRANSFORM_COMPARES
34*08b48e0bSAndroid Build Coastguard Workerunset AFL_LLVM_LAF_SPLIT_COMPARES
35*08b48e0bSAndroid Build Coastguard Worker
36*08b48e0bSAndroid Build Coastguard Worker# on OpenBSD we need to work with llvm from /usr/local/bin
37*08b48e0bSAndroid Build Coastguard Workertest -e /usr/local/bin/opt && {
38*08b48e0bSAndroid Build Coastguard Worker  export PATH=/usr/local/bin:${PATH}
39*08b48e0bSAndroid Build Coastguard Worker}
40*08b48e0bSAndroid Build Coastguard Worker# on MacOS X we prefer afl-clang over afl-gcc, because
41*08b48e0bSAndroid Build Coastguard Worker# afl-gcc does not work there
42*08b48e0bSAndroid Build Coastguard Workertest `uname -s` = 'Darwin' -o `uname -s` = 'FreeBSD' && {
43*08b48e0bSAndroid Build Coastguard Worker  AFL_GCC=afl-clang
44*08b48e0bSAndroid Build Coastguard Worker  CC=clang
45*08b48e0bSAndroid Build Coastguard Worker} || {
46*08b48e0bSAndroid Build Coastguard Worker  AFL_GCC=afl-gcc
47*08b48e0bSAndroid Build Coastguard Worker  CC=gcc
48*08b48e0bSAndroid Build Coastguard Worker}
49*08b48e0bSAndroid Build Coastguard Worker
50*08b48e0bSAndroid Build Coastguard WorkerECHO="printf %b\\n"
51*08b48e0bSAndroid Build Coastguard Worker$ECHO \\101 2>&1 | grep -qE '^A' || {
52*08b48e0bSAndroid Build Coastguard Worker  ECHO=
53*08b48e0bSAndroid Build Coastguard Worker  test -e /bin/printf && {
54*08b48e0bSAndroid Build Coastguard Worker    ECHO="/bin/printf %b\\n"
55*08b48e0bSAndroid Build Coastguard Worker    $ECHO '\\101' 2>&1 | grep -qE '^A' || ECHO=
56*08b48e0bSAndroid Build Coastguard Worker  }
57*08b48e0bSAndroid Build Coastguard Worker}
58*08b48e0bSAndroid Build Coastguard Workertest -z "$ECHO" && { printf Error: printf command does not support octal character codes ; exit 1 ; }
59*08b48e0bSAndroid Build Coastguard Worker
60*08b48e0bSAndroid Build Coastguard WorkerGREY="\\033[1;90m"
61*08b48e0bSAndroid Build Coastguard WorkerBLUE="\\033[1;94m"
62*08b48e0bSAndroid Build Coastguard WorkerGREEN="\\033[0;32m"
63*08b48e0bSAndroid Build Coastguard WorkerRED="\\033[0;31m"
64*08b48e0bSAndroid Build Coastguard WorkerYELLOW="\\033[1;93m"
65*08b48e0bSAndroid Build Coastguard WorkerRESET="\\033[0m"
66*08b48e0bSAndroid Build Coastguard Worker
67*08b48e0bSAndroid Build Coastguard WorkerMEM_LIMIT=500
68*08b48e0bSAndroid Build Coastguard Worker
69*08b48e0bSAndroid Build Coastguard Workertouch $FILE || { echo Error: can not write to $FILE ; exit 1 ; }
70*08b48e0bSAndroid Build Coastguard Worker
71*08b48e0bSAndroid Build Coastguard Workerecho Warning: this script is setting performance parameters with afl-system-config
72*08b48e0bSAndroid Build Coastguard Workersleep 1
73*08b48e0bSAndroid Build Coastguard Workerafl-system-config > /dev/null 2>&1
74*08b48e0bSAndroid Build Coastguard Workerecho Performance settings applied.
75*08b48e0bSAndroid Build Coastguard Workerecho
76*08b48e0bSAndroid Build Coastguard Worker
77*08b48e0bSAndroid Build Coastguard Worker$ECHO "${RESET}${GREY}[*] starting AFL++ performance test framework ..."
78*08b48e0bSAndroid Build Coastguard Worker
79*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: ${AFL_GCC}"
80*08b48e0bSAndroid Build Coastguard WorkerGCC=x
81*08b48e0bSAndroid Build Coastguard Workertest -e ../${AFL_GCC} -a -e ../afl-fuzz && {
82*08b48e0bSAndroid Build Coastguard Worker  ../${AFL_GCC} -o test-instr.plain ../test-instr.c > /dev/null 2>&1
83*08b48e0bSAndroid Build Coastguard Worker  test -e test-instr.plain && {
84*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREEN[+] ${AFL_GCC} compilation succeeded"
85*08b48e0bSAndroid Build Coastguard Worker    mkdir -p in
86*08b48e0bSAndroid Build Coastguard Worker    echo 0 > in/in
87*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREY[*] running afl-fuzz for ${AFL_GCC} for 30 seconds"
88*08b48e0bSAndroid Build Coastguard Worker    {
89*08b48e0bSAndroid Build Coastguard Worker      ../afl-fuzz -V 30 -s 123 -m ${MEM_LIMIT} -i in -o out-gcc -- ./test-instr.plain
90*08b48e0bSAndroid Build Coastguard Worker    } >>errors 2>&1
91*08b48e0bSAndroid Build Coastguard Worker    test -n "$( ls out-gcc/default/queue/id:000002* 2> /dev/null )" && {
92*08b48e0bSAndroid Build Coastguard Worker      GCC=`grep execs_done out-gcc/default/fuzzer_stats | awk '{print$3}'`
93*08b48e0bSAndroid Build Coastguard Worker    } || {
94*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
95*08b48e0bSAndroid Build Coastguard Worker        cat errors
96*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
97*08b48e0bSAndroid Build Coastguard Worker      $ECHO "$RED[!] afl-fuzz is not working correctly with ${AFL_GCC}"
98*08b48e0bSAndroid Build Coastguard Worker    }
99*08b48e0bSAndroid Build Coastguard Worker    rm -rf in out-gcc errors test-instr.plain
100*08b48e0bSAndroid Build Coastguard Worker  } || $ECHO "$RED[!] ${AFL_GCC} instrumentation failed"
101*08b48e0bSAndroid Build Coastguard Worker} || $ECHO "$YELLOW[-] afl is not compiled, cannot test"
102*08b48e0bSAndroid Build Coastguard Worker
103*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: llvm_mode"
104*08b48e0bSAndroid Build Coastguard WorkerLLVM=x
105*08b48e0bSAndroid Build Coastguard Workertest -e ../afl-clang-fast -a -e ../afl-fuzz && {
106*08b48e0bSAndroid Build Coastguard Worker  ../afl-clang-fast -o test-instr.llvm ../test-instr.c > /dev/null 2>&1
107*08b48e0bSAndroid Build Coastguard Worker  test -e test-instr.llvm && {
108*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREEN[+] llvm_mode compilation succeeded"
109*08b48e0bSAndroid Build Coastguard Worker    mkdir -p in
110*08b48e0bSAndroid Build Coastguard Worker    echo 0 > in/in
111*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREY[*] running afl-fuzz for llvm_mode for 30 seconds"
112*08b48e0bSAndroid Build Coastguard Worker    {
113*08b48e0bSAndroid Build Coastguard Worker      ../afl-fuzz -V 30 -s 123 -m ${MEM_LIMIT} -i in -o out-llvm -- ./test-instr.llvm
114*08b48e0bSAndroid Build Coastguard Worker    } >>errors 2>&1
115*08b48e0bSAndroid Build Coastguard Worker    test -n "$( ls out-llvm/default/queue/id:000002* 2> /dev/null )" && {
116*08b48e0bSAndroid Build Coastguard Worker      LLVM=`grep execs_done out-llvm/default/fuzzer_stats | awk '{print$3}'`
117*08b48e0bSAndroid Build Coastguard Worker    } || {
118*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
119*08b48e0bSAndroid Build Coastguard Worker        cat errors
120*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
121*08b48e0bSAndroid Build Coastguard Worker      $ECHO "$RED[!] afl-fuzz is not working correctly with llvm_mode"
122*08b48e0bSAndroid Build Coastguard Worker    }
123*08b48e0bSAndroid Build Coastguard Worker    rm -rf in out-llvm errors test-instr.llvm
124*08b48e0bSAndroid Build Coastguard Worker  } || $ECHO "$RED[!] llvm_mode instrumentation failed"
125*08b48e0bSAndroid Build Coastguard Worker} || $ECHO "$YELLOW[-] llvm_mode is not compiled, cannot test"
126*08b48e0bSAndroid Build Coastguard Worker
127*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: gcc_plugin"
128*08b48e0bSAndroid Build Coastguard WorkerGCCP=x
129*08b48e0bSAndroid Build Coastguard Workertest -e ../afl-gcc-fast -a -e ../afl-fuzz && {
130*08b48e0bSAndroid Build Coastguard Worker  ../afl-gcc-fast -o test-instr.gccp ../test-instr.c > /dev/null 2>&1
131*08b48e0bSAndroid Build Coastguard Worker  test -e test-instr.gccp && {
132*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREEN[+] gcc_plugin compilation succeeded"
133*08b48e0bSAndroid Build Coastguard Worker    mkdir -p in
134*08b48e0bSAndroid Build Coastguard Worker    echo 0 > in/in
135*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREY[*] running afl-fuzz for gcc_plugin for 30 seconds"
136*08b48e0bSAndroid Build Coastguard Worker    {
137*08b48e0bSAndroid Build Coastguard Worker      ../afl-fuzz -V 30 -s 123 -m ${MEM_LIMIT} -i in -o out-gccp -- ./test-instr.gccp
138*08b48e0bSAndroid Build Coastguard Worker    } >>errors 2>&1
139*08b48e0bSAndroid Build Coastguard Worker    test -n "$( ls out-gccp/default/queue/id:000002* 2> /dev/null )" && {
140*08b48e0bSAndroid Build Coastguard Worker      GCCP=`grep execs_done out-gccp/default/fuzzer_stats | awk '{print$3}'`
141*08b48e0bSAndroid Build Coastguard Worker    } || {
142*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
143*08b48e0bSAndroid Build Coastguard Worker        cat errors
144*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
145*08b48e0bSAndroid Build Coastguard Worker      $ECHO "$RED[!] afl-fuzz is not working correctly with gcc_plugin"
146*08b48e0bSAndroid Build Coastguard Worker    }
147*08b48e0bSAndroid Build Coastguard Worker    rm -rf in out-gccp errors test-instr.gccp
148*08b48e0bSAndroid Build Coastguard Worker  } || $ECHO "$RED[!] gcc_plugin instrumentation failed"
149*08b48e0bSAndroid Build Coastguard Worker} || $ECHO "$YELLOW[-] gcc_plugin is not compiled, cannot test"
150*08b48e0bSAndroid Build Coastguard Worker
151*08b48e0bSAndroid Build Coastguard Worker$ECHO "$BLUE[*] Testing: qemu_mode"
152*08b48e0bSAndroid Build Coastguard WorkerQEMU=x
153*08b48e0bSAndroid Build Coastguard Workertest -e ../afl-qemu-trace -a -e ../afl-fuzz && {
154*08b48e0bSAndroid Build Coastguard Worker  $CC -o test-instr.qemu ../test-instr.c > /dev/null 2>&1
155*08b48e0bSAndroid Build Coastguard Worker  test -e test-instr.qemu && {
156*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREEN[+] native compilation with cc succeeded"
157*08b48e0bSAndroid Build Coastguard Worker    mkdir -p in
158*08b48e0bSAndroid Build Coastguard Worker    echo 0 > in/in
159*08b48e0bSAndroid Build Coastguard Worker    $ECHO "$GREY[*] running afl-fuzz for qemu_mode for 30 seconds"
160*08b48e0bSAndroid Build Coastguard Worker    {
161*08b48e0bSAndroid Build Coastguard Worker      ../afl-fuzz -Q -V 30 -s 123 -m ${MEM_LIMIT} -i in -o out-qemu -- ./test-instr.qemu
162*08b48e0bSAndroid Build Coastguard Worker    } >>errors 2>&1
163*08b48e0bSAndroid Build Coastguard Worker    test -n "$( ls out-qemu/default/queue/id:000002* 2> /dev/null )" && {
164*08b48e0bSAndroid Build Coastguard Worker      QEMU=`grep execs_done out-qemu/default/fuzzer_stats | awk '{print$3}'`
165*08b48e0bSAndroid Build Coastguard Worker    } || {
166*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
167*08b48e0bSAndroid Build Coastguard Worker        echo ../afl-fuzz -Q -V 30 -s 123 -m ${MEM_LIMIT} -i in -o out-qemu -- ./test-instr.qemu
168*08b48e0bSAndroid Build Coastguard Worker        cat errors
169*08b48e0bSAndroid Build Coastguard Worker        echo CUT----------------------------------------------------------------
170*08b48e0bSAndroid Build Coastguard Worker      $ECHO "$RED[!] afl-fuzz is not working correctly with qemu_mode"
171*08b48e0bSAndroid Build Coastguard Worker    }
172*08b48e0bSAndroid Build Coastguard Worker    rm -rf in out-qemu errors test-instr.qemu
173*08b48e0bSAndroid Build Coastguard Worker  } || $ECHO "$RED[!] qemu_mode instrumentation failed"
174*08b48e0bSAndroid Build Coastguard Worker} || $ECHO "$YELLOW[-] qemu_mode is not compiled, cannot test"
175*08b48e0bSAndroid Build Coastguard Worker
176*08b48e0bSAndroid Build Coastguard WorkerLOW_GCC=
177*08b48e0bSAndroid Build Coastguard WorkerHIGH_GCC=
178*08b48e0bSAndroid Build Coastguard WorkerLAST_GCC=
179*08b48e0bSAndroid Build Coastguard WorkerLOW_LLVM=
180*08b48e0bSAndroid Build Coastguard WorkerHIGH_LLVM=
181*08b48e0bSAndroid Build Coastguard WorkerLAST_LLVM=
182*08b48e0bSAndroid Build Coastguard WorkerLOW_GCCP=
183*08b48e0bSAndroid Build Coastguard WorkerHIGH_GCCP=
184*08b48e0bSAndroid Build Coastguard WorkerLAST_GCCP=
185*08b48e0bSAndroid Build Coastguard WorkerLOW_QEMU=
186*08b48e0bSAndroid Build Coastguard WorkerHIGH_QEMU=
187*08b48e0bSAndroid Build Coastguard WorkerLAST_QEMU=
188*08b48e0bSAndroid Build Coastguard Worker
189*08b48e0bSAndroid Build Coastguard Workertest -s $FILE && {
190*08b48e0bSAndroid Build Coastguard Worker  while read LINE; do
191*08b48e0bSAndroid Build Coastguard Worker    G=`echo $LINE | awk '{print$1}'`
192*08b48e0bSAndroid Build Coastguard Worker    L=`echo $LINE | awk '{print$2}'`
193*08b48e0bSAndroid Build Coastguard Worker    P=`echo $LINE | awk '{print$3}'`
194*08b48e0bSAndroid Build Coastguard Worker    Q=`echo $LINE | awk '{print$4}'`
195*08b48e0bSAndroid Build Coastguard Worker    test "$G" = x && G=
196*08b48e0bSAndroid Build Coastguard Worker    test "$L" = x && L=
197*08b48e0bSAndroid Build Coastguard Worker    test "$P" = x && P=
198*08b48e0bSAndroid Build Coastguard Worker    test "$Q" = x && Q=
199*08b48e0bSAndroid Build Coastguard Worker    test -n "$G" && LAST_GCC=$G
200*08b48e0bSAndroid Build Coastguard Worker    test -n "$L" && LAST_LLVM=$L
201*08b48e0bSAndroid Build Coastguard Worker    test -n "$P" && LAST_GCCP=$P
202*08b48e0bSAndroid Build Coastguard Worker    test -n "$Q" && LAST_QEMU=$Q
203*08b48e0bSAndroid Build Coastguard Worker    test -n "$G" -a -z "$LOW_GCC" && LOW_GCC=$G || {
204*08b48e0bSAndroid Build Coastguard Worker      test -n "$G" -a "$G" -lt "$LOW_GCC" 2> /dev/null && LOW_GCC=$G
205*08b48e0bSAndroid Build Coastguard Worker    }
206*08b48e0bSAndroid Build Coastguard Worker    test -n "$L" -a -z "$LOW_LLVM" && LOW_LLVM=$L || {
207*08b48e0bSAndroid Build Coastguard Worker      test -n "$L" -a "$L" -lt "$LOW_LLVM" 2> /dev/null && LOW_LLVM=$L
208*08b48e0bSAndroid Build Coastguard Worker    }
209*08b48e0bSAndroid Build Coastguard Worker    test -n "$P" -a -z "$LOW_GCCP" && LOW_GCCP=$P || {
210*08b48e0bSAndroid Build Coastguard Worker      test -n "$P" -a "$P" -lt "$LOW_GCCP" 2> /dev/null && LOW_GCCP=$P
211*08b48e0bSAndroid Build Coastguard Worker    }
212*08b48e0bSAndroid Build Coastguard Worker    test -n "$Q" -a -z "$LOW_QEMU" && LOW_QEMU=$Q || {
213*08b48e0bSAndroid Build Coastguard Worker      test -n "$Q" -a "$Q" -lt "$LOW_QEMU" 2> /dev/null && LOW_QEMU=$Q
214*08b48e0bSAndroid Build Coastguard Worker    }
215*08b48e0bSAndroid Build Coastguard Worker    test -n "$G" -a -z "$HIGH_GCC" && HIGH_GCC=$G || {
216*08b48e0bSAndroid Build Coastguard Worker      test -n "$G" -a "$G" -gt "$HIGH_GCC" 2> /dev/null && HIGH_GCC=$G
217*08b48e0bSAndroid Build Coastguard Worker    }
218*08b48e0bSAndroid Build Coastguard Worker    test -n "$L" -a -z "$HIGH_LLVM" && HIGH_LLVM=$L || {
219*08b48e0bSAndroid Build Coastguard Worker      test -n "$L" -a "$L" -gt "$HIGH_LLVM" 2> /dev/null && HIGH_LLVM=$L
220*08b48e0bSAndroid Build Coastguard Worker    }
221*08b48e0bSAndroid Build Coastguard Worker    test -n "$P" -a -z "$HIGH_GCCP" && HIGH_GCCP=$P || {
222*08b48e0bSAndroid Build Coastguard Worker      test -n "$P" -a "$P" -gt "$HIGH_GCCP" 2> /dev/null && HIGH_GCCP=$P
223*08b48e0bSAndroid Build Coastguard Worker    }
224*08b48e0bSAndroid Build Coastguard Worker    test -n "$Q" -a -z "$HIGH_QEMU" && HIGH_QEMU=$Q || {
225*08b48e0bSAndroid Build Coastguard Worker      test -n "$Q" -a "$Q" -gt "$HIGH_QEMU" 2> /dev/null && HIGH_QEMU=$Q
226*08b48e0bSAndroid Build Coastguard Worker    }
227*08b48e0bSAndroid Build Coastguard Worker  done < $FILE
228*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$YELLOW[!] Reading saved data from $FILE completed, please compare the results:"
229*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$BLUE[!] afl-cc: lowest=$LOW_GCC highest=$HIGH_GCC last=$LAST_GCC current=$GCC"
230*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$BLUE[!] llvm_mode: lowest=$LOW_LLVM highest=$HIGH_LLVM last=$LAST_LLVM current=$LLVM"
231*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$BLUE[!] gcc_plugin: lowest=$LOW_GCCP highest=$HIGH_GCCP last=$LAST_GCCP current=$GCCP"
232*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$BLUE[!] qemu_mode: lowest=$LOW_QEMU highest=$HIGH_QEMU last=$LAST_QEMU current=$QEMU"
233*08b48e0bSAndroid Build Coastguard Worker} || {
234*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$YELLOW[!] First run, just saving data"
235*08b48e0bSAndroid Build Coastguard Worker  $ECHO "$BLUE[!] afl-gcc=$GCC  llvm_mode=$LLVM  gcc_plugin=$GCCP  qemu_mode=$QEMU"
236*08b48e0bSAndroid Build Coastguard Worker}
237*08b48e0bSAndroid Build Coastguard Workerecho "$GCC $LLVM $GCCP $QEMU" >> $FILE
238*08b48e0bSAndroid Build Coastguard Worker$ECHO "$GREY[*] done."
239*08b48e0bSAndroid Build Coastguard Worker$ECHO "$RESET"
240