12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // Copyright (c) 2020 Intel Corporation
- // SPDX-License-Identifer: 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)
|