All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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/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

* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.