Skip to content

Commit 9af90ce

Browse files
committed
debugability: Add components ids to trace_event macros
2 arbitrary IDs may now be passed to specialized versions of trace_event macro: trace_event_with_ids. Also optimized runtime stack usage of _trace_event functions. Signed-off-by: ArturX Kloniecki <arturx.kloniecki@linux.intel.com>
1 parent 40c054a commit 9af90ce

6 files changed

Lines changed: 369 additions & 293 deletions

File tree

src/host/trace.c

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ int num_trace_classes;
4949
int setup_trace_table(void)
5050
{
5151
char buffer[2048];
52-
char *trace = "sof/trace.h";
52+
char *trace = "uapi/logging.h";
5353
char *trace_filename = malloc(strlen(SOF_INC) + strlen(trace) + 2);
5454
char *token;
5555
int ret, i = 0;
@@ -143,47 +143,55 @@ static char *get_trace_class(uint32_t trace_class)
143143
return "value";
144144
}
145145

146-
#define META_SEQ_STEP_param_procD(i, _) META_CONCAT(param, i) %d
146+
#define META_SEQ_STEP_param_procU(i, _) META_CONCAT(param, i) %u
147147

148-
#define HOST_TRACE_EVENT_NTH(postfix, vararg_count)\
149-
META_FUNC_WITH_VARARGS(_trace_event, postfix, void,\
150-
META_CONCAT(, uint32_t event),\
151-
vararg_count, META_SEQ_STEP_param_uint32_t)
148+
#define HOST_TRACE_EVENT_NTH_PARAMS(id_count, param_count) \
149+
uintptr_t event \
150+
META_SEQ_FROM_0_TO(id_count , META_SEQ_STEP_id_uint32_t) \
151+
META_SEQ_FROM_0_TO(param_count, META_SEQ_STEP_param_uint32_t)
152+
153+
#define HOST_TRACE_EVENT_NTH(postfix, param_count) \
154+
META_FUNC_WITH_VARARGS( \
155+
_trace_event, META_CONCAT(postfix, param_count), \
156+
void, HOST_TRACE_EVENT_NTH_PARAMS(2, param_count) \
157+
)
152158

