MISRA C Rule 5.5 states that: "Identifiers shall
be distinct from macro names".
Update ECLAIR configuration to deviate:
- clashes in 'xen/include/xen/bitops.h';
- clashes in 'xen/include/xen/irq.h';
- clashes in 'xen/common/grant_table.c'.
Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
---
automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
docs/misra/deviations.rst | 8 ++++++++
2 files changed, 16 insertions(+)
diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl b/automation/eclair_analysis/ECLAIR/deviations.ecl
index e8f513fbc5..a5d7b00094 100644
--- a/automation/eclair_analysis/ECLAIR/deviations.ecl
+++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
@@ -117,6 +117,14 @@ it defines would (in the common case) be already defined. Peer reviewed by the c
-config=MC3A2.R5.5,reports+={deliberate, "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
-doc_end
+-doc_begin="Clashes between function names and macros are deliberate for bitops functions, pirq_cleanup_check, update_gnttab_par and parse_gnttab_limit functions
+and needed to have a function-like macro that acts as a wrapper for the function to be called. Before calling the function,
+the macro adds additional checks or adjusts the number of parameters depending on the configuration."
+-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
+-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
+-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
+-doc_end
+
-doc_begin="The type \"ret_t\" is deliberately defined multiple times,
depending on the guest."
-config=MC3A2.R5.6,reports+={deliberate,"any_area(any_loc(text(^.*ret_t.*$)))"}
diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst
index 0d56d45b66..fe05e4062e 100644
--- a/docs/misra/deviations.rst
+++ b/docs/misra/deviations.rst
@@ -142,6 +142,14 @@ Deviations related to MISRA C:2012 Rules:
memmove.
- Tagged as `deliberate` for ECLAIR.
+ * - R5.5
+ - Clashes between function names and macros are deliberate for bitops functions,
+ pirq_cleanup_check, update_gnttab_par and parse_gnttab_limit functions and needed
+ to have a function-like macro that acts as a wrapper for the function to be
+ called. Before calling the function, the macro adds additional checks or
+ adjusts the number of parameters depending on the configuration.
+ - Tagged as `deliberate` for ECLAIR.
+
* - R5.6
- The type ret_t is deliberately defined multiple times depending on the
type of guest to service.
--
2.43.0
On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
> MISRA C Rule 5.5 states that: "Identifiers shall
> be distinct from macro names".
>
> Update ECLAIR configuration to deviate:
> - clashes in 'xen/include/xen/bitops.h';
> - clashes in 'xen/include/xen/irq.h';
> - clashes in 'xen/common/grant_table.c'.
>
> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
> ---
> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
> docs/misra/deviations.rst | 8 ++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
> b/automation/eclair_analysis/ECLAIR/deviations.ecl
> index e8f513fbc5..a5d7b00094 100644
> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
> defined. Peer reviewed by the c
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
> -doc_end
>
> +-doc_begin="Clashes between function names and macros are deliberate
> for bitops functions, pirq_cleanup_check, update_gnttab_par and
> parse_gnttab_limit functions
> +and needed to have a function-like macro that acts as a wrapper for
> the function to be called. Before calling the function,
> +the macro adds additional checks or adjusts the number of parameters
> depending on the configuration."
> +-config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
Bitops violations are not inside "xen/include/xen/bitops.h", but rather
"xen/arch/x86/include/asm/bitops.h"
> +-config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
I would rather do (untested)
-config=MC3A2.R5.5,reports+={deliberate,
"all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
> +-config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
> +-doc_end
> +
same as above
> -doc_begin="The type \"ret_t\" is deliberately defined multiple times,
> depending on the guest."
>
> -config=MC3A2.R5.6,reports+={deliberate,"any_area(any_loc(text(^.*ret_t.*$)))"}
> diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst
> index 0d56d45b66..fe05e4062e 100644
> --- a/docs/misra/deviations.rst
> +++ b/docs/misra/deviations.rst
> @@ -142,6 +142,14 @@ Deviations related to MISRA C:2012 Rules:
> memmove.
> - Tagged as `deliberate` for ECLAIR.
>
> + * - R5.5
> + - Clashes between function names and macros are deliberate for
> bitops functions,
> + pirq_cleanup_check, update_gnttab_par and parse_gnttab_limit
> functions and needed
> + to have a function-like macro that acts as a wrapper for the
> function to be
> + called. Before calling the function, the macro adds additional
> checks or
> + adjusts the number of parameters depending on the
> configuration.
> + - Tagged as `deliberate` for ECLAIR.
> +
> * - R5.6
> - The type ret_t is deliberately defined multiple times depending
> on the
> type of guest to service.
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
On Fri, 11 Jul 2025, Nicola Vetrini wrote:
> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
> > MISRA C Rule 5.5 states that: "Identifiers shall
> > be distinct from macro names".
> >
> > Update ECLAIR configuration to deviate:
> > - clashes in 'xen/include/xen/bitops.h';
> > - clashes in 'xen/include/xen/irq.h';
> > - clashes in 'xen/common/grant_table.c'.
> >
> > Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
> > ---
> > automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
> > docs/misra/deviations.rst | 8 ++++++++
> > 2 files changed, 16 insertions(+)
> >
> > diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
> > b/automation/eclair_analysis/ECLAIR/deviations.ecl
> > index e8f513fbc5..a5d7b00094 100644
> > --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> > +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> > @@ -117,6 +117,14 @@ it defines would (in the common case) be already
> > defined. Peer reviewed by the c
> > -config=MC3A2.R5.5,reports+={deliberate,
> > "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
> > -doc_end
> >
> > +-doc_begin="Clashes between function names and macros are deliberate for
> > bitops functions, pirq_cleanup_check, update_gnttab_par and
> > parse_gnttab_limit functions
> > +and needed to have a function-like macro that acts as a wrapper for the
> > function to be called. Before calling the function,
> > +the macro adds additional checks or adjusts the number of parameters
> > depending on the configuration."
> > +-config=MC3A2.R5.5,reports+={deliberate,
> > "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>
> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
> "xen/arch/x86/include/asm/bitops.h"
>
> > +-config=MC3A2.R5.5,reports+={deliberate,
> > "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>
> I would rather do (untested)
>
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>
> > +-config=MC3A2.R5.5,reports+={deliberate,
> > "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
> > +-doc_end
> > +
>
> same as above
>
Thanks Nicola! The following deviations are enough and sufficient to
zero violations on both ARM and x86:
-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
-config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
Jan, are you OK with it?
On 12.07.2025 03:13, Stefano Stabellini wrote:
> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>>> MISRA C Rule 5.5 states that: "Identifiers shall
>>> be distinct from macro names".
>>>
>>> Update ECLAIR configuration to deviate:
>>> - clashes in 'xen/include/xen/bitops.h';
>>> - clashes in 'xen/include/xen/irq.h';
>>> - clashes in 'xen/common/grant_table.c'.
>>>
>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>>> ---
>>> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>>> docs/misra/deviations.rst | 8 ++++++++
>>> 2 files changed, 16 insertions(+)
>>>
>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>> b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>> index e8f513fbc5..a5d7b00094 100644
>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>>> defined. Peer reviewed by the c
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>>> -doc_end
>>>
>>> +-doc_begin="Clashes between function names and macros are deliberate for
>>> bitops functions, pirq_cleanup_check, update_gnttab_par and
>>> parse_gnttab_limit functions
>>> +and needed to have a function-like macro that acts as a wrapper for the
>>> function to be called. Before calling the function,
>>> +the macro adds additional checks or adjusts the number of parameters
>>> depending on the configuration."
>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>
>> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
>> "xen/arch/x86/include/asm/bitops.h"
>>
>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>
>> I would rather do (untested)
>>
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>
>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>>> +-doc_end
>>> +
>>
>> same as above
>>
>
> Thanks Nicola! The following deviations are enough and sufficient to
> zero violations on both ARM and x86:
>
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
>
> Jan, are you OK with it?
For many of them the scope (all_area) looks to be far too wide, especially
for about everything involved in compat handling. I can only repeat that I
think that we would be (far) better off not having wider than necessary
deviations.
There are others which I may not understand, e.g. the genapic.h one. IOW I
further think that such a change would need to come with a fair bit of
explanation / justification.
Jan
Hi Jan and Stefano.
Could we proceed with ARM deviations only so far?
I understand Stefano's preferences, but it can unblock me to address
next ARM violations.
BR, Dmytro.
On 7/14/25 10:55, Jan Beulich wrote:
> On 12.07.2025 03:13, Stefano Stabellini wrote:
>> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>>>> MISRA C Rule 5.5 states that: "Identifiers shall
>>>> be distinct from macro names".
>>>>
>>>> Update ECLAIR configuration to deviate:
>>>> - clashes in 'xen/include/xen/bitops.h';
>>>> - clashes in 'xen/include/xen/irq.h';
>>>> - clashes in 'xen/common/grant_table.c'.
>>>>
>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>>>> ---
>>>> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>>>> docs/misra/deviations.rst | 8 ++++++++
>>>> 2 files changed, 16 insertions(+)
>>>>
>>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>> b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>> index e8f513fbc5..a5d7b00094 100644
>>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>>>> defined. Peer reviewed by the c
>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>>>> -doc_end
>>>>
>>>> +-doc_begin="Clashes between function names and macros are deliberate for
>>>> bitops functions, pirq_cleanup_check, update_gnttab_par and
>>>> parse_gnttab_limit functions
>>>> +and needed to have a function-like macro that acts as a wrapper for the
>>>> function to be called. Before calling the function,
>>>> +the macro adds additional checks or adjusts the number of parameters
>>>> depending on the configuration."
>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>
>>> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
>>> "xen/arch/x86/include/asm/bitops.h"
>>>
>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>>
>>> I would rather do (untested)
>>>
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>
>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>>>> +-doc_end
>>>> +
>>>
>>> same as above
>>>
>>
>> Thanks Nicola! The following deviations are enough and sufficient to
>> zero violations on both ARM and x86:
>>
>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
>>
>> Jan, are you OK with it?
>
> For many of them the scope (all_area) looks to be far too wide, especially
> for about everything involved in compat handling. I can only repeat that I
> think that we would be (far) better off not having wider than necessary
> deviations.
>
> There are others which I may not understand, e.g. the genapic.h one. IOW I
> further think that such a change would need to come with a fair bit of
> explanation / justification.
>
> Jan
On 15.07.2025 11:46, Dmytro Prokopchuk1 wrote:
> Could we proceed with ARM deviations only so far?
> I understand Stefano's preferences, but it can unblock me to address
> next ARM violations.
Hmm, ...
> On 7/14/25 10:55, Jan Beulich wrote:
>> On 12.07.2025 03:13, Stefano Stabellini wrote:
>>> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>>>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>>>>> MISRA C Rule 5.5 states that: "Identifiers shall
>>>>> be distinct from macro names".
>>>>>
>>>>> Update ECLAIR configuration to deviate:
>>>>> - clashes in 'xen/include/xen/bitops.h';
>>>>> - clashes in 'xen/include/xen/irq.h';
>>>>> - clashes in 'xen/common/grant_table.c'.
>>>>>
>>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>>>>> ---
>>>>> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>>>>> docs/misra/deviations.rst | 8 ++++++++
>>>>> 2 files changed, 16 insertions(+)
>>>>>
>>>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>> b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>> index e8f513fbc5..a5d7b00094 100644
>>>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>>>>> defined. Peer reviewed by the c
>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>>>>> -doc_end
>>>>>
>>>>> +-doc_begin="Clashes between function names and macros are deliberate for
>>>>> bitops functions, pirq_cleanup_check, update_gnttab_par and
>>>>> parse_gnttab_limit functions
>>>>> +and needed to have a function-like macro that acts as a wrapper for the
>>>>> function to be called. Before calling the function,
>>>>> +the macro adds additional checks or adjusts the number of parameters
>>>>> depending on the configuration."
>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>>
>>>> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
>>>> "xen/arch/x86/include/asm/bitops.h"
>>>>
>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>>>
>>>> I would rather do (untested)
>>>>
>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>>
>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>>>>> +-doc_end
>>>>> +
>>>>
>>>> same as above
>>>>
>>>
>>> Thanks Nicola! The following deviations are enough and sufficient to
>>> zero violations on both ARM and x86:
>>>
>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
... in here, which of them are Arm-only?
Jan
ARM only are:
-config=MC3A2.R5.5,reports+={deliberate,
"any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
-config=MC3A2.R5.5,reports+={deliberate,
"all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
-config=MC3A2.R5.5,reports+={deliberate,
"all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
-config=MC3A2.R5.5,reports+={deliberate,
"all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
Dmytro.
On 7/15/25 13:01, Jan Beulich wrote:
> On 15.07.2025 11:46, Dmytro Prokopchuk1 wrote:
>> Could we proceed with ARM deviations only so far?
>> I understand Stefano's preferences, but it can unblock me to address
>> next ARM violations.
>
> Hmm, ...
>
>> On 7/14/25 10:55, Jan Beulich wrote:
>>> On 12.07.2025 03:13, Stefano Stabellini wrote:
>>>> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>>>>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>>>>>> MISRA C Rule 5.5 states that: "Identifiers shall
>>>>>> be distinct from macro names".
>>>>>>
>>>>>> Update ECLAIR configuration to deviate:
>>>>>> - clashes in 'xen/include/xen/bitops.h';
>>>>>> - clashes in 'xen/include/xen/irq.h';
>>>>>> - clashes in 'xen/common/grant_table.c'.
>>>>>>
>>>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>>>>>> ---
>>>>>> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>>>>>> docs/misra/deviations.rst | 8 ++++++++
>>>>>> 2 files changed, 16 insertions(+)
>>>>>>
>>>>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>> b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>> index e8f513fbc5..a5d7b00094 100644
>>>>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>>>>>> defined. Peer reviewed by the c
>>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>>> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>>>>>> -doc_end
>>>>>>
>>>>>> +-doc_begin="Clashes between function names and macros are deliberate for
>>>>>> bitops functions, pirq_cleanup_check, update_gnttab_par and
>>>>>> parse_gnttab_limit functions
>>>>>> +and needed to have a function-like macro that acts as a wrapper for the
>>>>>> function to be called. Before calling the function,
>>>>>> +the macro adds additional checks or adjusts the number of parameters
>>>>>> depending on the configuration."
>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>>>
>>>>> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
>>>>> "xen/arch/x86/include/asm/bitops.h"
>>>>>
>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>>>>
>>>>> I would rather do (untested)
>>>>>
>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>>>
>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>>>>>> +-doc_end
>>>>>> +
>>>>>
>>>>> same as above
>>>>>
>>>>
>>>> Thanks Nicola! The following deviations are enough and sufficient to
>>>> zero violations on both ARM and x86:
>>>>
>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
>
> ... in here, which of them are Arm-only?
>
> Jan
On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
> ARM only are:
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
This one's probably fine.
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
These two look too broad: They're affecting common/grant_table.c only, aren't
they?
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
This one also looks overly broad, but it's perhaps unavoidable to be that way.
Jan
On 7/15/25 13:50, Jan Beulich wrote:
> On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
>> ARM only are:
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>
> This one's probably fine.
>
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>
> These two look too broad: They're affecting common/grant_table.c only, aren't
> they?
>
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>
> This one also looks overly broad, but it's perhaps unavoidable to be that way.
>
> Jan
Hi Jan.
Those deviations can be narrowed (specifying file name):
-config=MC3A2.R5.5,reports+={deliberate,
"any_area(any_loc(file(^xen/include/xen/bitops\\.h$)) &&
macro(name(__test_and_set_bit||__test_and_clear_bit||__test_and_change_bit||test_bit)))"}
-config=MC3A2.R5.5,reports+={deliberate,
"any_area(any_loc(file(^xen/common/grant_table\\.c$))&¯o(name(update_gnttab_par||parse_gnttab_limit)))"}
-config=MC3A2.R5.5,reports+={deliberate,
"any_area(any_loc(file(^xen/include/xen/irq\\.h$))&¯o(name(pirq_cleanup_check)))"}
Are you OK with it?
Dmytro.
On 2025-07-16 18:04, Dmytro Prokopchuk1 wrote:
> On 7/15/25 13:50, Jan Beulich wrote:
>> On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
>>> ARM only are:
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>
>> This one's probably fine.
>>
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>>
>> These two look too broad: They're affecting common/grant_table.c only,
>> aren't
>> they?
>>
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>
>> This one also looks overly broad, but it's perhaps unavoidable to be
>> that way.
>>
>> Jan
>
> Hi Jan.
>
> Those deviations can be narrowed (specifying file name):
>
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(any_loc(file(^xen/include/xen/bitops\\.h$)) &&
> macro(name(__test_and_set_bit||__test_and_clear_bit||__test_and_change_bit||test_bit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(any_loc(file(^xen/common/grant_table\\.c$))&¯o(name(update_gnttab_par||parse_gnttab_limit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(any_loc(file(^xen/include/xen/irq\\.h$))&¯o(name(pirq_cleanup_check)))"}
>
> Are you OK with it?
>
s/any_loc/all_loc/ ? I don't expect these reports to have locations
outside those header files, so this should have the same effect but with
a narrower deviation.
> Dmytro.
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
On 7/16/25 19:52, Nicola Vetrini wrote:
> On 2025-07-16 18:04, Dmytro Prokopchuk1 wrote:
>> On 7/15/25 13:50, Jan Beulich wrote:
>>> On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
>>>> ARM only are:
>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>
>>> This one's probably fine.
>>>
>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>> "all_area(decl(name(parse_gnttab_limit))||
>>>> macro(name(parse_gnttab_limit)))"}
>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>> "all_area(decl(name(update_gnttab_par))||
>>>> macro(name(update_gnttab_par)))"}
>>>
>>> These two look too broad: They're affecting common/grant_table.c
>>> only, aren't
>>> they?
>>>
>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>> "all_area(decl(name(pirq_cleanup_check))||
>>>> macro(name(pirq_cleanup_check)))"}
>>>
>>> This one also looks overly broad, but it's perhaps unavoidable to be
>>> that way.
>>>
>>> Jan
>>
>> Hi Jan.
>>
>> Those deviations can be narrowed (specifying file name):
>>
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "any_area(any_loc(file(^xen/include/xen/bitops\\.h$)) &&
>> macro(name(__test_and_set_bit||__test_and_clear_bit||
>> __test_and_change_bit||test_bit)))"}
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "any_area(any_loc(file(^xen/common/grant_table\
>> \.c$))&¯o(name(update_gnttab_par||parse_gnttab_limit)))"}
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "any_area(any_loc(file(^xen/include/xen/irq\
>> \.h$))&¯o(name(pirq_cleanup_check)))"}
>>
>> Are you OK with it?
>>
>
> s/any_loc/all_loc/ ? I don't expect these reports to have locations
> outside those header files, so this should have the same effect but with
> a narrower deviation.
Thanks, Nicola.
I updated my patch.
>
>> Dmytro.
>
On 16.07.2025 18:04, Dmytro Prokopchuk1 wrote:
>
>
> On 7/15/25 13:50, Jan Beulich wrote:
>> On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
>>> ARM only are:
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>
>> This one's probably fine.
>>
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>>
>> These two look too broad: They're affecting common/grant_table.c only, aren't
>> they?
>>
>>> -config=MC3A2.R5.5,reports+={deliberate,
>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>
>> This one also looks overly broad, but it's perhaps unavoidable to be that way.
>
> Those deviations can be narrowed (specifying file name):
>
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(any_loc(file(^xen/include/xen/bitops\\.h$)) &&
> macro(name(__test_and_set_bit||__test_and_clear_bit||__test_and_change_bit||test_bit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(any_loc(file(^xen/common/grant_table\\.c$))&¯o(name(update_gnttab_par||parse_gnttab_limit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(any_loc(file(^xen/include/xen/irq\\.h$))&¯o(name(pirq_cleanup_check)))"}
>
> Are you OK with it?
This looks acceptable to me, yes.
Jan
On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
> ARM only are:
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
Hmm, I'd call these "common code" ones, but I guess you meant "anything that
would make Arm clean".
As an aside - please don't top-post.
Jan
> On 7/15/25 13:01, Jan Beulich wrote:
>> On 15.07.2025 11:46, Dmytro Prokopchuk1 wrote:
>>> Could we proceed with ARM deviations only so far?
>>> I understand Stefano's preferences, but it can unblock me to address
>>> next ARM violations.
>>
>> Hmm, ...
>>
>>> On 7/14/25 10:55, Jan Beulich wrote:
>>>> On 12.07.2025 03:13, Stefano Stabellini wrote:
>>>>> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>>>>>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>>>>>>> MISRA C Rule 5.5 states that: "Identifiers shall
>>>>>>> be distinct from macro names".
>>>>>>>
>>>>>>> Update ECLAIR configuration to deviate:
>>>>>>> - clashes in 'xen/include/xen/bitops.h';
>>>>>>> - clashes in 'xen/include/xen/irq.h';
>>>>>>> - clashes in 'xen/common/grant_table.c'.
>>>>>>>
>>>>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>>>>>>> ---
>>>>>>> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>>>>>>> docs/misra/deviations.rst | 8 ++++++++
>>>>>>> 2 files changed, 16 insertions(+)
>>>>>>>
>>>>>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>> b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>> index e8f513fbc5..a5d7b00094 100644
>>>>>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>>>>>>> defined. Peer reviewed by the c
>>>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>>>> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>>>>>>> -doc_end
>>>>>>>
>>>>>>> +-doc_begin="Clashes between function names and macros are deliberate for
>>>>>>> bitops functions, pirq_cleanup_check, update_gnttab_par and
>>>>>>> parse_gnttab_limit functions
>>>>>>> +and needed to have a function-like macro that acts as a wrapper for the
>>>>>>> function to be called. Before calling the function,
>>>>>>> +the macro adds additional checks or adjusts the number of parameters
>>>>>>> depending on the configuration."
>>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>>>>
>>>>>> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
>>>>>> "xen/arch/x86/include/asm/bitops.h"
>>>>>>
>>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>>> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>>>>>
>>>>>> I would rather do (untested)
>>>>>>
>>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>>>>
>>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>>> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>>>>>>> +-doc_end
>>>>>>> +
>>>>>>
>>>>>> same as above
>>>>>>
>>>>>
>>>>> Thanks Nicola! The following deviations are enough and sufficient to
>>>>> zero violations on both ARM and x86:
>>>>>
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
>>
>> ... in here, which of them are Arm-only?
>>
>> Jan
On 7/15/25 13:39, Jan Beulich wrote:
> On 15.07.2025 12:07, Dmytro Prokopchuk1 wrote:
>> ARM only are:
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>
> Hmm, I'd call these "common code" ones, but I guess you meant "anything that
> would make Arm clean".
>
> As an aside - please don't top-post.
>
> Jan
>
Yes, you are right. I meant "make ARM clean".
Sorry for inconvenience.
Dmytro.
>> On 7/15/25 13:01, Jan Beulich wrote:
>>> On 15.07.2025 11:46, Dmytro Prokopchuk1 wrote:
>>>> Could we proceed with ARM deviations only so far?
>>>> I understand Stefano's preferences, but it can unblock me to address
>>>> next ARM violations.
>>>
>>> Hmm, ...
>>>
>>>> On 7/14/25 10:55, Jan Beulich wrote:
>>>>> On 12.07.2025 03:13, Stefano Stabellini wrote:
>>>>>> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>>>>>>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>>>>>>>> MISRA C Rule 5.5 states that: "Identifiers shall
>>>>>>>> be distinct from macro names".
>>>>>>>>
>>>>>>>> Update ECLAIR configuration to deviate:
>>>>>>>> - clashes in 'xen/include/xen/bitops.h';
>>>>>>>> - clashes in 'xen/include/xen/irq.h';
>>>>>>>> - clashes in 'xen/common/grant_table.c'.
>>>>>>>>
>>>>>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>>>>>>>> ---
>>>>>>>> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>>>>>>>> docs/misra/deviations.rst | 8 ++++++++
>>>>>>>> 2 files changed, 16 insertions(+)
>>>>>>>>
>>>>>>>> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>>> b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>>> index e8f513fbc5..a5d7b00094 100644
>>>>>>>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>>>>>>>> @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>>>>>>>> defined. Peer reviewed by the c
>>>>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>>>>> "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>>>>>>>> -doc_end
>>>>>>>>
>>>>>>>> +-doc_begin="Clashes between function names and macros are deliberate for
>>>>>>>> bitops functions, pirq_cleanup_check, update_gnttab_par and
>>>>>>>> parse_gnttab_limit functions
>>>>>>>> +and needed to have a function-like macro that acts as a wrapper for the
>>>>>>>> function to be called. Before calling the function,
>>>>>>>> +the macro adds additional checks or adjusts the number of parameters
>>>>>>>> depending on the configuration."
>>>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>>>> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>>>>>
>>>>>>> Bitops violations are not inside "xen/include/xen/bitops.h", but rather
>>>>>>> "xen/arch/x86/include/asm/bitops.h"
>>>>>>>
>>>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>>>> "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>>>>>>
>>>>>>> I would rather do (untested)
>>>>>>>
>>>>>>> -config=MC3A2.R5.5,reports+={deliberate,
>>>>>>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>>>>>
>>>>>>>> +-config=MC3A2.R5.5,reports+={deliberate,
>>>>>>>> "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>>>>>>>> +-doc_end
>>>>>>>> +
>>>>>>>
>>>>>>> same as above
>>>>>>>
>>>>>>
>>>>>> Thanks Nicola! The following deviations are enough and sufficient to
>>>>>> zero violations on both ARM and x86:
>>>>>>
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat\\.c$)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^.*/compat/.*$)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
>>>>>> -config=MC3A2.R5.5,reports+={deliberate, "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
>>>
>>> ... in here, which of them are Arm-only?
>>>
>>> Jan
>
On 2025-07-12 03:13, Stefano Stabellini wrote:
> On Fri, 11 Jul 2025, Nicola Vetrini wrote:
>> On 2025-07-09 23:38, Dmytro Prokopchuk1 wrote:
>> > MISRA C Rule 5.5 states that: "Identifiers shall
>> > be distinct from macro names".
>> >
>> > Update ECLAIR configuration to deviate:
>> > - clashes in 'xen/include/xen/bitops.h';
>> > - clashes in 'xen/include/xen/irq.h';
>> > - clashes in 'xen/common/grant_table.c'.
>> >
>> > Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
>> > ---
>> > automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
>> > docs/misra/deviations.rst | 8 ++++++++
>> > 2 files changed, 16 insertions(+)
>> >
>> > diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
>> > b/automation/eclair_analysis/ECLAIR/deviations.ecl
>> > index e8f513fbc5..a5d7b00094 100644
>> > --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
>> > +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
>> > @@ -117,6 +117,14 @@ it defines would (in the common case) be already
>> > defined. Peer reviewed by the c
>> > -config=MC3A2.R5.5,reports+={deliberate,
>> > "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
>> > -doc_end
>> >
>> > +-doc_begin="Clashes between function names and macros are deliberate for
>> > bitops functions, pirq_cleanup_check, update_gnttab_par and
>> > parse_gnttab_limit functions
>> > +and needed to have a function-like macro that acts as a wrapper for the
>> > function to be called. Before calling the function,
>> > +the macro adds additional checks or adjusts the number of parameters
>> > depending on the configuration."
>> > +-config=MC3A2.R5.5,reports+={deliberate,
>> > "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
>>
>> Bitops violations are not inside "xen/include/xen/bitops.h", but
>> rather
>> "xen/arch/x86/include/asm/bitops.h"
>>
>> > +-config=MC3A2.R5.5,reports+={deliberate,
>> > "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
>>
>> I would rather do (untested)
>>
>> -config=MC3A2.R5.5,reports+={deliberate,
>> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
>>
>> > +-config=MC3A2.R5.5,reports+={deliberate,
>> > "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
>> > +-doc_end
>> > +
>>
>> same as above
>>
>
> Thanks Nicola! The following deviations are enough and sufficient to
> zero violations on both ARM and x86:
>
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/arch/x86/include/asm/bitops\\.h$)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^.*/compat\\.c$)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^.*/compat/.*$)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/arch/x86/x86_emulate/.*$)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "any_area(all_loc(file(^xen/arch/x86/include/asm/genapic\\.h$)))"}
Thinking a bit more about it, this deviation is perhaps a bit too wide,
though in this case it's probably fine. Probably what is actually wanted
is "all_area(all_loc(...))" . This ensures that the decl area and the
macro area of the report are in the same file, which is almost always
the case for deliberate shadowing. If that turns out to be too strict,
then we may do "all_area(any_loc(...))", ensuring that at least there is
a loc for the macro and decl in that file.
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(parse_gnttab_limit))||macro(name(parse_gnttab_limit)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(update_gnttab_par))||macro(name(update_gnttab_par)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(pirq_cleanup_check))||macro(name(pirq_cleanup_check)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(virt_to_maddr))||macro(name(virt_to_maddr)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(set_px_pminfo))||macro(name(set_px_pminfo)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(set_cx_pminfo))||macro(name(set_cx_pminfo)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(copy_to_guest_ll))||macro(name(copy_to_guest_ll)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(copy_from_guest_ll))||macro(name(copy_from_guest_ll)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(edd_put_string))||macro(name(edd_put_string)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(cpu_has_amd_erratum))||macro(name(cpu_has_amd_erratum)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(page_list_entry))||macro(name(page_list_entry)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(do_physdev_op))||macro(name(do_physdev_op)))"}
> -config=MC3A2.R5.5,reports+={deliberate,
> "all_area(decl(name(do_platform_op))||macro(name(do_platform_op)))"}
>
> Jan, are you OK with it?
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
On Wed, 9 Jul 2025, Dmytro Prokopchuk1 wrote:
> MISRA C Rule 5.5 states that: "Identifiers shall
> be distinct from macro names".
>
> Update ECLAIR configuration to deviate:
> - clashes in 'xen/include/xen/bitops.h';
> - clashes in 'xen/include/xen/irq.h';
> - clashes in 'xen/common/grant_table.c'.
>
> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
Hi Dmytro,
I tried to apply the patch and run a pipeline but it only results clean
on ARM but not on x86. There are 2087 outstanding violations:
https://gitlab.com/xen-project/people/sstabellini/xen/-/pipelines/1919889048
https://saas.eclairit.com:3787/fs/var/local/eclair/xen-project.ecdf/xen-project/people/sstabellini/xen/ECLAIR_normal/ppp1-1/X86_64/10644506983/PROJECT.ecd;/by_service/MC3A2.R5.5.html#{%22select%22:true,%22selection%22:{%22hiddenAreaKinds%22:[],%22hiddenSubareaKinds%22:[],%22show%22:false,%22selector%22:{%22enabled%22:true,%22negated%22:true,%22kind%22:0,%22domain%22:%22kind%22,%22inputs%22:[{%22enabled%22:true,%22text%22:%22violation%22}]}}}
Jan, Andrew, Roger,
About half of them are from bitops.h which could be deviated the same
way xen/include/xen/bitops.h is deviated in this patch.
xen/arch/x86/include/asm/x86_64/page.h:virt_to_maddr could be deviated
too.
I don't know how to handle the rest or even how to configure the
deviation in Eclair. These are the results with those two deviations
added:
https://saas.eclairit.com:3787/fs/var/local/eclair/xen-project.ecdf/xen-project/people/sstabellini/xen/ECLAIR_normal/ppp1-2/X86_64/10644744316/PROJECT.ecd;/by_service/MC3A2.R5.5.html#{%22select%22:true,%22selection%22:{%22hiddenAreaKinds%22:[],%22hiddenSubareaKinds%22:[],%22show%22:false,%22selector%22:{%22enabled%22:true,%22negated%22:true,%22kind%22:0,%22domain%22:%22kind%22,%22inputs%22:[{%22enabled%22:true,%22text%22:%22violation%22}]}}}
We only have 49 left. Any suggestions on how to handle them so that we
can mark the rule as "clean" and stop future regressions in the CI
loop?
> ---
> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
> docs/misra/deviations.rst | 8 ++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl b/automation/eclair_analysis/ECLAIR/deviations.ecl
> index e8f513fbc5..a5d7b00094 100644
> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> @@ -117,6 +117,14 @@ it defines would (in the common case) be already defined. Peer reviewed by the c
> -config=MC3A2.R5.5,reports+={deliberate, "any_area(decl(kind(function))||any_loc(macro(name(memcpy||memset||memmove))))&&any_area(any_loc(file(^xen/common/libelf/libelf-private\\.h$)))"}
> -doc_end
>
> +-doc_begin="Clashes between function names and macros are deliberate for bitops functions, pirq_cleanup_check, update_gnttab_par and parse_gnttab_limit functions
> +and needed to have a function-like macro that acts as a wrapper for the function to be called. Before calling the function,
> +the macro adds additional checks or adjusts the number of parameters depending on the configuration."
> +-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/bitops\\.h$)))"}
> +-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/include/xen/irq\\.h$))&&context(name(pirq_cleanup_check)&&kind(function)))"}
> +-config=MC3A2.R5.5,reports+={deliberate, "any_area(all_loc(file(^xen/common/grant_table\\.c$))&&context(name(update_gnttab_par||parse_gnttab_limit)&&kind(function)))"}
> +-doc_end
> +
> -doc_begin="The type \"ret_t\" is deliberately defined multiple times,
> depending on the guest."
> -config=MC3A2.R5.6,reports+={deliberate,"any_area(any_loc(text(^.*ret_t.*$)))"}
> diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst
> index 0d56d45b66..fe05e4062e 100644
> --- a/docs/misra/deviations.rst
> +++ b/docs/misra/deviations.rst
> @@ -142,6 +142,14 @@ Deviations related to MISRA C:2012 Rules:
> memmove.
> - Tagged as `deliberate` for ECLAIR.
>
> + * - R5.5
> + - Clashes between function names and macros are deliberate for bitops functions,
> + pirq_cleanup_check, update_gnttab_par and parse_gnttab_limit functions and needed
> + to have a function-like macro that acts as a wrapper for the function to be
> + called. Before calling the function, the macro adds additional checks or
> + adjusts the number of parameters depending on the configuration.
> + - Tagged as `deliberate` for ECLAIR.
> +
> * - R5.6
> - The type ret_t is deliberately defined multiple times depending on the
> type of guest to service.
> --
> 2.43.0
>
© 2016 - 2025 Red Hat, Inc.