* [PATCH 0/2] Fix ftrace stack traces on x86_64
@ 2012-03-22 10:18 Wolfgang Mauerer
2012-03-22 10:18 ` [PATCH 1/2] Fix ftrace stack trace entries Wolfgang Mauerer
2012-03-22 10:18 ` [PATCH 2/2, trace-cmd] Fix trace_printk for long integers Wolfgang Mauerer
0 siblings, 2 replies; 6+ messages in thread
From: Wolfgang Mauerer @ 2012-03-22 10:18 UTC (permalink / raw)
To: rostedt; +Cc: linux-kernel
Stack tracing with ftrace does currently not work properly when
trace-cmd is used on x86_64 machines -- only half of each stack
entry is shown (things work fine with the ftrace debugfs
interface):
mutextest-7604 [001] 664.978289: user_stack:
=> (000000002a7ac565)
=> (000000002a7a6070)
=> (00000000ffffffff)
The following two patches modify the kernel to use the proper
trace_printk format, and fix trace_cmd to parse the format
correctly:
mutextest-7604 [001] 664.978289: user_stack:
=> (00007f342a7ac565)
=> (00007f342a7a6070)
=> (ffffffffffffffff)
Cheers, Wolfgang
--
Siemens AG
Corporate Competence Centre Embedded Linux
>From Wolfgang Mauerer <wolfgang.mauerer@siemens.com> # This line is ignored.
From: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
Subject:
In-Reply-To:
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/2] Fix ftrace stack trace entries 2012-03-22 10:18 [PATCH 0/2] Fix ftrace stack traces on x86_64 Wolfgang Mauerer @ 2012-03-22 10:18 ` Wolfgang Mauerer 2012-03-24 7:56 ` [tip:perf/urgent] tracing: " tip-bot for Wolfgang Mauerer 2012-03-22 10:18 ` [PATCH 2/2, trace-cmd] Fix trace_printk for long integers Wolfgang Mauerer 1 sibling, 1 reply; 6+ messages in thread From: Wolfgang Mauerer @ 2012-03-22 10:18 UTC (permalink / raw) To: rostedt; +Cc: linux-kernel 8 hex characters tell only half the tale for 64 bit CPUs, so use the appropriate length. Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> --- kernel/trace/trace_entries.h | 16 ++++++++++++---- kernel/trace/trace_export.c | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/kernel/trace/trace_entries.h b/kernel/trace/trace_entries.h index d91eb05..4108e12 100644 --- a/kernel/trace/trace_entries.h +++ b/kernel/trace/trace_entries.h @@ -166,6 +166,12 @@ FTRACE_ENTRY_DUP(wakeup, ctx_switch_entry, #define FTRACE_STACK_ENTRIES 8 +#ifndef CONFIG_64BIT +# define IP_FMT "%08lx" +#else +# define IP_FMT "%016lx" +#endif + FTRACE_ENTRY(kernel_stack, stack_entry, TRACE_STACK, @@ -175,8 +181,9 @@ FTRACE_ENTRY(kernel_stack, stack_entry, __dynamic_array(unsigned long, caller ) ), - F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n" - "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n", + F_printk("\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n", __entry->caller[0], __entry->caller[1], __entry->caller[2], __entry->caller[3], __entry->caller[4], __entry->caller[5], __entry->caller[6], __entry->caller[7]), @@ -193,8 +200,9 @@ FTRACE_ENTRY(user_stack, userstack_entry, __array( unsigned long, caller, FTRACE_STACK_ENTRIES ) ), - F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n" - "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n", + F_printk("\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n", __entry->caller[0], __entry->caller[1], __entry->caller[2], __entry->caller[3], __entry->caller[4], __entry->caller[5], __entry->caller[6], __entry->caller[7]), diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c index 7b46c9b..3dd15e8 100644 --- a/kernel/trace/trace_export.c +++ b/kernel/trace/trace_export.c @@ -162,7 +162,7 @@ ftrace_define_fields_##name(struct ftrace_event_call *event_call) \ #define __dynamic_array(type, item) #undef F_printk -#define F_printk(fmt, args...) #fmt ", " __stringify(args) +#define F_printk(fmt, args...) __stringify(fmt) ", " __stringify(args) #undef FTRACE_ENTRY_REG #define FTRACE_ENTRY_REG(call, struct_name, etype, tstruct, print, filter,\ -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [tip:perf/urgent] tracing: Fix ftrace stack trace entries 2012-03-22 10:18 ` [PATCH 1/2] Fix ftrace stack trace entries Wolfgang Mauerer @ 2012-03-24 7:56 ` tip-bot for Wolfgang Mauerer 0 siblings, 0 replies; 6+ messages in thread From: tip-bot for Wolfgang Mauerer @ 2012-03-24 7:56 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, rostedt, wolfgang.mauerer, tglx Commit-ID: 01de982abf8c9e10fc3089e10585cd2cc914bdab Gitweb: http://git.kernel.org/tip/01de982abf8c9e10fc3089e10585cd2cc914bdab Author: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> AuthorDate: Thu, 22 Mar 2012 11:18:20 +0100 Committer: Steven Rostedt <rostedt@goodmis.org> CommitDate: Thu, 22 Mar 2012 12:19:23 -0400 tracing: Fix ftrace stack trace entries 8 hex characters tell only half the tale for 64 bit CPUs, so use the appropriate length. Link: http://lkml.kernel.org/r/1332411501-8059-2-git-send-email-wolfgang.mauerer@siemens.com Cc: stable@vger.kernel.org Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> --- kernel/trace/trace_entries.h | 16 ++++++++++++---- kernel/trace/trace_export.c | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/kernel/trace/trace_entries.h b/kernel/trace/trace_entries.h index 9336590..205dcac 100644 --- a/kernel/trace/trace_entries.h +++ b/kernel/trace/trace_entries.h @@ -156,6 +156,12 @@ FTRACE_ENTRY_DUP(wakeup, ctx_switch_entry, #define FTRACE_STACK_ENTRIES 8 +#ifndef CONFIG_64BIT +# define IP_FMT "%08lx" +#else +# define IP_FMT "%016lx" +#endif + FTRACE_ENTRY(kernel_stack, stack_entry, TRACE_STACK, @@ -165,8 +171,9 @@ FTRACE_ENTRY(kernel_stack, stack_entry, __dynamic_array(unsigned long, caller ) ), - F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n" - "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n", + F_printk("\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n", __entry->caller[0], __entry->caller[1], __entry->caller[2], __entry->caller[3], __entry->caller[4], __entry->caller[5], __entry->caller[6], __entry->caller[7]) @@ -181,8 +188,9 @@ FTRACE_ENTRY(user_stack, userstack_entry, __array( unsigned long, caller, FTRACE_STACK_ENTRIES ) ), - F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n" - "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n", + F_printk("\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n", __entry->caller[0], __entry->caller[1], __entry->caller[2], __entry->caller[3], __entry->caller[4], __entry->caller[5], __entry->caller[6], __entry->caller[7]) diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c index bbeec31..ad4000c 100644 --- a/kernel/trace/trace_export.c +++ b/kernel/trace/trace_export.c @@ -150,7 +150,7 @@ ftrace_define_fields_##name(struct ftrace_event_call *event_call) \ #define __dynamic_array(type, item) #undef F_printk -#define F_printk(fmt, args...) #fmt ", " __stringify(args) +#define F_printk(fmt, args...) __stringify(fmt) ", " __stringify(args) #undef FTRACE_ENTRY #define FTRACE_ENTRY(call, struct_name, etype, tstruct, print) \ ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2, trace-cmd] Fix trace_printk for long integers 2012-03-22 10:18 [PATCH 0/2] Fix ftrace stack traces on x86_64 Wolfgang Mauerer 2012-03-22 10:18 ` [PATCH 1/2] Fix ftrace stack trace entries Wolfgang Mauerer @ 2012-03-22 10:18 ` Wolfgang Mauerer 2012-03-23 21:20 ` Steven Rostedt 2012-07-06 11:11 ` [tip:perf/core] tools lib traceevent: " tip-bot for Wolfgang Mauerer 1 sibling, 2 replies; 6+ messages in thread From: Wolfgang Mauerer @ 2012-03-22 10:18 UTC (permalink / raw) To: rostedt; +Cc: linux-kernel On 32 bit systems, a conversion of the trace_printk format string "%lu" -> "%llu" is intended (similar for %lx etc.) when a trace was taken on a machine with 64 bit long integers. However, the current code computes the bogus transformation "%lu" -> "%u". Fix this. Besides that, the transformation is only required on systems that don't use 64 bits for long integers natively. Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> --- parse-events.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/parse-events.c b/parse-events.c index f8ba6a5..5214771 100644 --- a/parse-events.c +++ b/parse-events.c @@ -3789,14 +3789,15 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event break; } } - if (pevent->long_size == 8 && ls) { + if (pevent->long_size == 8 && ls && + sizeof(long) != 8) { char *p; ls = 2; /* make %l into %ll */ p = strchr(format, 'l'); if (p) - memmove(p, p+1, strlen(p)+1); + memmove(p+1, p, strlen(p)+1); else if (strcmp(format, "%p") == 0) strcpy(format, "0x%llx"); } -- 1.7.6.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2, trace-cmd] Fix trace_printk for long integers 2012-03-22 10:18 ` [PATCH 2/2, trace-cmd] Fix trace_printk for long integers Wolfgang Mauerer @ 2012-03-23 21:20 ` Steven Rostedt 2012-07-06 11:11 ` [tip:perf/core] tools lib traceevent: " tip-bot for Wolfgang Mauerer 1 sibling, 0 replies; 6+ messages in thread From: Steven Rostedt @ 2012-03-23 21:20 UTC (permalink / raw) To: Wolfgang Mauerer; +Cc: linux-kernel On Thu, 2012-03-22 at 11:18 +0100, Wolfgang Mauerer wrote: > On 32 bit systems, a conversion of the trace_printk format string > "%lu" -> "%llu" is intended (similar for %lx etc.) when a > trace was taken on a machine with 64 bit long integers. However, > the current code computes the bogus transformation "%lu" -> "%u". > Fix this. > > Besides that, the transformation is only required on systems > that don't use 64 bits for long integers natively. > > Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> Applied, thanks! -- Steve ^ permalink raw reply [flat|nested] 6+ messages in thread
* [tip:perf/core] tools lib traceevent: Fix trace_printk for long integers 2012-03-22 10:18 ` [PATCH 2/2, trace-cmd] Fix trace_printk for long integers Wolfgang Mauerer 2012-03-23 21:20 ` Steven Rostedt @ 2012-07-06 11:11 ` tip-bot for Wolfgang Mauerer 1 sibling, 0 replies; 6+ messages in thread From: tip-bot for Wolfgang Mauerer @ 2012-07-06 11:11 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, rostedt, wolfgang.mauerer, tglx, namhyung Commit-ID: c5b35b731965d16fa8c966e288489857097e0b25 Gitweb: http://git.kernel.org/tip/c5b35b731965d16fa8c966e288489857097e0b25 Author: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> AuthorDate: Thu, 22 Mar 2012 11:18:21 +0100 Committer: Namhyung Kim <namhyung@kernel.org> CommitDate: Wed, 4 Jul 2012 13:40:30 +0900 tools lib traceevent: Fix trace_printk for long integers On 32 bit systems, a conversion of the trace_printk format string "%lu" -> "%llu" is intended (similar for %lx etc.) when a trace was taken on a machine with 64 bit long integers. However, the current code computes the bogus transformation "%lu" -> "%u". Fix this. Besides that, the transformation is only required on systems that don't use 64 bits for long integers natively. Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/1332411501-8059-3-git-send-email-wolfgang.mauerer@siemens.com Signed-off-by: Namhyung Kim <namhyung@kernel.org> --- tools/lib/traceevent/event-parse.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index da06c33..ddee5a8 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c @@ -3895,14 +3895,15 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event break; } } - if (pevent->long_size == 8 && ls) { + if (pevent->long_size == 8 && ls && + sizeof(long) != 8) { char *p; ls = 2; /* make %l into %ll */ p = strchr(format, 'l'); if (p) - memmove(p, p+1, strlen(p)+1); + memmove(p+1, p, strlen(p)+1); else if (strcmp(format, "%p") == 0) strcpy(format, "0x%llx"); } ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-07-06 11:12 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-03-22 10:18 [PATCH 0/2] Fix ftrace stack traces on x86_64 Wolfgang Mauerer 2012-03-22 10:18 ` [PATCH 1/2] Fix ftrace stack trace entries Wolfgang Mauerer 2012-03-24 7:56 ` [tip:perf/urgent] tracing: " tip-bot for Wolfgang Mauerer 2012-03-22 10:18 ` [PATCH 2/2, trace-cmd] Fix trace_printk for long integers Wolfgang Mauerer 2012-03-23 21:20 ` Steven Rostedt 2012-07-06 11:11 ` [tip:perf/core] tools lib traceevent: " tip-bot for Wolfgang Mauerer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox