@@ -1,17 +1,16 @@
.. SPDX-License-Identifier: CC-BY-4.0
-Exclude file list for xen-analysis script
-=========================================
+Exclude file list for xen scripts
+=================================
-The code analysis is performed on the Xen codebase for both MISRA
-checkers and static analysis checkers, there are some files however that
-needs to be removed from the findings report for various reasons (e.g.
-they are imported from external sources, they generate too many false
-positive results, etc.).
+Different Xen scripts can perform operations on the codebase to check its
+compliance for a set of rules, however Xen contains some files that are taken
+from other projects (e.g. linux) and they can't be updated to ease backporting
+fixes from their source, for this reason the file docs/misra/exclude-list.json
+is kept as a source of all these files that are external to the Xen project.
-For this reason the file docs/misra/exclude-list.json is used to exclude every
-entry listed in that file from the final report.
-Currently only the cppcheck analysis will use this file.
+Every entry of the file can be linked to different checkers, so that this list
+can be used by multiple scripts selecting only the required entries.
Here is an example of the exclude-list.json file::
@@ -20,11 +19,13 @@ Here is an example of the exclude-list.json file::
| "content": [
| {
| "rel_path": "relative/path/from/xen/file",
-| "comment": "This file is originated from ..."
+| "comment": "This file is originated from ...",
+| "checkers": "xen-analysis"
| },
| {
| "rel_path": "relative/path/from/xen/folder/*",
-| "comment": "This folder is a library"
+| "comment": "This folder is a library",
+| "checkers": "xen-analysis some-checker"
| },
| {
| "rel_path": "relative/path/from/xen/mem*.c",
@@ -39,6 +40,12 @@ Here is an explanation of the fields inside an object of the "content" array:
match more than one file/folder at the time. This field is mandatory.
- comment: an optional comment to explain why the file is removed from the
analysis.
+ - checkers: an optional list of checkers that will exclude this entries from
+ their results. This field is optional and when not specified, it means every
+ checker will use that entry.
+ Current implemented values for this field are:
+ - xen-analysis: the xen-analysis.py script exclude this entry for both MISRA
+ and static analysis scan. (Implemented only for Cppcheck tool)
To ease the review and the modifications of the entries, they shall be listed in
alphabetical order referring to the rel_path field.
@@ -9,7 +9,7 @@ class ExclusionFileListError(Exception):
def cppcheck_exclusion_file_list(input_file):
ret = []
- excl_list = load_exclusion_file_list(input_file)
+ excl_list = load_exclusion_file_list(input_file, "xen-analysis")
for entry in excl_list:
# Prepending * to the relative path to match every path where the Xen
@@ -25,7 +25,7 @@ def cppcheck_exclusion_file_list(input_file):
# If the first entry contained a wildcard '*', the second entry will have an
# array of the solved absolute path for that entry.
# Returns [('path',[path,path,...]), ('path',[path,path,...]), ...]
-def load_exclusion_file_list(input_file):
+def load_exclusion_file_list(input_file, checker=""):
ret = []
try:
with open(input_file, "rt") as handle:
@@ -51,6 +51,18 @@ def load_exclusion_file_list(input_file):
raise ExclusionFileListError(
"Malformed JSON entry: rel_path field not found!"
)
+ # Check the checker field
+ try:
+ entry_checkers = entry['checkers']
+ except KeyError:
+ # If the field doesn't exists, assume that this entry is for every
+ # checker
+ entry_checkers = checker
+
+ # Check if this entry is for the selected checker
+ if checker not in entry_checkers:
+ continue
+
abs_path = settings.xen_dir + "/" + path
check_path = [abs_path]