arm-trusted-firmware/docs/process/misra-compliance.csv
Sandrine Bailleux 6c2c8528ac docs: import MISRA compliance spreadsheet
TF-A aims to comply with MISRA C:2012 Guidelines. We maintain a list of
all rules and directives and whether the project aims to comply with
them or not. A rationale is given for each deviation.

This list used to be provided as an '.ods' spreadsheet file hosted on
developer.trustedfirmware.org. This raises the following issues:

 - The list is not version-controlled under the same scheme as TF-A
   source code. This could lead to synchronization issues between the
   two.

 - The file needs to be open in a separate program, which is not as
   straightforward as reading it from TF-A documentation itself.

 - developer.trustedfirmware.org is deprecated, thus the file cannot be
   safely kept there for any longer.

To address these issues, convert the '.ods' file into a CSV (Comma
Separated Values) file, which we import into TF-A source tree itself.
Make use of Sphinx's ability to process and render CSV files as tables
to display that information directly into the Coding Guidelines
document.

Also make the following minor changes along the way:

 - Remove dead link to MISRA C:2012 Guidelines page. Replace it with a
   link to a Wikipedia page to give a bit of context to the reader.

 - We no longer use Coverity for MISRA compliance checks. Instead, we
   use ECLAIR nowadays. Reflect this in the document.

Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Change-Id: I422fdd8246f4f9c2498c1be18115408a873b86ac
2024-01-29 11:43:51 +01:00

10 KiB
Raw Blame History

