draft fuzzer infrastructure
diff --git a/tests/tests-c-compiler/check-assembly.sh b/tests/tests-c-compiler/check-assembly.sh
index a9fb559..3643d79 100755
--- a/tests/tests-c-compiler/check-assembly.sh
+++ b/tests/tests-c-compiler/check-assembly.sh
@@ -39,6 +39,7 @@
fi
args=$(echo "$source_short" | sed -E -e 's/\.c+$//')
+source_obj=$(echo "$source_short" | sed -E -e 's/\.c+$/.o/')
OFS=$IFS
IFS="."
@@ -57,6 +58,13 @@
mkdir -p "${testdir}"
ln -fns "../${source_full}" "${testdir}"
+if test "${LIBFUZZER_CFLAGS}" && grep LLVMFuzzer ${source_full} > /dev/null;
+then
+ MAKE_FUZZER=yes
+else
+ MAKE_FUZZER=no
+fi
+
asn_module=$(echo "${abs_top_srcdir}/tests/tests-asn1c-compiler/${testno}"-*.asn1)
AUTOGENERATED="# This file is autogenerated by $0 ${source_full} ${AFLAGS}"
@@ -69,6 +77,7 @@
CFLAGS = \${COMMON_FLAGS} ${CFLAGS:-} -g -O1
CFLAGS += -DSRCDIR=../${srcdir} ${CODECS_FLAGS}
CXXFLAGS = \${CFLAGS} ${CXXFLAGS}
+LIBFUZZER_CFLAGS = ${LIBFUZZER_CFLAGS}
LDFLAGS = ${LDFLAGS:-}
CC ?= ${CC}
@@ -90,10 +99,34 @@
rm -f converter-sample.c
@touch compiled-module
+TARGETS
+
+
+if [ "${MAKE_FUZZER}" != "yes" ]; then
+ CHECK_FUZZER=": # No fuzzer defined"
+cat <<TARGETS >> "${testdir}/Makefile.targets"
+.PHONY check-fuzzer:
+check-fuzzer:
+TARGETS
+else
+ CHECK_FUZZER="./check-fuzzer -timeout=3 -max_total_time=60 -max-len 512 -detect_leaks=1"
+cat <<TARGETS >> "${testdir}/Makefile.targets"
+check-fuzzer: \$(OBJS)
+ rm -f ${source_obj}
+ \$(CC) \$(CFLAGS) \$(LIBFUZZER_CFLAGS) -c -o ${source_obj} ${source_short}
+ \$(CC) \$(CFLAGS) \$(LIBFUZZER_CFLAGS) \$(LDFLAGS) -o check-fuzzer \$(OBJS)
+ rm -f ${source_obj}
+TARGETS
+fi
+
+cat <<TARGETS >> "${testdir}/Makefile.targets"
+
check-succeeded: compiled-module
\$(MAKE) check-executable
+ \$(MAKE) check-fuzzer
@rm -f check-succeeded
./check-executable
+ ${CHECK_FUZZER}
@touch check-succeeded
check: check-succeeded
@@ -112,14 +145,18 @@
${AUTOGENERATED}
SRCS_C!=find . -name \*.c
SRCS_CXX!=find . -name \*.cc
+ SRCS=\$(SRCS_C) \$(SRCS_CXX)
OBJS=\${SRCS_C:.c=.o} ${SRCS_CXX:.cc=.o}
.sinclude <Makefile.targets>
OBJECTS
else
cat <<-OBJECTS > ${make_file}
${AUTOGENERATED}
- OBJS =\$(patsubst %.c,%.o,\$(wildcard *.c))
- OBJS+=\$(patsubst %.cc,%.o,\$(wildcard *.cc))
+ SRCS_C := \$(wildcard *.c)
+ SRCS_CXX := \$(wildcard *.cc)
+ SRCS = \$(SRCS_C) \$(SRCS_CXX)
+ OBJS =\$(patsubst %.c,%.o,\$(SRCS_C))
+ OBJS+=\$(patsubst %.cc,%.o,\$(SRCS_CXX))
-include Makefile.targets
OBJECTS
fi