153159
/* print trace event */
154-
#define HOST_TRACE_EVENT_NTH_IMPL(arg_count)\
155-
HOST_TRACE_EVENT_NTH(, arg_count)\
156-
{\
157-
char a, b, c;\
158-
\
159-
if (test_bench_trace > 0) {\
160-
/* look up subsystem from trace class table */\
160+
#define HOST_TRACE_EVENT_NTH_IMPL(arg_count) \
161+
HOST_TRACE_EVENT_NTH(, arg_count) \
162+
{ \
163+
char a, b, c; \
164+
\
165+
if (test_bench_trace > 0) { \
166+
/* look up subsystem from trace class table */ \
161167
char *trace_class = strdup(get_trace_class(event >> 24));\
162-
\
163-
a = event & 0xff;\
164-
b = (event >> 8) & 0xff;\
165-
c = (event >> 16) & 0xff;\
166-
\
167-
/* print trace event stderr*/\
168-
if (!strcmp(trace_class, "value"))\
169-
fprintf(stderr,\
170-
"Trace value %d, "META_QUOTE(\
171-
META_SEQ_FROM_0_TO(\
172-
arg_count, META_SEQ_STEP_param_procD\
173-
))"\n"\
174-
, event META_SEQ_FROM_0_TO(arg_count, META_SEQ_STEP_param));\
175-
else\
176-
fprintf(stderr,\
177-
"Trace %s %c%c%c\n"\
178-
, trace_class, c, b, a);\
179-
if (trace_class)\
180-
free(trace_class);\
181-
}\
182-
}\
183-
HOST_TRACE_EVENT_NTH(_mbox_atomic, arg_count)\
184-
{\
185-
META_CONCAT(_trace_event, arg_count)\
186-
(event META_SEQ_FROM_0_TO(arg_count,META_SEQ_STEP_param));\
168+
\
169+
a = event & 0xff; \
170+
b = (event >> 8) & 0xff; \
171+
c = (event >> 16) & 0xff; \
172+
\
173+
/* print trace event stderr*/ \
174+
if (!strcmp(trace_class, "value")) \
175+
fprintf(stderr, \
176+
"Trace value %lu, "META_QUOTE( \
177+
META_SEQ_FROM_0_TO(arg_count, \
178+
META_SEQ_STEP_param_procU \
179+
))"\n" \
180+
, event META_SEQ_FROM_0_TO(arg_count, \
181+
META_SEQ_STEP_param)); \
182+
else \
183+
fprintf(stderr, \
184+
"Trace %s %c%c%c\n" \
185+
, trace_class, c, b, a); \
186+
if (trace_class) \
187+
free(trace_class); \
188+
} \
189+
} \
190+
HOST_TRACE_EVENT_NTH(_mbox_atomic, arg_count) \
191+
{ \
192+
META_CONCAT(_trace_event, arg_count) \
193+
(event META_SEQ_FROM_0_TO(2, META_SEQ_STEP_id) \
194+
META_SEQ_FROM_0_TO(arg_count, META_SEQ_STEP_param)); \
187195
}
188196

189197
/* Implementation of

src/include/sof/preproc-private.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
* META_COUNT_VARAGS_BEFORE_COMPILE(A,B,C,D) evaluates to 4
6666
*/
6767
#define _META_PP_NARG_BEFORE_COMPILE_(...) \
68-
_META_PP_ARG_N(__VA_ARGS__)
68+
META_DEC(_META_PP_ARG_N(__VA_ARGS__))
6969
#define _META_PP_ARG_N(\
7070
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \
7171
_11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \

src/include/sof/preproc.h

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,7 @@
4646
* META_COUNT_VARAGS_BEFORE_COMPILE(A,B,C,D) evaluates to 4
4747
*/
4848
#define META_COUNT_VARAGS_BEFORE_COMPILE(...)\
49-
META_IF_ELSE(META_HAS_ARGS(__VA_ARGS__)) (\
50-
_META_PP_NARG_BEFORE_COMPILE_(__VA_ARGS__, _META_PP_RSEQ_N())\
51-
)\
52-
(\
53-
0\
54-
)
49+
_META_PP_NARG_BEFORE_COMPILE_(_, ##__VA_ARGS__, _META_PP_RSEQ_N())
5550

5651
/* treat x as string while forcing x expansion beforehand */
5752
#define META_QUOTE(x) _META_QUOTE(x)
@@ -167,19 +162,17 @@
167162
#define META_SEQ_STEP_param_int32_t( i, _) , int32_t META_CONCAT(param, i)
168163
#define META_SEQ_STEP_param_int64_t( i, _) , int64_t META_CONCAT(param, i)
169164

165+
#define META_SEQ_STEP_id(i, _) , META_CONCAT(id_, i)
166+
#define META_SEQ_STEP_id_uint32_t(i, _) , uint32_t META_CONCAT(id_, i)
167+
170168
/* generates function signature
171169
* for instance with:
172170
* prefix=foo ; postfix=__bar ; return_t=void
173-
* fixed_args=(int x, int y)
174-
* vararg_count=3
175-
* vararg_gen_step=
176-
* #define META_SEQ_STEP_param_float(i, _) , float META_CONCAT(param, i)
171+
* args=(int x, int y)
177172
* will produce:
178-
* void foo_bar(int x, int y , float param0 , float param1 , float param2)
173+
* void foo_bar(int x, int y)
179174
*/
180-
#define META_FUNC_WITH_VARARGS(prefix, postfix, return_t,\
181-
fixed_args, vararg_count, vararg_gen_step)\
182-
return_t META_CONCAT_SEQ(prefix, postfix, vararg_count)\
183-
(fixed_args META_SEQ_FROM_0_TO(vararg_count, vararg_gen_step))
175+
#define META_FUNC_WITH_VARARGS(prefix, postfix, return_t, args)\
176+
return_t META_CONCAT(prefix, postfix) (args)
184177

185178
#endif // __INCLUDE_MACRO_METAPROGRAMMING__

0 commit comments

Comments
 (0)