|
[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 28.04.2025 10:09, Nicola Vetrini wrote:
> On 2025-04-28 08:15, Jan Beulich wrote:
>> On 25.04.2025 17:53, Nicola Vetrini wrote:
>>> On 2025-04-25 10:07, Jan Beulich wrote:
>>>> On 24.04.2025 23:45, Stefano Stabellini wrote:
>>>>> On Thu, 24 Apr 2025, Jan Beulich wrote:
>>>>>> On 23.04.2025 19: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>
>>>>>>
>>>>>> While the rule is in the library section, ...
>>>>>>
>>>>>>> --- 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.
>>>>>>
>>>>>> ... I'd like to ask that it be explicitly clarified here that it's
>>>>>> solely
>>>>>> the library (and not e.g. the compiler itself) that are of concern
>>>>>> here.
>>>>>
>>>>> The language can be clarified:
>>>>>
>>>>> - 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 C and POSIX standard
>>>>> libraries
>>>>> identifiers except for those beginning with `__builtin_` for which
>>>>> compilers may perform (wrong) optimizations.
>>>>
>>>> Which makes it more apparent that there is a gap: What about e.g.
>>>> __x86_64__?
>>>> That falls within what the rules cover, is not a C or POSIX standard
>>>> library
>>>> identifier, yet very clearly must not be fiddled with. Whereas the
>>>> text
>>>> above deviates it.
>>>
>>> that is true, even if unlikely: one approach could be to avoid
>>> deviating
>>> predefined macros for all CUs as -nostdinc and -fno-builtins should
>>> take
>>> care of the rest; this kind of deviation is not currently possible in
>>> ECLAIR, but it might be in the future.
>>
>> Is this perhaps because by "all pre-defined macros" you really mean
>> _just_
>> those, and not the entire reserved (for that purpose) sub-namespace?
>> Imo
>> we should not go by what a particular compiler may pre-define (we may
>> even
>> overlook something if we did it this way).
>>
>> Jan
>>
>
> I think there is a slight misalignment here: maybe I'm interpreting your
> answer incorrectly. Let me try to restate the proposal: the following
> identifiers are not allowed to be #define'd or #undef'd:
> - __builtin_*
> - for each CU, all macro identifiers already defined upon preprocessing
> that CU by the compiler invocation for that CU. This set of identifiers
> is always a subset of all the reserved identifiers, but is also
> dependent on the compiler invocation that is used for that CU, (e.g.
> __x86_64__ for an Arm target is usually safe to define, as it's
> typically not a predefined macro introduced by the compiler for that
> invocation,
No, it's not - elsewhere in the tree we may use this to distinguish
architectures. Plus isn't Misra heavily about avoiding developer
confusion? Defining __x86_64__ on Arm code is, imo, a pretty confusing
thing to do.
> while (re)defining __STDC_VERSION__ or __SIZEOF_INT__ will
> be a violation in any command line I can think of). Note that this is
> not a static set, but is based on what is determined to be predefined at
> the moment of the analysis, so it is not tied to what a particular
> compiler pre-defines.
Right. Yet what I'm trying to get to is that we disallow _all_ such
reserved identifiers, not just a subset.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |