19 #ifndef MCUX_CSSL_FLOW_PROTECTION_SECURE_COUNTER_COMMON_H_ 20 #define MCUX_CSSL_FLOW_PROTECTION_SECURE_COUNTER_COMMON_H_ 24 #include <mcuxCsslAnalysis.h> 63 #define MCUX_CSSL_FP_DECL_NAME(type, id) \ 64 MCUX_CSSL_CPP_CAT4(mcuxCsslFlowProtection_, type, _, id) 75 #define MCUX_CSSL_FP_DECL_IMPL(type, id) \ 76 MCUX_CSSL_SC_VALUE_TYPE MCUX_CSSL_FP_DECL_NAME(type, id) = \ 77 MCUX_CSSL_CPP_CAT3(MCUX_CSSL_FP_, type, _ID)(id) 86 #define MCUX_CSSL_FP_ID_IMPL() \ 87 MCUX_CSSL_CPP_CAT(__LINE__, u) 106 #define MCUX_CSSL_FP_EXPECTATIONS(...) \ 107 (MCUX_CSSL_CPP_MAP(MCUX_CSSL_CPP_ADD, __VA_ARGS__)) 121 #define MCUX_CSSL_FP_COUNTER_STMT_IMPL(statement) \ 135 #define MCUX_CSSL_FP_CONDITIONAL_IMPL(condition, ...) \ 136 (MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) & ((condition) ? ((uint32_t) UINT32_MAX) : ((uint32_t) 0))) 148 #define MCUX_CSSL_FP_VOID_EXPECTATION_IMPL() \ 164 #define MCUX_CSSL_FP_EXPECT_IMPL(...) \ 166 MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) \ 188 #define MCUX_CSSL_FP_FUNCTION_ID(id) \ 189 MCUX_CSSL_CPP_CAT(MCUX_CSSL_FP_FUNCID_, id) 196 #define MCUX_CSSL_FP_FUNCTION_ID_ENTRY_MASK \ 206 #define MCUX_CSSL_FP_FUNCTION_ID_ENTRY_PART(id) \ 207 (MCUX_CSSL_FP_FUNCTION_VALUE(id) & MCUX_CSSL_FP_FUNCTION_ID_ENTRY_MASK) 216 #define MCUX_CSSL_FP_FUNCTION_ID_EXIT_PART(id) \ 217 (MCUX_CSSL_FP_FUNCTION_VALUE(id) - MCUX_CSSL_FP_FUNCTION_ID_ENTRY_PART(id)) 230 #define MCUX_CSSL_FP_FUNCTION_DECL_IMPL(...) \ 241 #define MCUX_CSSL_FP_FUNCTION_VALUE(id) \ 242 MCUX_CSSL_FP_FUNCTION_ID(id) 254 #define MCUX_CSSL_FP_FUNCTION_DEF_IMPL(...) \ 265 #define MCUX_CSSL_FP_FUNCTION_POINTER_IMPL(type, definition) \ 273 #define MCUX_CSSL_FP_RESULT_OFFSET \ 281 #define MCUX_CSSL_FP_RESULT_MASK \ 291 #define MCUX_CSSL_FP_RESULT_VALUE(result) \ 292 (((uint64_t)(result) & MCUX_CSSL_FP_RESULT_MASK) << MCUX_CSSL_FP_RESULT_OFFSET) 301 #define MCUX_CSSL_FP_RESULT_IMPL(return) \ 302 (uint32_t)(((return) >> MCUX_CSSL_FP_RESULT_OFFSET) & MCUX_CSSL_FP_RESULT_MASK) 309 #define MCUX_CSSL_FP_PROTECTION_OFFSET \ 317 #define MCUX_CSSL_FP_PROTECTION_MASK \ 330 #define MCUX_CSSL_FP_PROTECTION_TOKEN_VALUE(token) \ 331 ((((uint64_t)(token) & MCUX_CSSL_FP_PROTECTION_MASK)) << MCUX_CSSL_FP_PROTECTION_OFFSET) 343 #define MCUX_CSSL_FP_PROTECTION_TOKEN_IMPL(return) \ 344 (uint32_t)(((return) >> MCUX_CSSL_FP_PROTECTION_OFFSET) & MCUX_CSSL_FP_PROTECTION_MASK) 352 #define MCUX_CSSL_FP_COUNTER_COMPRESSED() \ 369 #define MCUX_CSSL_FP_FUNCTION_CALLED_IMPL(id) \ 370 MCUX_CSSL_FP_FUNCTION_VALUE(id) 386 #define MCUX_CSSL_FP_FUNCTION_ENTERED_IMPL(id) \ 387 MCUX_CSSL_FP_FUNCTION_ID_ENTRY_PART(id) 408 #define MCUX_CSSL_FP_LOOP_ID(id) \ 409 MCUX_CSSL_FP_ID_IMPL() 418 #define MCUX_CSSL_FP_LOOP_DECL_IMPL(id) \ 419 MCUX_CSSL_FP_DECL_IMPL(LOOP, id) 429 #define MCUX_CSSL_FP_LOOP_VALUE(id) \ 430 MCUX_CSSL_FP_DECL_NAME(LOOP, id) 443 #define MCUX_CSSL_FP_LOOP_ITERATION_IMPLn(id, ...) \ 445 MCUX_CSSL_FP_LOOP_VALUE(id) \ 446 - MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) \ 459 #define MCUX_CSSL_FP_LOOP_ITERATION_IMPL1(id) \ 460 MCUX_CSSL_FP_LOOP_ITERATION_IMPLn(id, 0u) 476 #define MCUX_CSSL_FP_LOOP_ITERATION_IMPL(...) \ 477 MCUX_CSSL_CPP_OVERLOADED1(MCUX_CSSL_FP_LOOP_ITERATION_IMPL, __VA_ARGS__) 487 #define MCUX_CSSL_FP_LOOP_ITERATIONS_IMPL(id, count) \ 488 ((count) * MCUX_CSSL_FP_LOOP_VALUE(id)) 510 #define MCUX_CSSL_FP_BRANCH_ID(id) \ 511 MCUX_CSSL_FP_ID_IMPL() 520 #define MCUX_CSSL_FP_BRANCH_DECL_IMPL(id) \ 521 MCUX_CSSL_FP_DECL_IMPL(BRANCH, id) 531 #define MCUX_CSSL_FP_BRANCH_VALUE(id) \ 532 MCUX_CSSL_FP_DECL_NAME(BRANCH, id) 539 #define MCUX_CSSL_FP_BRANCH_POSITIVE_VALUE 0x5u 546 #define MCUX_CSSL_FP_BRANCH_NEGATIVE_VALUE 0xAu 562 #define MCUX_CSSL_FP_BRANCH_SCENARIO_IMPL(id, scenario, ...) \ 564 (MCUX_CSSL_FP_BRANCH_VALUE(id) * (scenario)) \ 565 - MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) \ 582 #define MCUX_CSSL_FP_BRANCH_POSITIVE_IMPLn(id, ...) \ 583 MCUX_CSSL_FP_BRANCH_SCENARIO_IMPL(id, MCUX_CSSL_FP_BRANCH_POSITIVE_VALUE, \ 598 #define MCUX_CSSL_FP_BRANCH_POSITIVE_IMPL1(id) \ 599 MCUX_CSSL_FP_BRANCH_SCENARIO_IMPL(id, MCUX_CSSL_FP_BRANCH_POSITIVE_VALUE, 0u) 616 #define MCUX_CSSL_FP_BRANCH_POSITIVE_IMPL(...) \ 617 MCUX_CSSL_CPP_OVERLOADED1(MCUX_CSSL_FP_BRANCH_POSITIVE_IMPL, __VA_ARGS__) 633 #define MCUX_CSSL_FP_BRANCH_NEGATIVE_IMPLn(id, ...) \ 634 MCUX_CSSL_FP_BRANCH_SCENARIO_IMPL(id, MCUX_CSSL_FP_BRANCH_NEGATIVE_VALUE, \ 649 #define MCUX_CSSL_FP_BRANCH_NEGATIVE_IMPL1(id) \ 650 MCUX_CSSL_FP_BRANCH_SCENARIO_IMPL(id, MCUX_CSSL_FP_BRANCH_NEGATIVE_VALUE, 0u) 667 #define MCUX_CSSL_FP_BRANCH_NEGATIVE_IMPL(...) \ 668 MCUX_CSSL_CPP_OVERLOADED1(MCUX_CSSL_FP_BRANCH_NEGATIVE_IMPL, __VA_ARGS__) 682 #define MCUX_CSSL_FP_BRANCH_TAKEN_IMPL(id, scenario, condition) \ 683 MCUX_CSSL_FP_CONDITIONAL_IMPL(condition, \ 684 MCUX_CSSL_FP_BRANCH_VALUE(id) * (scenario)) 698 #define MCUX_CSSL_FP_BRANCH_TAKEN_POSITIVE_IMPL2(id, condition) \ 699 MCUX_CSSL_FP_BRANCH_TAKEN_IMPL(id, MCUX_CSSL_FP_BRANCH_POSITIVE_VALUE, condition) 712 #define MCUX_CSSL_FP_BRANCH_TAKEN_POSITIVE_IMPL1(id) \ 713 MCUX_CSSL_FP_BRANCH_TAKEN_IMPL(id, MCUX_CSSL_FP_BRANCH_POSITIVE_VALUE, true) 728 #define MCUX_CSSL_FP_BRANCH_TAKEN_POSITIVE_IMPL(...) \ 729 MCUX_CSSL_CPP_OVERLOADED2(MCUX_CSSL_FP_BRANCH_TAKEN_POSITIVE_IMPL, __VA_ARGS__) 743 #define MCUX_CSSL_FP_BRANCH_TAKEN_NEGATIVE_IMPL2(id, condition) \ 744 MCUX_CSSL_FP_BRANCH_TAKEN_IMPL(id, MCUX_CSSL_FP_BRANCH_NEGATIVE_VALUE, condition) 757 #define MCUX_CSSL_FP_BRANCH_TAKEN_NEGATIVE_IMPL1(id) \ 758 MCUX_CSSL_FP_BRANCH_TAKEN_IMPL(id, MCUX_CSSL_FP_BRANCH_NEGATIVE_VALUE, true) 773 #define MCUX_CSSL_FP_BRANCH_TAKEN_NEGATIVE_IMPL(...) \ 774 MCUX_CSSL_CPP_OVERLOADED2(MCUX_CSSL_FP_BRANCH_TAKEN_NEGATIVE_IMPL, __VA_ARGS__) 796 #define MCUX_CSSL_FP_SWITCH_ID(id) \ 797 MCUX_CSSL_FP_ID_IMPL() 806 #define MCUX_CSSL_FP_SWITCH_DECL_IMPL(id) \ 807 MCUX_CSSL_FP_DECL_IMPL(SWITCH, id) 817 #define MCUX_CSSL_FP_SWITCH_VALUE(id) \ 818 MCUX_CSSL_FP_DECL_NAME(SWITCH, id) 833 #define MCUX_CSSL_FP_SWITCH_CASE_IMPLn(id, case, ...) \ 835 (MCUX_CSSL_FP_SWITCH_VALUE(id) * (case)) \ 836 - MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) \ 850 #define MCUX_CSSL_FP_SWITCH_CASE_IMPL2(id, case) \ 851 MCUX_CSSL_FP_SWITCH_CASE_IMPLn(id, case, 0u) 868 #define MCUX_CSSL_FP_SWITCH_CASE_IMPL(...) \ 869 MCUX_CSSL_CPP_OVERLOADED2(MCUX_CSSL_FP_SWITCH_CASE_IMPL, __VA_ARGS__) 876 #define MCUX_CSSL_FP_SWITCH_DEFAULT_VALUE \ 891 #define MCUX_CSSL_FP_SWITCH_DEFAULT_IMPLn(id, ...) \ 892 MCUX_CSSL_FP_SWITCH_CASE_IMPLn( \ 893 id, MCUX_CSSL_FP_SWITCH_DEFAULT_VALUE, __VA_ARGS__) 905 #define MCUX_CSSL_FP_SWITCH_DEFAULT_IMPL1(id) \ 906 MCUX_CSSL_FP_SWITCH_DEFAULT_IMPLn(id, 0u) \ 922 #define MCUX_CSSL_FP_SWITCH_DEFAULT_IMPL(...) \ 923 MCUX_CSSL_CPP_OVERLOADED1(MCUX_CSSL_FP_SWITCH_DEFAULT_IMPL, __VA_ARGS__) 938 #define MCUX_CSSL_FP_SWITCH_TAKEN_IMPL3(id, case, condition) \ 939 MCUX_CSSL_FP_CONDITIONAL_IMPL(condition, \ 940 MCUX_CSSL_FP_SWITCH_VALUE(id) * (case)) 953 #define MCUX_CSSL_FP_SWITCH_TAKEN_IMPL2(id, case) \ 954 MCUX_CSSL_FP_SWITCH_TAKEN_IMPL3(id, case, true) 971 #define MCUX_CSSL_FP_SWITCH_TAKEN_IMPL(...) \ 972 MCUX_CSSL_CPP_OVERLOADED3(MCUX_CSSL_FP_SWITCH_TAKEN_IMPL, __VA_ARGS__) 985 #define MCUX_CSSL_FP_SWITCH_TAKEN_DEFAULT_IMPL2(id, condition) \ 986 MCUX_CSSL_FP_SWITCH_TAKEN_IMPL3(id, MCUX_CSSL_FP_SWITCH_DEFAULT_VALUE, condition) 998 #define MCUX_CSSL_FP_SWITCH_TAKEN_DEFAULT_IMPL1(id) \ 999 MCUX_CSSL_FP_SWITCH_TAKEN_DEFAULT_IMPL2(id, true) 1014 #define MCUX_CSSL_FP_SWITCH_TAKEN_DEFAULT_IMPL(...) \ 1015 MCUX_CSSL_CPP_OVERLOADED2(MCUX_CSSL_FP_SWITCH_TAKEN_DEFAULT_IMPL, __VA_ARGS__) 1034 #ifndef MCUX_CSSL_FP_ASSERT_CALLBACK 1035 #define MCUX_CSSL_FP_ASSERT_CALLBACK() \ The default implementation is based on standard C preprocessor functionality.
Provides the API for the CSSL secure counter mechanism.