Mailing List Archive

[xen master] tools/misra: fix skipped rule numbers
commit a0998df973594347a4e4632ac67d8a9572434990
Author: Luca Fancellu <luca.fancellu@arm.com>
AuthorDate: Wed Dec 7 13:07:03 2022 +0000
Commit: Stefano Stabellini <stefano.stabellini@amd.com>
CommitDate: Mon Dec 12 14:19:18 2022 -0800

tools/misra: fix skipped rule numbers

MISRA rules are in the format Rule X.Y, currently the script
convert_misra_doc.py is using two nested loop through range(1,22) to
enumerate rules that needs to be skipped, using combination of X.Y in
that range, however there are two issues in the code:
- rule 22 is never included because the range(1,22) produces a range
in [1..21]
- the second issue is that the code is producing invalid MISRA C 2012
rules, for example 1.21 and so on

Fix the issue using a dictionary that list the rules in misra c2012.

Fixes: 57caa5375321 ("xen: Add MISRA support to cppcheck make rule")
Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Tested-by: Stefano Stabellini <sstabellini@kernel.org>
---
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 caa4487f64..13074d8a2e 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)
--
generated by git-patchbot for /home/xen/git/xen.git#master