Skip to content

Commit f7079f5

Browse files
committed
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>
1 parent 9b51e3e commit f7079f5

2 files changed

Lines changed: 28 additions & 19 deletions

File tree

src/include/sof/sof.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ struct sa;
4848
#define PP_NARG(...) (sizeof((unsigned int[]){0, ##__VA_ARGS__}) \
4949
/ sizeof(unsigned int) - 1)
5050

51+
/* compile-time assertion */
52+
#define STATIC_ASSERT(COND, MESSAGE) \
53+
__attribute__((unused)) \
54+
typedef char assertion_failed_##MESSAGE[(COND) ? 1 : -1]
55+
56+
5157
/* general firmware context */
5258
struct sof {
5359
/* init data */

src/include/sof/trace.h

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -227,25 +227,28 @@ typedef void(*log_func)();
227227
format \
228228
}
229229

230-
#define BASE_LOG(function_name, entry, ...) \
231-
{ \
232-
log_func log_function = NULL; \
233-
if (PP_NARG(__VA_ARGS__) == 0) { \
234-
log_function = (log_func)&function_name##0; \
235-
log_function(entry, ##__VA_ARGS__); \
236-
} else if (PP_NARG(__VA_ARGS__) == 1) { \
237-
log_function = (log_func)&function_name##1; \
238-
log_function(entry, ##__VA_ARGS__); \
239-
} else if (PP_NARG(__VA_ARGS__) == 2) { \
240-
log_function = (log_func)&function_name##2; \
241-
log_function(entry, ##__VA_ARGS__); \
242-
} else if (PP_NARG(__VA_ARGS__) == 3) { \
243-
log_function = (log_func)&function_name##3; \
244-
log_function(entry, ##__VA_ARGS__); \
245-
} else if (PP_NARG(__VA_ARGS__) == 4) { \
246-
log_function = (log_func)&function_name##4; \
247-
log_function(entry, ##__VA_ARGS__); \
248-
} \
230+
#define BASE_LOG(function_name, entry, ...) \
231+
{ \
232+
log_func log_function = NULL; \
233+
if (PP_NARG(__VA_ARGS__) == 0) { \
234+
log_function = (log_func)&function_name##0; \
235+
log_function(entry, ##__VA_ARGS__); \
236+
} else if (PP_NARG(__VA_ARGS__) == 1) { \
237+
log_function = (log_func)&function_name##1; \
238+
log_function(entry, ##__VA_ARGS__); \
239+
} else if (PP_NARG(__VA_ARGS__) == 2) { \
240+
log_function = (log_func)&function_name##2; \
241+
log_function(entry, ##__VA_ARGS__); \
242+
} else if (PP_NARG(__VA_ARGS__) == 3) { \
243+
log_function = (log_func)&function_name##3; \
244+
log_function(entry, ##__VA_ARGS__); \
245+
} else if (PP_NARG(__VA_ARGS__) == 4) { \
246+
log_function = (log_func)&function_name##4; \
247+
log_function(entry, ##__VA_ARGS__); \
248+
} else { \
249+
STATIC_ASSERT(PP_NARG(__VA_ARGS__) <= 4, \
250+
unsupported_amount_of_params_in_trace_event); \
251+
} \
249252
}
250253

251254
#define __log_message(func_name, lvl, comp_id, format, ...) \

0 commit comments

Comments
 (0)