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

Re: [PATCH 3/4] tools/misra: fix skipped rule numbers


  • To: Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Date: Wed, 30 Nov 2022 08:53:40 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.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=CFnbZWJFUp0sAzawbJ6JmnR+WoHSTi35d13YUqDmStE=; b=Njz7WuZonqX9Y//GltoV9lfRCWebjEQ7Y2MGurTY8FmKl63BuTtFUrSooKmNlm6CMCEGeMwErZg7PcaBdz7wk35eHC61zzOxsctLrwQuavancTFKi2wPPtY23yQ7KUxsNXPVprLgLjwACnfRrjtBOyNBxpzzRJMMm8JezLPcXsYUnuBS7BrA5cNhZ37PVk/gQZFS0/kIvKEhc7qnr/dTOnVTpll5kJw+KdxO/d0ls6AaXjwlLZb0U+fr8rFVZZ7K2qqdtKVtfZTSSTclTt8g6dovHHfQfr45oE7NxHcO+sOe7xyftVom/wXSQuBu8aPyo+kPdjdW3SFQP5xpf6rEvQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QdRzY6p7b9IfT4WnpzVLeJf4bUAU1PpHmrIaUA330bTIm+ogfwb0wbW1TRl4/gLy2pcWmDNvTKP2P7vCorKfzEvPCxMmTf4jQ+6GY8oVWczSAoZwGbJdpWX/VocqxctF9g0f/gNcBXTsz4HIWGHUM/GYw5exR7xjiip/YGzsR6Cvso3Z8hE+Sba6lJx48Ekm/G5yKIeOVn/v2XDJw5FLj3rsK/crlU30Vp/ceSblvZ9xFhL+Dd7Ii0+VV7tyexfZDpW9ARKiORok8xrX9rPHZTyh5QEapOD/HYn1SWspyNfUOgnk40jixQc4RLOieDjSO5KOccpZUPyETnzDB9N5Bw==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Wei Chen <Wei.Chen@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Wed, 30 Nov 2022 08:54:16 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHZAzNHmn5ClVb9v0W1JXlG6nXFZ65WlJMAgACXfQA=
  • Thread-topic: [PATCH 3/4] tools/misra: fix skipped rule numbers


> On 29 Nov 2022, at 23:51, Stefano Stabellini <sstabellini@xxxxxxxxxx> wrote:
> 
> On Mon, 28 Nov 2022, Luca Fancellu wrote:
>> Currently the script convert_misra_doc.py is using a loop through
>> range(1,22) to enumerate rules that needs to be skipped, however
>> range function does not include the stop counter in the enumeration
>> ending up into list rules until 21.21 instead of including rule 22.
>> 
>> Fix the issue using a dictionary that list the rules in misra c2012.
> 
> I think I understand the problem you are trying to solve with this
> patch. But I am confused about the proposed solution.
> 
> The original code is trying to list all the possible MISRA C rules that
> are not in docs/misra/rules.rst. Instead of list(range(1,22)) now we
> have a dictionary: misra_c2012_rules. But misra_c2012_rules doesn't have
> all the possible MISRA C rules missing from docs/misra/rules.rst.
> 
> As an example Rule 13.1 is missing from docs/misra/rules.rst but it is
> also missing from misra_c2012_rules.
> 
> Can you please help me understand why misra_c2012_rules has only a small
> subset of MISRA C rules to be skipped?

Hi Stefano,

MISRA rules are in this format X.Y, misra_c2012_rules is a dictionary where the 
key is 
X and the value is the maximum number that Y can have.

For example rule 13.Y goes from 13.1 to 13.6 (in the dictionary 
misra_c2012_rules[13] == 6),
so the code can now check which among (13.1 .. 13.6) is not in the rule_list 
and add it to the
list of skipped rules.

Here an example:
{
    "script": "misra.py",
    "args": [
      "--rule-texts=/path/to/cppcheck-misra.txt",
      
"--suppress-rules=1.1,1.2,1.4,2.2,2.3,2.4,2.5,2.6,2.7,3.1,4.1,4.2,5.5,5.6,5.7,5.8,5.9,6.1,7.1,7.2,7.3,7.4,8.2,8.3,8.7,8.9,8.11,8.13,8.14,9.3,9.4,9.5,10.1,10.2,10.3,10.4,10.5,10.6,10.7,10.8,11.1,11.2,11.3,11.4,11.5,11.6,11.7,11.8,11.9,12.1,12.2,12.3,12.4,12.5,13.1,13.2,13.3,13.4,13.5,14.2,14.3,14.4,15.1,15.2,15.3,15.4,15.5,15.6,15.7,16.1,16.2,16.3,16.4,16.5,16.6,17.1,17.2,17.5,17.6,17.7,17.8,18.1,18.2,18.3,18.4,18.5,18.6,18.7,18.8,19.1,19.2,20.1,20.2,20.3,20.4,20.5,20.6,20.8,20.9,20.10,20.11,20.12,21.1,21.2,21.3,21.4,21.5,21.6,21.7,21.8,21.9,21.10,21.11,21.12,21.13,21.14,21.15,21.16,21.17,21.18,21.19,21.20,21.21,22.1,22.2,22.3,22.4,22.5,22.6,22.7,22.8,22.9,22.10"
    ]
}

So this patch is solving two issues, the first one was that rule 22.Y was never 
included in the suppressed
list because range(1,22) produces a range in [1..21], the second issue is that 
the code was producing
Invalid MISRA C 2012 rules, for example 1.21 and so on.


> 
> 
>> Fixes: 57caa5375321 ("xen: Add MISRA support to cppcheck make rule")
>> Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx>
>> ---
>> xen/tools/convert_misra_doc.py | 32 ++++++++++++++++++++++++++++++--
>> 1 file changed, 30 insertions(+), 2 deletions(-)
>> 
>> diff --git a/xen/tools/convert_misra_doc.py b/xen/tools/convert_misra_doc.py
>> index caa4487f645f..13074d8a2e91 100755
>> --- a/xen/tools/convert_misra_doc.py
>> +++ b/xen/tools/convert_misra_doc.py
>> @@ -14,6 +14,34 @@ Usage:
>> 
>> import sys, getopt, re
>> 
>> +# MISRA rule are identified by two numbers, e.g. Rule 1.2, the main rule 
>> number
>> +# and a sub-number. This dictionary contains the number of the MISRA rule 
>> as key
>> +# and the maximum sub-number for that rule as value.
>> +misra_c2012_rules = {
>> +    1:4,
>> +    2:7,
>> +    3:2,
>> +    4:2,
>> +    5:9,
>> +    6:2,
>> +    7:4,
>> +    8:14,
>> +    9:5,
>> +    10:8,
>> +    11:9,
>> +    12:5,
>> +    13:6,
>> +    14:4,
>> +    15:7,
>> +    16:7,
>> +    17:8,
>> +    18:8,
>> +    19:2,
>> +    20:14,
>> +    21:21,
>> +    22:10
>> +}
>> +
>> def main(argv):
>>     infile = ''
>>     outfile = ''
>> @@ -142,8 +170,8 @@ def main(argv):
>>     skip_list = []
>> 
>>     # Search for missing rules and add a dummy text with the rule number
>> -    for i in list(range(1,22)):
>> -        for j in list(range(1,22)):
>> +    for i in misra_c2012_rules:
>> +        for j in list(range(1,misra_c2012_rules[i]+1)):
>>             if str(i) + '.' + str(j) not in rule_list:
>>                 outstr.write('Rule ' + str(i) + '.' + str(j) + '\n')
>>                 outstr.write('No description for rule ' + str(i) + '.' + 
>> str(j)
>> -- 
>> 2.17.1
>> 




 


Rackspace

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