mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
tracing: define TRACE_DEFINE_SIZEOF() macro to map sizeof's to their values
Perf has a problem that if sizeof() macros are used within TRACE_EVENT() macro's they end up in userspace as "sizeof(kernel structure)" which cannot properly be parsed. Add a macro which can forward this data through the eval_map for userspace utilization. Link: http://lkml.kernel.org/r/20170531215653.3240-10-jeremy.linton@arm.com Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
67ec0d8595
commit
4f0dfd76e9
@ -88,6 +88,7 @@ extern void syscall_unregfunc(void);
|
||||
#define PARAMS(args...) args
|
||||
|
||||
#define TRACE_DEFINE_ENUM(x)
|
||||
#define TRACE_DEFINE_SIZEOF(x)
|
||||
|
||||
#endif /* _LINUX_TRACEPOINT_H */
|
||||
|
||||
|
@ -46,6 +46,19 @@ TRACE_MAKE_SYSTEM_STR();
|
||||
__attribute__((section("_ftrace_eval_map"))) \
|
||||
*TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
|
||||
|
||||
#undef TRACE_DEFINE_SIZEOF
|
||||
#define TRACE_DEFINE_SIZEOF(a) \
|
||||
static struct trace_eval_map __used __initdata \
|
||||
__##TRACE_SYSTEM##_##a = \
|
||||
{ \
|
||||
.system = TRACE_SYSTEM_STRING, \
|
||||
.eval_string = "sizeof(" #a ")", \
|
||||
.eval_value = sizeof(a) \
|
||||
}; \
|
||||
static struct trace_eval_map __used \
|
||||
__attribute__((section("_ftrace_eval_map"))) \
|
||||
*TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
|
||||
|
||||
/*
|
||||
* DECLARE_EVENT_CLASS can be used to add a generic function
|
||||
* handlers for events. That is, if all events have the same
|
||||
@ -158,6 +171,9 @@ TRACE_MAKE_SYSTEM_STR();
|
||||
#undef TRACE_DEFINE_ENUM
|
||||
#define TRACE_DEFINE_ENUM(a)
|
||||
|
||||
#undef TRACE_DEFINE_SIZEOF
|
||||
#define TRACE_DEFINE_SIZEOF(a)
|
||||
|
||||
#undef __field
|
||||
#define __field(type, item)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user