MCUX CLNS
MCUX Crypto Library Normal Secure
mcuxCsslAnalysis.h
1 /*--------------------------------------------------------------------------*/
2 /* Copyright 2022-2023 NXP */
3 /* */
4 /* NXP Confidential. This software is owned or controlled by NXP and may */
5 /* only be used strictly in accordance with the applicable license terms. */
6 /* By expressly accepting such terms or by downloading, installing, */
7 /* activating and/or otherwise using the software, you are agreeing that */
8 /* you have read, and that you agree to comply with and are bound by, such */
9 /* license terms. If you do not agree to be bound by the applicable license */
10 /* terms, then you may not retain, install, activate or otherwise use the */
11 /* software. */
12 /*--------------------------------------------------------------------------*/
13 /* Security Classification: Company Confidential */
14 /*--------------------------------------------------------------------------*/
15 
16 #ifndef MCUX_CSSL_ANALYSIS_H_
17 #define MCUX_CSSL_ANALYSIS_H_
18 
19 #define MCUX_CSSL_ANALYSIS_STR(a) #a
20 #define MCUX_CSSL_ANALYSIS_EMPTY()
21 #define MCUX_CSSL_ANALYSIS_DEFER(id) id MCUX_CSSL_ANALYSIS_EMPTY()
22 #define MCUX_CSSL_ANALYSIS_EXPAND(...) __VA_ARGS__
23 
24 #define MCUX_CSSL_ANALYSIS_PRAGMA(x) _Pragma(#x)
25 
26 /* Example of common patterns, with either just predefined rationale, or a combination of discards. */
27 #define MCUX_CSSL_ANALYSIS_START_PATTERN_HW_READ() \
28  MCUX_CSSL_ANALYSIS_START_SUPPRESS_CAST_TO_OBJECT("Read from a HW peripheral")
29 #define MCUX_CSSL_ANALYSIS_STOP_PATTERN_HW_READ() \
30  MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_CAST_TO_OBJECT()
31 
32 #define MCUX_CSSL_ANALYSIS_START_PATTERN_HW_WRITE() \
33  MCUX_CSSL_ANALYSIS_START_SUPPRESS_DISCARD_VOLATILE("Write to a HW peripheral") \
34  MCUX_CSSL_ANALYSIS_START_SUPPRESS_CAST_TO_OBJECT("Write to a HW peripheral")
35 
36 #define MCUX_CSSL_ANALYSIS_STOP_PATTERN_HW_WRITE() \
37  MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_CAST_TO_OBJECT() \
38  MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_DISCARD_VOLATILE()
39 
40 /* Example of basic violation suppression */
41 #define MCUX_CSSL_ANALYSIS_START_SUPPRESS_DISCARD_VOLATILE(rationale) \
42  MCUX_CSSL_ANALYSIS_CLANG_START_SUPPRESS_WARNING("-Wcast-qual", rationale) \
43  MCUX_CSSL_ANALYSIS_GHS_START_SUPPRESS_WARNING(1836, rationale) \
44  MCUX_CSSL_ANALYSIS_COVERITY_START_SUPPRESS_MISRA(11.8, rationale)
45 
46 
47 #define MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_DISCARD_VOLATILE() \
48  MCUX_CSSL_ANALYSIS_COVERITY_STOP_SUPPRESS_MISRA("11.8") \
49  MCUX_CSSL_ANALYSIS_GHS_STOP_SUPPRESS_WARNING("1836") \
50  MCUX_CSSL_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING("-Wcast-qual")
51 
52 #define MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_FALSE_POSITIVE_10_1() \
53  MCUX_CSSL_ANALYSIS_COVERITY_STOP_SUPPRESS_MISRA(10.1) \
54 
55 #define MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_FALSE_POSITIVE_14_3() \
56  MCUX_CSSL_ANALYSIS_COVERITY_STOP_SUPPRESS_MISRA(14.3) \
57 
58 #define MCUX_CSSL_ANALYSIS_START_SUPPRESS_FALSE_POSITIVE_10_1(rationale) \
59  MCUX_CSSL_ANALYSIS_COVERITY_START_SUPPRESS_MISRA(10.1, rationale) \
60 
61 #define MCUX_CSSL_ANALYSIS_START_SUPPRESS_FALSE_POSITIVE_14_3(rationale) \
62  MCUX_CSSL_ANALYSIS_COVERITY_START_SUPPRESS_MISRA(14.3, rationale) \
63 
64 /* Tool specific handling: Coverity MISRA */
65 /* TODO: functionality still to be verified for ICCARM as part of CLNS-5992 */
66 #if defined(__ghs__) || defined(__gcc__) || defined(__ICCARM__) || defined(__GNUC__)
67 
68 #define MCUX_CSSL_ANALYSIS_COVERITY_START_SUPPRESS_MISRA(rule_identifier, rationale) \
69  MCUX_CSSL_ANALYSIS_EXPAND(MCUX_CSSL_ANALYSIS_DEFER(MCUX_CSSL_ANALYSIS_PRAGMA)(coverity compliance block deviate MCUX_CSSL_ANALYSIS_STR(MISRA C-2012 Rule rule_identifier) MCUX_CSSL_ANALYSIS_STR(rationale)))
70 
71 #define MCUX_CSSL_ANALYSIS_COVERITY_STOP_SUPPRESS_MISRA(rule_identifier) \
72  MCUX_CSSL_ANALYSIS_EXPAND(MCUX_CSSL_ANALYSIS_DEFER(MCUX_CSSL_ANALYSIS_PRAGMA)(coverity compliance end_block MCUX_CSSL_ANALYSIS_STR(MISRA C-2012 Rule rule_identifier)))
73 
74 
75 #elif defined(__clang__) || defined(__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
76  /* ... */
77 #else
78  #error Unsupported toolchain, \
79  Please add a proper definition for MCUX_CSSL_ANALYSIS_COVERITY_*_SUPPRESS_MISRA for your toolchain
80 #endif
81 
82 /* Tool specific handling: Clang warnings */
83 #if defined(__clang__)
84 #define MCUX_CSSL_ANALYSIS_CLANG_START_SUPPRESS_WARNING(warning_identifier, rationale) \
85  _Pragma("clang diagnostic push") \
86  _Pragma("clang diagnostic ignored \"" warning_identifier "\"")
87 #define MCUX_CSSL_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(warning_identifier) \
88  _Pragma("clang diagnostic pop")
89 #else
90 #define MCUX_CSSL_ANALYSIS_CLANG_START_SUPPRESS_WARNING(warning_identifier, rationale)
91 #define MCUX_CSSL_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(warning_identifier)
92 #endif
93 
94 /* Tool specific handling: GHS warnings */
95 #ifdef __ghs__
96 #define MCUX_CSSL_ANALYSIS_GHS_START_SUPPRESS_WARNING(warning_identifier, rationale) \
97  _Pragma("ghs nowarning " ## warning_identifier)
98 #define MCUX_CSSL_ANALYSIS_GHS_STOP_SUPPRESS_WARNING(warning_identifier) \
99  _Pragma("ghs endnowarning")
100 #else
101 #define MCUX_CSSL_ANALYSIS_GHS_START_SUPPRESS_WARNING(warning_identifier, rationale)
102 #define MCUX_CSSL_ANALYSIS_GHS_STOP_SUPPRESS_WARNING(warning_identifier)
103 #endif
104 
105 #endif /* MCUX_CSSL_CORE_ANALYSIS_H_ */