debugability: Protect against invalid param num in trace_event macro

Introduce STATIC_ASSERT macro for compile-time verifications.

Signed-off-by: ArturX Kloniecki <arturx.kloniecki@linux.intel.com>
This commit is contained in:
ArturX Kloniecki 2018-10-10 11:04:44 +02:00
parent 9b51e3e9ab
commit f7079f5d9a
2 changed files with 28 additions and 19 deletions

View File

@ -48,6 +48,12 @@ struct sa;
#define PP_NARG(...) (sizeof((unsigned int[]){0, ##__VA_ARGS__}) \
/ sizeof(unsigned int) - 1)
/* compile-time assertion */
#define STATIC_ASSERT(COND, MESSAGE) \
__attribute__((unused)) \
typedef char assertion_failed_##MESSAGE[(COND) ? 1 : -1]
/* general firmware context */
struct sof {
/* init data */

View File

@ -227,25 +227,28 @@ typedef void(*log_func)();
format \
}
#define BASE_LOG(function_name, entry, ...) \
{ \
log_func log_function = NULL; \
if (PP_NARG(__VA_ARGS__) == 0) { \
log_function = (log_func)&function_name##0; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 1) { \
log_function = (log_func)&function_name##1; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 2) { \
log_function = (log_func)&function_name##2; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 3) { \
log_function = (log_func)&function_name##3; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 4) { \
log_function = (log_func)&function_name##4; \
log_function(entry, ##__VA_ARGS__); \
} \
#define BASE_LOG(function_name, entry, ...) \
{ \
log_func log_function = NULL; \
if (PP_NARG(__VA_ARGS__) == 0) { \
log_function = (log_func)&function_name##0; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 1) { \
log_function = (log_func)&function_name##1; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 2) { \
log_function = (log_func)&function_name##2; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 3) { \
log_function = (log_func)&function_name##3; \
log_function(entry, ##__VA_ARGS__); \
} else if (PP_NARG(__VA_ARGS__) == 4) { \
log_function = (log_func)&function_name##4; \
log_function(entry, ##__VA_ARGS__); \
} else { \
STATIC_ASSERT(PP_NARG(__VA_ARGS__) <= 4, \
unsupported_amount_of_params_in_trace_event); \
} \
}
#define __log_message(func_name, lvl, comp_id, format, ...) \