1SeqDir / RuleNumberSourceCategoryChecker EnabledEnforcedComments
21D1.1MISRA C 2012RequiredN/AYes
32D2.1MISRA C 2012RequiredN/AYes
43D3.1MISRA C 2012RequiredN/ANoIt cant be done retroactively.
54D4.1MISRA C 2012RequiredN/AYes
65D4.2MISRA C 2012AdvisoryN/AYes
76D4.3MISRA C 2012RequiredYesYes
87D4.4MISRA C 2012AdvisoryYesYes
98D4.5MISRA C 2012AdvisoryYesYes
109D4.6MISRA C 2012AdvisoryNoNoWe use a mix of both. It would be too disruptive for the project to change.
1110D4.7MISRA C 2012RequiredYesYes
1211D4.8MISRA C 2012AdvisoryNoNoFixing all instances would involve invasive changes to the codebase for no good reason.
1312D4.9MISRA C 2012AdvisoryNoNoWe mustnt introduce new macros unless strictly needed, but this affects assert(), INFO(), etc. It creates too much noise in the report for little gain.
1413D4.10MISRA C 2012RequiredYesYes
1514D4.11MISRA C 2012RequiredYesYes
1615D4.12MISRA C 2012RequiredYesYes
1716D4.13MISRA C 2012AdvisoryYesYes
1817D4.14MISRA C 2012 AMD-1RequiredYesYes
1918R1.1MISRA C 2012RequiredYesYes
2019R1.2MISRA C 2012AdvisoryYesOptionalIt bans __attribute__(()) and similar helpers.
2120R1.3MISRA C 2012RequiredN/AYes
2221R2.1MISRA C 2012RequiredYesYes
2322R2.2MISRA C 2012RequiredYesYes
2423R2.3MISRA C 2012AdvisoryYesOptionalIt prevents the usage of CASSERT().
2524R2.4MISRA C 2012AdvisoryNoNoHeader files may use enumerations instead of defines to group sets of values.
2625R2.5MISRA C 2012AdvisoryNoNoWe define many headers with macros that are unused in the project but may be used by non-upstream code or may be desirable for completeness.
2726R2.6MISRA C 2012AdvisoryYesYes
2827R2.7MISRA C 2012AdvisoryNoNoDoesn't allow for simple implementations of porting functions that don't require all parameters.
2928R3.1MISRA C 2012RequiredYesYes
3029R3.2MISRA C 2012RequiredYesYes
3130R4.1MISRA C 2012RequiredYesYes
3231R4.2MISRA C 2012AdvisoryYesYes
3332R5.1MISRA C 2012RequiredNoNoWe use weak symbols that prevent us from complying with this rule.
3433R5.2MISRA C 2012RequiredYesYes
3534R5.3MISRA C 2012RequiredYesYes
3635R5.4MISRA C 2012RequiredYesYes
3736R5.5MISRA C 2012RequiredYesYes
3837R5.6MISRA C 2012RequiredYesYes
3938R5.7MISRA C 2012RequiredYesOptionalFixing all existing defects is problematic because of compatibility issues.
4039R5.8MISRA C 2012RequiredNoNoWe use weak symbols that prevent us from complying with this rule.
4140R5.9MISRA C 2012AdvisoryYesYes
4241R6.1MISRA C 2012RequiredYesYes
4342R6.2MISRA C 2012RequiredYesYes
4443R7.1MISRA C 2012RequiredYesYes
4544R7.2MISRA C 2012RequiredYesYes
4645R7.3MISRA C 2012RequiredYesYes
4746R7.4MISRA C 2012RequiredYesYes
4847R8.1MISRA C 2012RequiredYesYes
4948R8.2MISRA C 2012RequiredYesYes
5049R8.3MISRA C 2012RequiredYesYes
5150R8.4MISRA C 2012RequiredYesYes
5251R8.5MISRA C 2012RequiredYesYes
5352R8.6MISRA C 2012RequiredNoNoWe use weak symbols that prevent us from complying with this rule.
5453R8.7MISRA C 2012AdvisoryNoNoBans pattern of declaring funcs in private header that are used/defined in separate translation units, which seems over the top.
5554R8.8MISRA C 2012RequiredYesYes
5655R8.9MISRA C 2012AdvisoryYesYes
5756R8.10MISRA C 2012RequiredYesYes
5857R8.11MISRA C 2012AdvisoryYesOptionalThis may not be possible in some interfaces.
5958R8.12MISRA C 2012RequiredYesYes
6059R8.13MISRA C 2012AdvisoryYesOptionalThe benefits of fixing existing code arent worth the effort.
6160R8.14MISRA C 2012RequiredYesYes
6261R9.1MISRA C 2012MandatoryYesYes
6362R9.2MISRA C 2012RequiredYesYes
6463R9.3MISRA C 2012RequiredYesYes
6564R9.4MISRA C 2012RequiredYesYes
6665R9.5MISRA C 2012RequiredYesYes
6766R10.1MISRA C 2012RequiredYesOptionalFixing existing code may be counter-productive and introduce bugs.
6867R10.2MISRA C 2012RequiredYesYes
6968R10.3MISRA C 2012RequiredYesOptionalFixing existing code may be counter-productive and introduce bugs.
7069R10.4MISRA C 2012RequiredYesOptionalFixing existing code may be counter-productive and introduce bugs.
7170R10.5MISRA C 2012AdvisoryYesYes
7271R10.6MISRA C 2012RequiredYesYes
7372R10.7MISRA C 2012RequiredYesYes
7473R10.8MISRA C 2012RequiredYesYes
7574R11.1MISRA C 2012RequiredYesYes
7675R11.2MISRA C 2012RequiredYesYes
7776R11.3MISRA C 2012RequiredYesYes
7877R11.4MISRA C 2012AdvisoryNoNoThis would be invasive for TF (e.g. in exported linker script macros). Also bans conversion from uintptr_t.
7978R11.5MISRA C 2012AdvisoryNoNoThis seems to preclude the pattern of using void * in interfaces to hide the real object, which we use extensively.
8079R11.6MISRA C 2012RequiredYesOptionalThis is needed in several cases.
8180R11.7MISRA C 2012RequiredYesYes
8281R11.8MISRA C 2012RequiredYesYes
8382R11.9MISRA C 2012RequiredYesYes
8483R12.1MISRA C 2012AdvisoryYesYes
8584R12.2MISRA C 2012RequiredYesYesThis rule is fine, but there are lots of false positives in Coverity.
8685R12.3MISRA C 2012AdvisoryYesYes
8786R12.4MISRA C 2012AdvisoryYesYes
8887R12.5MISRA C 2012 AMD-1MandatoryYesYes
8988R13.1MISRA C 2012RequiredYesYes
9089R13.2MISRA C 2012RequiredYesYes
9190R13.3MISRA C 2012AdvisoryYesYes
9291R13.4MISRA C 2012AdvisoryYesYes
9392R13.5MISRA C 2012RequiredYesYes
9493R13.6MISRA C 2012MandatoryYesYes
9594R14.1MISRA C 2012RequiredYesYes
9695R14.2MISRA C 2012RequiredYesYes
9796R14.3MISRA C 2012RequiredYesYes
9897R14.4MISRA C 2012RequiredYesYes
9998R15.1MISRA C 2012AdvisoryNoNoIn some cases goto may be useful for readability.
10099R15.2MISRA C 2012RequiredYesYes
101100R15.3MISRA C 2012RequiredYesYes
102101R15.4MISRA C 2012AdvisoryYesYes
103102R15.5MISRA C 2012AdvisoryNoNoThis has no real value. It may make code less understandable than before.
104103R15.6MISRA C 2012RequiredNoNoThis directly contradicts the Linux style guidelines and would require many changes. We would have to remove that rule from checkpatch.
105104R15.7MISRA C 2012RequiredYesYes
106105R16.1MISRA C 2012RequiredNoNoCannot comply with this unless we comply with 16.3
107106R16.2MISRA C 2012RequiredYesYes
108107R16.3MISRA C 2012RequiredNoNoReturns within switch statements and fall-throughs can improve readability.
109108R16.4MISRA C 2012RequiredYesYes
110109R16.5MISRA C 2012RequiredYesYes
111110R16.6MISRA C 2012RequiredYesYes
112111R16.7MISRA C 2012RequiredYesYes
113112R17.1MISRA C 2012RequiredNoNoThis is needed for printf.
114113R17.2MISRA C 2012RequiredYesYesBans recursion. We consider it acceptable if the max depth is known.
115114R17.3MISRA C 2012MandatoryYesYes
116115R17.4MISRA C 2012MandatoryYesYes
117116R17.5MISRA C 2012AdvisoryYesYes
118117R17.6MISRA C 2012MandatoryYesYes
119118R17.7MISRA C 2012RequiredYesOptionalIn some cases it doesnt add any value to the code (like with memset() or printf()).
120119R17.8MISRA C 2012AdvisoryYesOptionalIt would make some one-line functions grow in size for no reason.
121120R18.1MISRA C 2012RequiredYesYes
122121R18.2MISRA C 2012RequiredYesYes
123122R18.3MISRA C 2012RequiredYesYes
124123R18.4MISRA C 2012AdvisoryYesYes
125124R18.5MISRA C 2012AdvisoryYesYes
126125R18.6MISRA C 2012RequiredYesYes
127126R18.7MISRA C 2012RequiredYesYes
128127R18.8MISRA C 2012RequiredYesYes
129128R19.1MISRA C 2012MandatoryYesYes
130129R19.2MISRA C 2012AdvisoryYesOptionalUnions can be useful. We almost dont use them, so its ok.
131130R20.1MISRA C 2012AdvisoryYesOptionalIn some files we have assembly-compatible includes followed by assembly-compatible definitions followed by C includes and C declarations. This is done to not have #ifdef in the include list.
132131R20.2MISRA C 2012RequiredYesYes
133132R20.3MISRA C 2012RequiredYesYes
134133R20.4MISRA C 2012RequiredYesYes
135134R20.5MISRA C 2012AdvisoryYesYes
136135R20.6MISRA C 2012RequiredYesYes
137136R20.7MISRA C 2012RequiredYesYes
138137R20.8MISRA C 2012RequiredYesOptionalWe need a new configuration system to fix all defects.
139138R20.9MISRA C 2012RequiredYesOptionalWe use a mix of #if and #ifdef for boolean macros, which may raise some failures here. We should consistently use one or the other
140139R20.10MISRA C 2012AdvisoryYesOptionalIts good to avoid them, but they are sometimes needed.
141140R20.11MISRA C 2012RequiredYesYes
142141R20.12MISRA C 2012RequiredYesYes
143142R20.13MISRA C 2012RequiredYesYes
144143R20.14MISRA C 2012RequiredYesYes
145144R21.1MISRA C 2012RequiredYesYes
146145R21.2MISRA C 2012RequiredYesYes
147146R21.3MISRA C 2012RequiredYesYes
148147R21.4MISRA C 2012RequiredYesYes
149148R21.5MISRA C 2012RequiredYesYes
150149R21.6MISRA C 2012RequiredNoNoThis bans printf.
151150R21.7MISRA C 2012RequiredYesYes
152151R21.8MISRA C 2012RequiredYesYes
153152R21.9MISRA C 2012RequiredYesYes
154153R21.10MISRA C 2012RequiredYesYes
155154R21.11MISRA C 2012RequiredYesYes
156155R21.12MISRA C 2012AdvisoryYesYes
157156R21.13MISRA C 2012 AMD-1MandatoryYesYes
158157R21.14MISRA C 2012 AMD-1RequiredYesYes
159158R21.15MISRA C 2012 AMD-1RequiredYesYes
160159R21.16MISRA C 2012 AMD-1RequiredYesYes
161160R21.17MISRA C 2012 AMD-1MandatoryYesYes
162161R21.18MISRA C 2012 AMD-1MandatoryYesYes
163162R21.19MISRA C 2012 AMD-1MandatoryYesYes
164163R21.20MISRA C 2012 AMD-1MandatoryYesYes
165164R22.1MISRA C 2012RequiredYesYes
166165R22.2MISRA C 2012MandatoryYesYes
167166R22.3MISRA C 2012RequiredYesYes
168167R22.4MISRA C 2012MandatoryYesYes
169168R22.5MISRA C 2012MandatoryYesYes
170169R22.6MISRA C 2012MandatoryYesYes
171170R22.7MISRA C 2012 AMD-1RequiredYesYes
172171R22.8MISRA C 2012 AMD-1RequiredYesYes
173172R22.9MISRA C 2012 AMD-1RequiredYesYes
174173R22.10MISRA C 2012 AMD-1RequiredYesYes