[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1] misra: add deviation for rules 21.1 and 21.2
On 7/18/25 12:17, Dmytro Prokopchuk wrote: > > > On 7/18/25 08:31, Jan Beulich wrote: >> On 17.07.2025 22:47, Dmytro Prokopchuk1 wrote: >>> >>> >>> On 4/23/25 20:54, victorm.lira@xxxxxxx wrote: >>>> From: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx> >>>> >>>> MISRA C Rules 21.1 ("#define and #undef shall not be used on a >>>> reserved identifier or reserved macro name") and R21.2 ("A reserved >>>> identifier or reserved macro name shall not be declared") violations >>>> are not problematic for Xen, as it does not use the C or POSIX >>>> libraries. >>>> >>>> Xen uses -fno-builtin and -nostdinc to ensure this, but there are still >>>> __builtin_* functions from the compiler that are available so >>>> a deviation is formulated for all identifiers not starting with >>>> "__builtin_". >>>> >>>> The missing text of a deviation for Rule 21.2 is added to >>>> docs/misra/deviations.rst. >>>> >>>> To avoid regressions, tag both rules as clean and add them to the >>>> monitored set. >>>> >>>> Signed-off-by: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx> >>>> Signed-off-by: Federico Serafini <federico.serafini@xxxxxxxxxxx> >>>> Signed-off-by: Victor Lira <victorm.lira@xxxxxxx> >>>> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> >>>> --- >>>> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> >>>> Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx> >>>> Cc: Michal Orzel <michal.orzel@xxxxxxx> >>>> Cc: Jan Beulich <jbeulich@xxxxxxxx> >>>> Cc: Julien Grall <julien@xxxxxxx> >>>> Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx> >>>> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> >>>> Cc: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx> >>>> Cc: Federico Serafini <federico.serafini@xxxxxxxxxxx> >>>> Cc: Bertrand Marquis <bertrand.marquis@xxxxxxx> >>>> --- >>>> .../eclair_analysis/ECLAIR/deviations.ecl | 9 ++++++- >>>> .../eclair_analysis/ECLAIR/monitored.ecl | 2 ++ >>>> automation/eclair_analysis/ECLAIR/tagging.ecl | 2 ++ >>>> docs/misra/deviations.rst | 26 ++++++++++++++ >>>> ++++- >>>> 4 files changed, 37 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl b/ >>>> automation/eclair_analysis/ECLAIR/deviations.ecl >>>> index 2c8fb92713..ffa23b53b7 100644 >>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl >>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl >>>> @@ -639,8 +639,15 @@ in the expansion." >>>> # Series 21. >>>> # >>>> >>>> +-doc_begin="Xen does not use C and POSIX libraries: >>>> +identifiers reserved by these libraries can be used safely, except >>>> for those >>>> +beginning with '__builtin_'." >>>> +-config=MC3A2.R21.1,macros={safe, "!^__builtin_.*$"} >>>> +-config=MC3A2.R21.2,declarations={safe, "!^__builtin_.*$"} >>>> +-doc_end >>>> + >>>> -doc_begin="or, and and xor are reserved identifiers because they >>>> constitute alternate >>>> -spellings for the corresponding operators (they are defined as >>>> macros by iso646.h). >>>> +spellings for the corresponding logical operators (as defined in >>>> header 'iso646.h'). >>>> However, Xen doesn't use standard library headers, so there is no >>>> risk of overlap." >>>> -config=MC3A2.R21.2,reports+={safe, >>>> "any_area(stmt(ref(kind(label)&&^(or|and|xor|not)$)))"} >>>> -doc_end >>>> diff --git a/automation/eclair_analysis/ECLAIR/monitored.ecl b/ >>>> automation/eclair_analysis/ECLAIR/monitored.ecl >>>> index 8351996ec8..da229a0d84 100644 >>>> --- a/automation/eclair_analysis/ECLAIR/monitored.ecl >>>> +++ b/automation/eclair_analysis/ECLAIR/monitored.ecl >>>> @@ -79,6 +79,8 @@ >>>> -enable=MC3A2.R20.12 >>>> -enable=MC3A2.R20.13 >>>> -enable=MC3A2.R20.14 >>>> +-enable=MC3A2.R21.1 >>>> +-enable=MC3A2.R21.2 >>>> -enable=MC3A2.R21.3 >>>> -enable=MC3A2.R21.4 >>>> -enable=MC3A2.R21.5 >>>> diff --git a/automation/eclair_analysis/ECLAIR/tagging.ecl b/ >>>> automation/eclair_analysis/ECLAIR/tagging.ecl >>>> index 1d078d8905..3292bf751e 100644 >>>> --- a/automation/eclair_analysis/ECLAIR/tagging.ecl >>>> +++ b/automation/eclair_analysis/ECLAIR/tagging.ecl >>>> @@ -88,6 +88,8 @@ MC3A2.R20.11|| >>>> MC3A2.R20.12|| >>>> MC3A2.R20.13|| >>>> MC3A2.R20.14|| >>>> +MC3A2.R21.1|| >>>> +MC3A2.R21.2|| >>>> MC3A2.R21.3|| >>>> MC3A2.R21.4|| >>>> MC3A2.R21.5|| >>>> diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst >>>> index fe0b1e10a2..88328eaa8a 100644 >>>> --- a/docs/misra/deviations.rst >>>> +++ b/docs/misra/deviations.rst >>>> @@ -587,7 +587,31 @@ Deviations related to MISRA C:2012 Rules: >>>> construct is deviated only in Translation Units that >>>> present a violation >>>> of the Rule due to uses of this macro. >>>> - Tagged as `deliberate` for ECLAIR. >>>> - >>>> + >>>> + * - R21.1 >>>> + - Rule 21.1 reports identifiers reserved for the C and POSIX >>>> standard >>>> + libraries. Xen does not use such libraries and all >>>> translation units >>>> + are compiled with option '-nostdinc', therefore there is no >>>> reason to >>>> + avoid to use `#define` or `#undef` on such identifiers >>>> except for those >>>> + beginning with `__builtin_` for which compilers may perform >>>> (wrong) >>>> + optimizations. >>>> + - Tagged as `safe` for ECLAIR. >>>> + >>>> + * - R21.2 >>>> + - Rule 21.2 reports identifiers reserved for the C and POSIX >>>> standard >>>> + libraries. Xen does not use such libraries and all >>>> translation units >>>> + are compiled with option '-nostdinc', therefore there is no >>>> reason to >>>> + avoid declaring such identifiers except for those beginning >>>> with >>>> + `__builtin_` for which compilers may perform (wrong) >>>> optimizations. >>>> + - Tagged as `safe` for ECLAIR. >>>> + >>>> + * - R21.2 >>>> + - `or`, `and` and `xor` are reserved identifiers because they >>>> constitute >>>> + alternate spellings for the corresponding logical operators >>>> + (as defined in Standard Library header `\<iso646.h\>`). Xen >>>> does not use >>>> + Standard library headers, so there is no risk of overlap. >>>> + - Tagged as `safe` for ECLAIR. >>>> + >>>> * - R21.9 >>>> - Xen does not use the `bsearch` and `qsort` functions >>>> provided by the C >>>> Standard Library, but provides in source form its own >>>> implementation, >>>> -- >>>> 2.47.0 >>> >>> Hello All! >>> >>> I tried to play with Rule 21.1 deviations. >>> >>> After applying the following configurations: >>> >>> -config=MC3A2.R21.1,macros+={safe, "^offsetof$ || ^(is|to)[a-z]+$ || >>> name(NULL) || name(bool) || name(true) || name(false)"} >>> -config=MC3A2.R21.1,macros+={safe, >>> "loc(file(^xen/include/xen/inttypes\\.h$))"} >>> -config=MC3A2.R21.1,macros+={safe, "loc(file(^xen/include/xen/types\ >>> \.h$))"} >>> -config=MC3A2.R21.1,macros+={safe, "^str[a-z]+$ || ^(v)?sprintf$ || >>> ^va_[a-z]+$"} >> >> Can you spell these out in words? I can only vaguely interpret these >> Eclair >> patterns, sorry. > Yes, sure. > > That means to deviate the following macros: > - offsetof > - begin with either ‘is’ or ‘to’ followed by a lowercase letters > (islower, isdigit, tolower, toupper, etc.) > - NULL > - bool > - true > - false > - all PRI/SCN macros for printing/scanning format specifiers from header > file xen/include/xen/inttypes.h > - all macros from header file xen/include/xen/types.h (limits: > UINT8_MAX, INT_MAX, LONG_MIN, etc.) > - begin with 'str' followed by a lowercase letters (string functions) > - sprintf/vsprintf > - begin with 'va_' followed by a lowercase letters (va_copy, va_start, > va_end, va_arg) > >> >>> Eclair showed 699 remaining violations. >>> All of them were related to names beginning with an underscore (_). >>> >>> It's possible to resolve the rest of them with help of (all, except for >>> those beginning with '__builtin_' and '__x86_64__'): >>> >>> -config=MC3A2.R21.1,macros+={safe, "^_.*$ && !^__builtin_.*$ && >>> !^__x86_64__$"} >>> >>> Probably, the exception list can be extended. >>> >>> Jan, >>> I know you don't want to disallow "_all_" such reserved identifiers. >>> But how to deal with that? >> >> How do I not want this? I've been arguing for years that we should >> respect >> the reserved name spaces. (Did you perhaps mean "... you don't want to >> deviate ..."?) There are exceptions, yes, e.g. ... >> > Yes, I meant about deviations. Sorry. > >>> Try to cover all macros? Like this, for example (I assume that there are >>> no such reserved macros): >>> -config=MC3A2.R21.1,macros+={safe, "^.*XEN.*$ || ^.*HYPERVISOR.*$"} >> >> ... anything we may have (wrongly) introduced into the public headers. We >> can't very well change naming there. > Looks like the only way is to deviate all macros (that are currently > used in Xen), tag rule as "clean" and prohibit using reserved names in > the future. > > Any suggestions? > > Dmytro BTW, not all violations are in public headers. Probably, they could be fixed in code. But the number of them is huge... Dmytro > >> >> Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |