From: linD026 Date: Tue, 5 Oct 2021 02:38:40 +0000 (+0800) Subject: CI: introduce GCC static analysis X-Git-Tag: latest~88^2 X-Git-Url: https://www.ivnss.com/gitweb/?a=commitdiff_plain;h=d6e1044aa7ee35f08761077f392a4e75a83f7b52;p=lkmpg CI: introduce GCC static analysis Since GCC version 10, there has been a new option -fanalyzer for static analysis. It can make the CI pipeline more comprehensive. Also, the static analysis updates in GCC 11, but we cannot install the GCC 11 in ubuntu 20.04 straightforwardly right now, which is the GitHub workflow environment (see status-check.yaml). For this reason, we stay at the GCC 10. Close #117 Reference - https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html - https://developers.redhat.com/blog/2020/03/26/static-analysis-in-gcc-10 - https://lwn.net/Articles/870290/ - https://developers.redhat.com/blog/2021/01/28/static-analysis-updates-in-gcc-11 - https://github.com/torvalds/linux/commit/7d73c3e9c51400d3e0e755488050804e4d44737a --- 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: