[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 1/4] xen/Makefile: add analysis-coverity and analysis-eclair


  • To: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Tue, 8 Nov 2022 12:48:33 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ARTLt/gvXUcVxEw6Jt/uKKrW1E0ds/Sh9E1t50lsjqo=; b=lROzg9IDxVP6ced3lZNkQhy1a6eYfh6GFwyVtJ2XS5F8GBt1AEqWDA3j8ZoJYhdVvR6XG3h2wdVv8DfIvhKBp6yDwkKKuINgB4N5m2r706xgbRP5zAJEeFtKlQQHHmV7con/npW4FgSwqQZhicYhvEBTkNnxPP2EXGWsVmUxfeAU6/Bc4CungmCZH+faVNJe9dpqzOfSOLX5AaWwfd1YbhOOU7CNuw8nl+s0T6ARUQsz/uAaJr57MFfn8Shvr0G2aXkVWEoxWjcoOJDf75jNblgwIQlEuxsmpFAs6JG8SsrNUnGxVih2lwaMx647x+inBtPAi6X2yxGPehCsWRG+Zg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eZqm1ayY/VIjYwbVO0gRQ9R/9TCyA30ATOFLigITPPEgU8WUpFQYAwEcmF6Kp5iqrsCZOHthsxgcsO+plUUEdqn4JIQo0+0VZmU8vlL2eCLTOnq+3JDvAhp64rCWd3EKrE/jf+XnkIj4yqpEY1Pq/4MPeZdAU+UPasWop+dGXdlDn7a6o+vNDAab/a6+gl7XqnFLi0GwIAOwJIGpLQjfZATsB8eHyPLOMyDmW5GtXIjWMBQAxLtMeYKy9C3gOvrC/pOEPT4J2jE2uYqKMAraPP2zcGTISrd/n6vI6QYKGOQyyqjv1ASQAgtjLoK+iEgQ0OlwfTZafg9K7V3+2ma99g==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Wei Chen <Wei.Chen@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 08 Nov 2022 11:48:49 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 08.11.2022 11:59, Luca Fancellu wrote:
>> On 07.11.2022 11:47, Luca Fancellu wrote:
>>> +Here is an example to add a new justification in 
>>> false-positive-<tool>.json::
>>
>> With <tool> already present in the name, ...
>>
>>> +|{
>>> +|    "version": "1.0",
>>> +|    "content": [
>>> +|        {
>>> +|            "id": "SAF-0-false-positive-<tool>",
>>> +|            "analyser": {
>>> +|                "<tool>": "<proprietary-id>"
>>
>> ... can we avoid the redundancy here? Perhaps ...
>>
>>> +|            },
>>> +|            "tool-version": "<version>",
>>
>> ... it could be
>>
>>            "analyser": {
>>                "<version>": "<proprietary-id>"
>>            },
> 
> Yes it’s a bit redundant but it helps re-using the same tool we use for 
> safe.json

I guess the tool could also be made cope without much effort.

>>> @@ -757,6 +758,51 @@ cppcheck-version:
>>> $(objtree)/include/generated/compiler-def.h:
>>>     $(Q)$(CC) -dM -E -o $@ - < /dev/null
>>>
>>> +JUSTIFICATION_FILES := $(XEN_ROOT)/docs/misra/safe.json \
>>> +                       $(XEN_ROOT)/docs/misra/false-positive-$$*.json
>>> +
>>> +# The following command is using grep to find all files that contains a 
>>> comment
>>> +# containing "SAF-<anything>" on a single line.
>>> +# %.safparse will be the original files saved from the build system, these 
>>> files
>>> +# will be restored at the end of the analysis step
>>> +PARSE_FILE_LIST := $(addsuffix .safparse,$(filter-out %.safparse,\
>>> +$(shell grep -ERl '^[[:blank:]]*\/\*[[:space:]]+SAF-.*\*\/$$' $(srctree))))
>>
>> Please indent such line continuations. And then isn't this going to risk
>> matching non-source files as well? Perhaps you want to restrict this to
>> *.c and *.h?
> 
> Yes, how about this, it will filter out *.safparse files while keeping in 
> only .h and .c:
> 
> PARSE_FILE_LIST := $(addsuffix .safparse,$(filter %.c %.h,\
>     $(shell grep -ERl '^[[:blank:]]*\/\*[[:space:]]+SAF-.*\*\/$$' 
> $(srctree))))

That's better, but still means touching all files by grep despite now
only a subset really looked for. If I was to use the new goals on a
more or less regular basis, I'd expect that this enumeration of files
doesn't read _much_ more stuff from disk than is actually necessary.

>> To limit work done, could this me "mv" instead of "cp -p", and then ...
>>
>>> +analysis-parse-tags-%: $(PARSE_FILE_LIST) $(objtree)/%.sed
>>> +   $(Q)for file in $(patsubst %.safparse,%,$(PARSE_FILE_LIST)); do \
>>> +           sed -i -f "$(objtree)/$*.sed" "$${file}"; \
>>
>> ... with then using
>>
>>              sed -f "$(objtree)/$*.sed" "$${file}.safparse" >"$${file}"
>>
>> here? This would then also have source consistent between prereqs and
>> rule.
> 
> We saw that mv is not preserving the timestamp of the file, instead we would 
> like to preserve
> it, for this reason we used cp -p

Buggy mv? It certainly doesn't alter timestamps here, and I don't think
the spec allows for it doing so (at least when it doesn't need to resort
to copying to deal with cross-volume moves, but those can't happen here).

>>> +   done
>>> +
>>> +analysis-build-%: analysis-parse-tags-%
>>> +   $(MAKE) O=$(abs_objtree) -f $(srctree)/Makefile build
>>
>> This rule doesn't use the stem, so I'm struggling to understand what
>> this is about.
> 
> Yes, here my aim was to catch analysis-build-{eclair,coverity}, here I see 
> that if the user has a typo
> the rule will run anyway, but it will be stopped by the dependency chain 
> because at the end we have:
> 
> JUSTIFICATION_FILES := $(XEN_ROOT)/docs/misra/safe.json \
>                        $(XEN_ROOT)/docs/misra/false-positive-$$*.json
> 
> That will give an error because 
> $(XEN_ROOT)/docs/misra/false-positive-<typo>.json does not exists.
> 
> If you think it is not enough, what if I reduce the scope of the rule like 
> this?
> 
> _analysis-coverity _analysis-eclair: _analysis-%: analysis-build-%

But then, without using the stem, how does it know whether to do an
Eclair or a Coverity run?

> Or, if you are still worried about “analysis-build-%: analysis-parse-tags-%”, 
> then I can do something
> like this: 
> 
> analysis-supported-coverity analysis-supported-eclair:
>     @echo > /dev/null
> 
> analysis-supported-%:
>     @error Unsupported analysis tool @*
> 
> analysis-build-%: analysis-parse-tags-% | analysis-supported-%
>     $(MAKE) O=$(abs_objtree) -f $(srctree)/Makefile build

If I'm not mistaken support for | doesn't exist in make 3.80 (the
minimum version we require to be used).

>>> +analysis-clean:
>>> +# Reverts the original file (-p preserves also timestamp)
>>> +   $(Q)find $(srctree) -type f -name "*.safparse" -print | \
>>> +   while IFS= read file; do \
>>> +           cp -p "$${file}" "$${file%.safparse}"; \
>>> +           rm -f "$${file}"; \
>>
>> Why not "mv"?
>>
>>> +   done
>>> +
>>> +_analysis-%: analysis-build-%
>>> +   $(Q)$(MAKE) O=$(abs_objtree) -f $(srctree)/Makefile analysis-clean
>>
>> Again no use of the stem, plus here I wonder if this may not lead to
>> people invoking "analysis-clean" without having said anything about
>> cleaning on their command line.
> 
> In any case, the cleaning process is very safe and does not clean anything 
> that was not dirty before,
> so in case of typos, it’s just like a nop.

People may put transient files in their trees. Of course they need to be
aware that when they specify a "clean" target their files may be deleted.
But without any "clean" target specified nothing should be removed.

Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.