|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/4] xen/scripts: add cppcheck tool to the xen-analysis.py script
> On 29 Nov 2022, at 09:42, Jan Beulich <jbeulich@xxxxxxxx> wrote:
>
> On 28.11.2022 16:37, Luca Fancellu wrote:
>>> On 28 Nov 2022, at 15:19, Jan Beulich <jbeulich@xxxxxxxx> wrote:
>>> On 28.11.2022 15:10, Luca Fancellu wrote:
>>>> Change cppcheck invocation method by using the xen-analysis.py
>>>> script using the arguments --run-cppcheck.
>>>>
>>>> Now cppcheck analysis will build Xen while the analysis is performed
>>>> on the source files, it will produce a text report and an additional
>>>> html output when the script is called with --cppcheck-html.
>>>>
>>>> With this patch cppcheck will benefit of platform configuration files
>>>> that will help it to understand the target of the compilation and
>>>> improve the analysis.
>>>>
>>>> To do so:
>>>> - remove cppcheck rules from Makefile and move them to the script.
>>>> - Update xen-analysis.py with the code to integrate cppcheck.
>>>> - merge the script merge_cppcheck_reports.py into the xen-analysis
>>>> script package and rework the code to integrate it.
>>>> - add platform configuration files for cppcheck..
>>>> - add cppcheck-cc.sh script that is a wrapper for cppcheck and it's
>>>> used as Xen compiler, it will intercept all flags given from the
>>>> make build system and it will execute cppcheck on the compiled
>>>> file together with the file compilation.
>>>> - guarded hypercall-defs.c with CPPCHECK define because cppcheck
>>>> gets confused as the file does not contain c code.
>>>> - add false-positive-cppcheck.json file
>>>> - update documentation.
>>>> - update .gitignore
>>>>
>>>> Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx>
>>>
>>> Just two and a half questions, not a full review:
>>>
>>>> ---
>>>> .gitignore | 8 +-
>>>> docs/misra/cppcheck.txt | 27 +-
>>>> docs/misra/documenting-violations.rst | 7 +-
>>>> docs/misra/false-positive-cppcheck.json | 12 +
>>>> docs/misra/xen-static-analysis.rst | 42 ++-
>>>> xen/Makefile | 116 +-------
>>>> xen/include/hypercall-defs.c | 9 +
>>>> xen/scripts/xen-analysis.py | 18 +-
>>>> xen/scripts/xen_analysis/cppcheck_analysis.py | 272 ++++++++++++++++++
>>>> .../xen_analysis/cppcheck_report_utils.py | 130 +++++++++
>>>> xen/scripts/xen_analysis/generic_analysis.py | 21 +-
>>>> xen/scripts/xen_analysis/settings.py | 77 ++++-
>>>> xen/scripts/xen_analysis/utils.py | 21 +-
>>>> xen/tools/cppcheck-cc.sh | 223 ++++++++++++++
>>>> xen/tools/cppcheck-plat/arm32-wchar_t4.xml | 17 ++
>>>> xen/tools/cppcheck-plat/arm64-wchar_t2.xml | 17 ++
>>>> xen/tools/cppcheck-plat/arm64-wchar_t4.xml | 17 ++
>>>> xen/tools/cppcheck-plat/x86_64-wchar_t2.xml | 17 ++
>>>> xen/tools/cppcheck-plat/x86_64-wchar_t4.xml | 17 ++
>>>
>>> What are these last five files about? There's nothing about them in
>>> the description afaics.
>>
>> They are cppcheck platform configuration files, they help cppcheck to
>> understand
>> the size of the types depending on the target of the compilation.
>>
>> This section in the commit message is to introduce them:
>>
>> With this patch cppcheck will benefit of platform configuration files
>> that will help it to understand the target of the compilation and
>> improve the analysis.
>>
>> Do you think I should say it differently? Or maybe say that they reside in
>> xen/tools/cppcheck-plat/ ?
>
> Perhaps (I didn't read that paragraph as relating to _anything_ in
> tree), e.g.:
>
> With this patch cppcheck will benefit from platform configuration files
> that will help it to understand the target of the compilation and
> improve the analysis. These are XML files placed in
> xen/tools/cppcheck-plat/, describing ... (I don't know what to put here).
>
> Please write the description here such that people not familiar with
> cppcheck (or more generally with any external tool) can still follow
> what you're talking about and what the patch is doing.
Ok I can modify the description to add more details
>
>>>> --- /dev/null
>>>> +++ b/xen/scripts/xen_analysis/cppcheck_analysis.py
>>>> @@ -0,0 +1,272 @@
>>>> +#!/usr/bin/env python3
>>>> +
>>>> +import os, re, shutil
>>>> +from . import settings, utils, cppcheck_report_utils
>>>> +
>>>> +class GetMakeVarsPhaseError(Exception):
>>>> + pass
>>>> +
>>>> +class CppcheckDepsPhaseError(Exception):
>>>> + pass
>>>> +
>>>> +class CppcheckReportPhaseError(Exception):
>>>> + pass
>>>> +
>>>> +CPPCHECK_BUILD_DIR = "build-dir-cppcheck"
>>>> +CPPCHECK_HTMLREPORT_OUTDIR = "cppcheck-htmlreport"
>>>> +CPPCHECK_REPORT_OUTDIR = "cppcheck-report"
>>>> +cppcheck_extra_make_args = ""
>>>> +xen_cc = ""
>>>> +
>>>> +def get_make_vars():
>>>> + global xen_cc
>>>> + invoke_make = utils.invoke_command(
>>>> + "make -C {} {} export-variable-CC"
>>>> + .format(settings.xen_dir, settings.make_forward_args),
>>>> + True, GetMakeVarsPhaseError,
>>>> + "Error occured retrieving make vars:\n{}"
>>>> + )
>>>> +
>>>> + cc_var_regex = re.search('^CC=(.*)$', invoke_make, flags=re.M)
>>>> + if cc_var_regex:
>>>> + xen_cc = cc_var_regex.group(1)
>>>> +
>>>> + if xen_cc == "":
>>>> + raise GetMakeVarsPhaseError("CC variable not found in Xen make
>>>> output")
>>>
>>> What use is CC without CFLAGS? Once again the description could do
>>> with containing some information on what's going on here, and why
>>> you need to export any variables in the first place.
>>
>> We don’t need CFLAGS here, we need only CC to generate
>> include/generated/compiler-def.h and
>> to pass CC to the cppcheck-cc.sh --compiler argument.
>
> Hmm, I see that include/generated/compiler-def.h is generated already
> now without any use of CFLAGS. Which looks suspicious to me. Sadly
> the uses in xen/Makefile are lacking any details on what this is for,
> and Bertrand's commit introducing it doesn't explain its purpose
> either. Maybe again something entirely obvious to people knowing
> cppcheck sufficiently well ...
>
>> Would a comment in the code be ok?
>
> Not sure (yet).
>
> Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |