summaryrefslogtreecommitdiffstats
path: root/src/build
diff options
context:
space:
mode:
authorMegan <megan.teo@ibm.com>2019-06-25 15:17:40 -0500
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-09-11 10:53:06 -0500
commit1d4530dac35a6baddf60a3bfd454aac1949f69b6 (patch)
tree5322e1e18208364078d0e0a5f54ecdf48402fe50 /src/build
parentbafe5de9d8b538d978d9955386b5f1fd0ae1d82b (diff)
downloadtalos-hostboot-1d4530dac35a6baddf60a3bfd454aac1949f69b6.tar.gz
talos-hostboot-1d4530dac35a6baddf60a3bfd454aac1949f69b6.zip
Implement Static Analysis with cppcheck
Cppcheck static analysis tool can now be run when compiling by running: make cppcheck And it will always run when committing without stopping the commit if an error is found. This commit suppresses some false positives found in the code. A false positive can be suppressed inline by placing “// cppcheck-suppress syntaxError” in a line before the false positive., e.g.: char arr[5]; // cppcheck-suppress arrayIndexOutOfBounds arr[10] = 0; Change-Id: I9e833a153d6b04df2f8a72cd994e43922c61c2fe RTC: 201451 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79629 Reviewed-by: Zachary Clark <zach@ibm.com> Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/build')
-rw-r--r--src/build/beam/core/assert.C6
-rw-r--r--src/build/beam/core/pagemgr.C5
-rw-r--r--src/build/beam/core/stacksegment.C5
-rw-r--r--src/build/beam/hwp/mvpdRingFuncs.C5
-rw-r--r--src/build/beam/i2c/i2c.C6
-rw-r--r--src/build/beam/prdf/prdfBitKey.C5
-rw-r--r--src/build/beam/prdf/prdfPegasusConfigurator.C5
-rw-r--r--src/build/beam/targeting/targetservice.C5
-rw-r--r--src/build/citest/etc/cppcheck27
-rwxr-xr-xsrc/build/citest/setup-env1
-rw-r--r--src/build/mkrules/cc.rules.mk41
-rwxr-xr-xsrc/build/tools/build-cppcheck95
-rwxr-xr-xsrc/build/tools/pre-commit47
13 files changed, 244 insertions, 9 deletions
diff --git a/src/build/beam/core/assert.C b/src/build/beam/core/assert.C
index c7186668f..183e1847d 100644
--- a/src/build/beam/core/assert.C
+++ b/src/build/beam/core/assert.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,5 +22,7 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>ERROR5___assert_d9b551657c952063
+
>>>ERROR5___assert_941b08c17c952063
diff --git a/src/build/beam/core/pagemgr.C b/src/build/beam/core/pagemgr.C
index 54779d750..2cde4394d 100644
--- a/src/build/beam/core/pagemgr.C
+++ b/src/build/beam/core/pagemgr.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,5 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>MISTAKE5__initialize_7639026bb95510e7
>>>MISTAKE5__initialize_2d381016b95510e7
diff --git a/src/build/beam/core/stacksegment.C b/src/build/beam/core/stacksegment.C
index cfc2cf308..e7bd9eb21 100644
--- a/src/build/beam/core/stacksegment.C
+++ b/src/build/beam/core/stacksegment.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,4 +22,5 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>ERROR8_~StackSegment_b791f4a2ac177b6
diff --git a/src/build/beam/hwp/mvpdRingFuncs.C b/src/build/beam/hwp/mvpdRingFuncs.C
index 5c113e990..50f58dc83 100644
--- a/src/build/beam/hwp/mvpdRingFuncs.C
+++ b/src/build/beam/hwp/mvpdRingFuncs.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,5 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>MISTAKE17_mbvpdValidateRecordKeyword_d149f58f1505
>>>MISTAKE5_mbvpdRingFunc_b48fca4f6c313e21
diff --git a/src/build/beam/i2c/i2c.C b/src/build/beam/i2c/i2c.C
index 6bc1a97f4..1d2632b8f 100644
--- a/src/build/beam/i2c/i2c.C
+++ b/src/build/beam/i2c/i2c.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,4 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>MISTAKE17_i2cSetupMasters_8697e17e1505
+
diff --git a/src/build/beam/prdf/prdfBitKey.C b/src/build/beam/prdf/prdfBitKey.C
index b1618ebe9..0d9d67938 100644
--- a/src/build/beam/prdf/prdfBitKey.C
+++ b/src/build/beam/prdf/prdfBitKey.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,5 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>MISTAKE17_operator==_f7028aed1505
>>>MISTAKE17_operator==_70cd34271505
diff --git a/src/build/beam/prdf/prdfPegasusConfigurator.C b/src/build/beam/prdf/prdfPegasusConfigurator.C
index 956ed90b2..e19a1b881 100644
--- a/src/build/beam/prdf/prdfPegasusConfigurator.C
+++ b/src/build/beam/prdf/prdfPegasusConfigurator.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,5 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>MISTAKE17_addPllDomainsToSystem_954f5e401505
>>>MISTAKE17_addPllDomainsToSystem_c01c04751505
diff --git a/src/build/beam/targeting/targetservice.C b/src/build/beam/targeting/targetservice.C
index 4e069351d..029876273 100644
--- a/src/build/beam/targeting/targetservice.C
+++ b/src/build/beam/targeting/targetservice.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2014 */
+/* Contributors Listed Below - COPYRIGHT 2011,2019 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -20,5 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
+// cppcheck-suppress syntaxError
>>>MISTAKE5_queryMasterProcChipTargetHandle_2745d8d11505
>>>MISTAKE5_queryMasterProcChipTargetHandle_da38b67e1505
diff --git a/src/build/citest/etc/cppcheck b/src/build/citest/etc/cppcheck
new file mode 100644
index 000000000..f92ac3604
--- /dev/null
+++ b/src/build/citest/etc/cppcheck
@@ -0,0 +1,27 @@
+#!/bin/bash
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/citest/etc/cppcheck $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2019
+# [+] International Business Machines Corp.
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# IBM_PROLOG_END_TAG
+
+export CPPCHECK_COMMIT="4939e0c3086151033bd491bb2df72f7728a4c037"
diff --git a/src/build/citest/setup-env b/src/build/citest/setup-env
index 21133ef67..e82032d8a 100755
--- a/src/build/citest/setup-env
+++ b/src/build/citest/setup-env
@@ -26,6 +26,7 @@
export CITESTPATH=${PROJECT_ROOT}/src/build/citest
export PATH=${CITESTPATH}:${PATH}
+export CXXPATH=/opt/rh/devtoolset-3/root/usr/bin
# Determine backing build.
export BACKING_BUILD=`cat ${CITESTPATH}/etc/bbuild`
diff --git a/src/build/mkrules/cc.rules.mk b/src/build/mkrules/cc.rules.mk
index 584b11db4..2d465e2e3 100644
--- a/src/build/mkrules/cc.rules.mk
+++ b/src/build/mkrules/cc.rules.mk
@@ -54,6 +54,20 @@ $(OBJDIR)/%.o : %.C
-o $@.trace $(INCLUDE_DIRS) -iquote .
$(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS)
@rm $@.trace
+ $(C2) " CPPCHECK $(notdir $<)"
+# TODO RTC 215692
+# The following script is used to run the cppcheck tool when enabled. If one
+# cppcheck error is found, the make process will stop here, the error will be
+# printed out to the terminal and stored in a file .`basename $<`.cppcheck in
+# the directory where the original file is located
+ $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \
+ if [ "$$exit_code" -ne 1 ]; then \
+ rm -f .`basename $<`.cppcheck; \
+ if [ "$$exit_code" -eq 127 ]; then \
+# Error code 127 means that the command timed-out. We do not fail for timeouts.\
+ exit_code=0; \
+ fi; \
+ fi; exit "$$exit_code"
# Compiling *.cc files
$(OBJDIR)/%.o : %.cc
@@ -63,6 +77,15 @@ $(OBJDIR)/%.o : %.cc
$(INCLUDE_DIRS) -iquote .
$(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS)
@rm $@.trace
+ $(C2) " CPPCHECK $(notdir $<)"
+# TODO RTC 215692
+ $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \
+ if [ "$$exit_code" -ne 1 ]; then \
+ rm -f .`basename $<`.cppcheck; \
+ if [ "$$exit_code" -eq 127 ]; then \
+ exit_code=0; \
+ fi; \
+ fi; exit "$$exit_code"
$(OBJDIR)/%.o : %.c
@@ -73,10 +96,28 @@ ifndef CC_OVERRIDE
$(C2) " CC $(notdir $<)"
$(C1)$(CC) -c $(call FLAGS_FILTER, $(CFLAGS), $<) $(SOURCE_FILE) \
-o $@.trace $(INCLUDE_DIRS) -iquote .
+ $(C2) " CPPCHECK $(notdir $<)"
+# TODO RTC 215692
+ $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(C_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \
+ if [ "$$exit_code" -ne 1 ]; then \
+ rm -f .`basename $<`.cppcheck; \
+ if [ "$$exit_code" -eq 127 ]; then \
+ exit_code=0; \
+ fi; \
+ fi; exit "$$exit_code"
else
$(C2) " CXX $(notdir $<)"
$(C1)$(CXX) -c $(call FLAGS_FILTER, $(CXXFLAGS), $<) $(SOURCE_FILE) \
-o $@.trace $(INCLUDE_DIRS) -iquote .
+ $(C2) " CPPCHECK $(notdir $<)"
+# TODO RTC 215692
+ $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \
+ if [ "$$exit_code" -ne 1 ]; then \
+ rm -f .`basename $<`.cppcheck; \
+ if [ "$$exit_code" -eq 127 ]; then \
+ exit_code=0; \
+ fi; \
+ fi; exit "$$exit_code"
endif
$(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS)
@rm $@.trace
diff --git a/src/build/tools/build-cppcheck b/src/build/tools/build-cppcheck
new file mode 100755
index 000000000..8e19ed429
--- /dev/null
+++ b/src/build/tools/build-cppcheck
@@ -0,0 +1,95 @@
+#!/bin/bash -e
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/tools/build-cppcheck $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2019
+# [+] International Business Machines Corp.
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# IBM_PROLOG_END_TAG
+
+source $PROJECT_ROOT/src/build/citest/etc/cppcheck
+
+update_toolconfig(){
+ echo "commit: $CPPCHECK_COMMIT"
+ echo "gcc version: $(gcc -dumpversion)"
+ echo "S: $(uname -o)"
+ echo "arch: $(uname -m)"
+ echo "$(lsb_release -i)"
+ echo "$(lsb_release -r)"
+}
+
+if [ -n "${OPENPOWER_BUILD}" ]; then
+ exit
+fi
+
+cd $PROJECT_ROOT/src/build/tools
+
+if [[ ! -d "cpptools" ]]; then
+ mkdir cpptools
+fi
+
+cd cpptools
+if [[ ! -d "cppcheck" ]]; then
+ # cppcheck folder does not exist, clone repo for the first time
+ git clone git@github.com:danmar/cppcheck.git
+ cd cppcheck
+ git reset --hard $CPPCHECK_COMMIT #update to cppcheck commit
+ update_toolconfig >.cpp_toollevel
+ SHOULDMAKE=1
+else
+ cd cppcheck
+ if ! cmp -s .cpp_toollevel <(update_toolconfig) ; then
+ # cppcheck repo is not at the
+ # level set in $PROJECT_ROOT/src/build/citest/etc/cppcheck
+ if ! git fetch origin; then
+ cd $PROJECT_ROOT/src/build/tools/cpptools
+ rm -rf cppcheck
+ git clone git@github.com:danmar/cppcheck.git
+ cd cppcheck
+ fi
+ git reset --hard $CPPCHECK_COMMIT
+ update_toolconfig >.cpp_toollevel
+
+ SHOULDMAKE=1
+ fi
+ if [[ ! -f "cppcheck" ]]; then
+ SHOULDMAKE=1
+ fi
+fi
+
+if [ "${SHOULDMAKE}" ]; then
+
+ # Check if CXX is set, if it is not then try to find it with CXXPATH
+ # if CXXPATH does not exist, default to host's g++
+ if [ -z "$CXX" ]; then
+ if [ -z "${CXXPATH}" ]; then
+ export CXX=g++
+ else
+ export CXX=${CXXPATH}/g++
+ fi
+ fi
+
+ make
+
+fi
+
+cd $PROJECT_ROOT
+
+
diff --git a/src/build/tools/pre-commit b/src/build/tools/pre-commit
index 3dc621bb3..e679728c0 100755
--- a/src/build/tools/pre-commit
+++ b/src/build/tools/pre-commit
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2017
+# Contributors Listed Below - COPYRIGHT 2011,2019
# [+] International Business Machines Corp.
#
#
@@ -35,3 +35,48 @@ else
echo "For more info run './hb --help'"
exit -1
fi
+
+# Run cppcheck if variable is set, if not exit here
+if [[ $DOCPPCHECK -ne 1 ]]; then
+ exit 0
+fi
+
+echo "Running CPPCHECK"
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # This is the hash of the default empty tree in Git.
+ # If for some reason HEAD is not set, then diff'ing against this is like
+ # diff'ing against the very first commit.
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+${TOOLSDIR}/build-cppcheck
+CPPCHECKTOOL=${TOOLSDIR}/cpptools/cppcheck/cppcheck
+CPPCHECKFLAGS="--inline-suppr --error-exitcode=1"
+CPPCHECK=" ${CPPCHECKTOOL} ${CPPCHECKFLAGS}"
+
+for file in $(git diff-index --cached $against | \
+ grep -E '[MA].*\.(C|c|cpp|cc|cxx)$' | cut -f 2)
+do
+
+ dir="$(dirname $file)"
+ filename="$(basename $file)"
+
+ # TODO RTC 215692
+ # The following command checks for cppcheck errors. All cppcheck errors are
+ # printed to the terminal and stored to a file .${filename}.cppcheck.
+ set -o pipefail && cd ${dir} && timeout 2m ${CPPCHECK} $filename 2>&1 | tee .${filename}.cppcheck; exit_code=$?; \
+ if [ "$exit_code" -ne 1 ]; then \
+ # If exit code does not equal 1 (which is the error code when a cppcheck
+ # error is found) delete the created .cppcheck file.
+ # Note that time-out fails with error code 127.
+ rm -f .${filename}.cppcheck; \
+ fi
+ cd $PROJECT_ROOT
+
+done
+
+exit 0
OpenPOWER on IntegriCloud