diff --git a/.ci/static-analysis.sh b/.ci/static-analysis.sh index 1079b59..6bb8348 100755 --- a/.ci/static-analysis.sh +++ b/.ci/static-analysis.sh @@ -60,6 +60,28 @@ function do_sparse() make -C examples clean } +function do_gcc() +{ + local GCC=$(which gcc-10) + if [ $? -ne 0 ]; then + echo "[!] gcc-10 is not installed. Failed to run static analysis with GCC." >&2 + exit 1 + fi + + make -C examples CONFIG_STATUS_CHECK_GCC=y STATUS_CHECK_GCC=$GCC 2> gcc.log + + local WARNING_COUNT=$(cat gcc.log | egrep -c " warning:" ) + local ERROR_COUNT=$(cat gcc.log | egrep -c " error:" ) + local COUNT=`expr $WARNING_COUNT + $ERROR_COUNT` + if [ $COUNT -gt 0 ]; then + echo "gcc failed: $WARNING_COUNT warning(s), $ERROR_COUNT error(s)" + cat gcc.log + exit 1 + fi + make -C examples CONFIG_STATUS_CHECK_GCC=y STATUS_CHECK_GCC=$GCC clean +} + do_cppcheck do_sparse +do_gcc exit 0 diff --git a/.github/workflows/status-check.yaml b/.github/workflows/status-check.yaml index e89a9fa..4511de1 100644 --- a/.github/workflows/status-check.yaml +++ b/.github/workflows/status-check.yaml @@ -18,6 +18,7 @@ jobs: run: | sudo apt-get install -q -y clang-format-11 sudo apt-get install -q -y cppcheck + sudo apt-get install -q -y gcc-10 .ci/check-format.sh .ci/static-analysis.sh .ci/build-n-run.sh diff --git a/examples/Makefile b/examples/Makefile index 098f20b..2c2a125 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -32,11 +32,16 @@ obj-m += ioctl.o PWD := $(CURDIR) +ifeq ($(CONFIG_STATUS_CHECK_GCC),y) +CC=$(STATUS_CHECK_GCC) +ccflags-y += -fanalyzer +endif + all: - $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules + $(MAKE) -C /lib/modules/$(shell uname -r)/build CC=$(CC) M=$(PWD) modules clean: - $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean + $(MAKE) -C /lib/modules/$(shell uname -r)/build CC=$(CC) M=$(PWD) clean $(RM) other/cat_noblock *.plist indent: