Back to Zephyr

GCC static analysis support

doc/develop/sca/gcc.rst

4.4.02.3 KB
Original Source

.. _gcc:

GCC static analysis support ###########################

Static analysis was introduced in GCC <https://gcc.gnu.org/>__ 10 and it is enabled with the option -fanalyzer. This option performs a much more expensive and thorough analysis of the code than traditional warnings.

Run GCC static analysis


To run GCC static analysis, :ref:west build <west-building> should be called with a -DZEPHYR_SCA_VARIANT=gcc parameter, e.g.

.. zephyr-app-commands:: :zephyr-app: samples/userspace/hello_world_user :board: qemu_x86 :gen-args: -DZEPHYR_SCA_VARIANT=gcc :goals: build :compact:

Configuring GCC static analyzer


GCC static analyzer can be controlled using specific options.

  • Options controlling the analyzer <https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html>__
  • Options controlling the diagnostic message formatting <https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html>__

.. list-table:: :header-rows: 1

    • Parameter
    • Description
    • GCC_SCA_OPTS
    • A semicolon separated list of GCC analyzer options.

These parameters can be passed on the command line, or be set as environment variables.

.. zephyr-app-commands:: :zephyr-app: samples/hello_world :board: stm32h573i_dk :gen-args: -DZEPHYR_SCA_VARIANT=gcc -DGCC_SCA_OPTS="-fdiagnostics-format=json;-fanalyzer-verbosity=3" :goals: build :compact:

.. note::

GCC static analyzer is under active development, and each new release comes with new options. This page <https://gcc.gnu.org/wiki/StaticAnalyzer>__ gives an overview of options and fix introduced with each new release of the analyzer.

Latest version of the analyzer


Since the Zephyr toolchain may not include the most recent version of the GCC static analyzer, the GCC static analysis can be run with a more recent GNU Arm embedded toolchain <https://docs.zephyrproject.org/latest/develop/toolchains/gnu_arm_embedded.html>__ to take advantage of the latest analyzer version.

.. zephyr-app-commands:: :zephyr-app: samples/hello_world :board: stm32h573i_dk :gen-args: -DZEPHYR_SCA_VARIANT=gcc -DZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb -DGNUARMEMB_TOOLCHAIN_PATH=... :goals: build :compact: