You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.6 KiB
64 lines
1.6 KiB
// Copyright (c) 2020 Intel Corporation |
|
// SPDX-License-Identifier: Apache-2.0 |
|
|
|
// Uses a python database (a dict) to find where const struct device |
|
// variable are being used in zephyr functions and, if it's being in place |
|
// of a void*, it will print an ERROR for loosing the const qualifier. |
|
// If it's being used on an unknown functions from an external module such |
|
// as a HAL, it will print a WARNING in order to check if the const qualifier |
|
// is not lost. |
|
|
|
virtual report |
|
|
|
//////////////////// |
|
// Initialization // |
|
//////////////////// |
|
|
|
@initialize:python |
|
depends on report |
|
@ |
|
@@ |
|
import pickle |
|
|
|
def check_and_report(F, f, D, nb_args, p): |
|
if f in f_void and int(nb_args) in f_void[f]: |
|
msg = "ERROR: in {} calling {} param with {}, \ |
|
loosing const qualifier, please wrap".format(F, f, D) |
|
coccilib.report.print_report(p[0], msg) |
|
elif f not in f_void and f not in f_other and not f.isupper(): |
|
msg = "WARNING: in {} calling {} param with {}, \ |
|
check if const qualifier is not lost".format(F, f, D) |
|
coccilib.report.print_report(p[0], msg) |
|
|
|
// Loading function data base |
|
with open("function_names.pickle", "rb") as f: |
|
data = pickle.load(f) |
|
f_void = data["f_void"] |
|
f_other = data["f_other"] |
|
|
|
|
|
/////////// |
|
// Rules // |
|
/////////// |
|
|
|
// Find usage of a device instance |
|
@r_find_dev_usage |
|
depends on report |
|
@ |
|
local idexpression struct device *D; |
|
expression list[nb_args] args; |
|
identifier f; |
|
position p; |
|
@@ |
|
f(args, D@p, ...) |
|
|
|
|
|
@script:python |
|
depends on r_find_dev_usage |
|
@ |
|
f << r_find_dev_usage.f; |
|
D << r_find_dev_usage.D; |
|
nb_args << r_find_dev_usage.nb_args; |
|
p << r_find_dev_usage.p; |
|
@@ |
|
check_and_report(p[0].current_element, f, D, nb_args, p)
|
|
|