[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/3] xen/misra: xen-analysis.py: fix parallel analysis Cppcheck errors
On Thu, 4 May 2023, Luca Fancellu wrote: > Currently Cppcheck has a limitation that prevents to use make with > parallel build and have a parallel Cppcheck invocation on each > translation unit (the .c files), because of spurious internal errors. > > The issue comes from the fact that when using the build directory, > Cppcheck saves temporary files as <filename>.c.<many-extensions>, but > this doesn't work well when files with the same name are being > analysed at the same time, leading to race conditions. > > Fix the issue creating, under the build directory, the same directory > structure of the file being analysed to avoid any clash. > > Fixes: 02b26c02c7c4 ("xen/scripts: add cppcheck tool to the xen-analysis.py > script") > Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > xen/scripts/xen_analysis/cppcheck_analysis.py | 8 +++----- > xen/tools/cppcheck-cc.sh | 19 ++++++++++++++++++- > 2 files changed, 21 insertions(+), 6 deletions(-) > > diff --git a/xen/scripts/xen_analysis/cppcheck_analysis.py > b/xen/scripts/xen_analysis/cppcheck_analysis.py > index ab52ce38d502..658795bb9f5b 100644 > --- a/xen/scripts/xen_analysis/cppcheck_analysis.py > +++ b/xen/scripts/xen_analysis/cppcheck_analysis.py > @@ -139,7 +139,6 @@ def generate_cppcheck_deps(): > # Compiler defines are in compiler-def.h which is included in config.h > # > cppcheck_flags=""" > ---cppcheck-build-dir={}/{} > --max-ctu-depth=10 > --enable=style,information,missingInclude > --template=\'{{file}}({{line}},{{column}}):{{id}}:{{severity}}:{{message}}\' > @@ -150,8 +149,7 @@ def generate_cppcheck_deps(): > --suppress='unusedStructMember:*' > --include={}/include/xen/config.h > -DCPPCHECK > -""".format(settings.outdir, CPPCHECK_BUILD_DIR, settings.xen_dir, > - settings.outdir, settings.xen_dir) > +""".format(settings.xen_dir, settings.outdir, settings.xen_dir) > > invoke_cppcheck = utils.invoke_command( > "{} --version".format(settings.cppcheck_binpath), > @@ -204,9 +202,9 @@ def generate_cppcheck_deps(): > > cppcheck_cc_flags = """--compiler={} --cppcheck-cmd={} {} > --cppcheck-plat={}/cppcheck-plat --ignore-path=tools/ > - --ignore-path=arch/x86/efi/check.c > + --ignore-path=arch/x86/efi/check.c --build-dir={}/{} > """.format(xen_cc, settings.cppcheck_binpath, cppcheck_flags, > - settings.tools_dir) > + settings.tools_dir, settings.outdir, CPPCHECK_BUILD_DIR) > > if settings.cppcheck_html: > cppcheck_cc_flags = cppcheck_cc_flags + " --cppcheck-html" > diff --git a/xen/tools/cppcheck-cc.sh b/xen/tools/cppcheck-cc.sh > index f6728e4c1084..16a965edb7ec 100755 > --- a/xen/tools/cppcheck-cc.sh > +++ b/xen/tools/cppcheck-cc.sh > @@ -24,6 +24,7 @@ Options: > EOF > } > > +BUILD_DIR="" > CC_FILE="" > COMPILER="" > CPPCHECK_HTML="n" > @@ -66,6 +67,10 @@ do > help > exit 0 > ;; > + --build-dir=*) > + BUILD_DIR="${OPTION#*=}" > + sm_tool_args="n" > + ;; > --compiler=*) > COMPILER="${OPTION#*=}" > sm_tool_args="n" > @@ -107,6 +112,12 @@ then > exit 1 > fi > > +if [ "${BUILD_DIR}" = "" ] > +then > + echo "--build-dir arg is mandatory." > + exit 1 > +fi > + > function create_jcd() { > local line="${1}" > local arg_num=0 > @@ -199,13 +210,18 @@ then > exit 1 > fi > > + # Generate build directory for the analysed file > + cppcheck_build_dir="${BUILD_DIR}/${OBJTREE_PATH}" > + mkdir -p "${cppcheck_build_dir}" > + > # Shellcheck complains about missing quotes on CPPCHECK_TOOL_ARGS, > but > # they can't be used here > # shellcheck disable=SC2086 > ${CPPCHECK_TOOL} ${CPPCHECK_TOOL_ARGS} \ > --project="${JDB_FILE}" \ > --output-file="${out_file}" \ > - --platform="${platform}" > + --platform="${platform}" \ > + --cppcheck-build-dir=${cppcheck_build_dir} > > if [ "${CPPCHECK_HTML}" = "y" ] > then > @@ -216,6 +232,7 @@ then > --project="${JDB_FILE}" \ > --output-file="${out_file%.txt}.xml" \ > --platform="${platform}" \ > + --cppcheck-build-dir=${cppcheck_build_dir} \ > -q \ > --xml > fi > -- > 2.34.1 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |