linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines
@ 2015-11-16 20:33 Steven Rostedt
  2015-11-16 22:23 ` Steven Rostedt
  0 siblings, 1 reply; 7+ messages in thread
From: Steven Rostedt @ 2015-11-16 20:33 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: LKML, Ingo Molnar, Namhyung Kim


When a long value is read on 32 bit machines for 64 bit output, the parsing
needs to change "%lu" into "%llu", as the value is read natively.

Unfortunately, if "%llu" is already there, the code will add another "l" to
it and fail to parse it properly.

Cc: stable@vger.kernel.org
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 tools/lib/traceevent/event-parse.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 4d885934b919..43e202bb3ae3 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -4895,7 +4895,7 @@ 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 == 1 &&
 				    sizeof(long) != 8) {
 					char *p;
 
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines
  2015-11-16 20:33 [PATCH] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines Steven Rostedt
@ 2015-11-16 22:23 ` Steven Rostedt
  2015-11-16 22:25   ` [PATCH v2] " Steven Rostedt
  0 siblings, 1 reply; 7+ messages in thread
From: Steven Rostedt @ 2015-11-16 22:23 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: LKML, Ingo Molnar, Namhyung Kim

On Mon, 16 Nov 2015 15:33:10 -0500
Steven Rostedt <rostedt@goodmis.org> wrote:

> When a long value is read on 32 bit machines for 64 bit output, the parsing
> needs to change "%lu" into "%llu", as the value is read natively.
> 
> Unfortunately, if "%llu" is already there, the code will add another "l" to
> it and fail to parse it properly.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> ---
>  tools/lib/traceevent/event-parse.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
> index 4d885934b919..43e202bb3ae3 100644
> --- a/tools/lib/traceevent/event-parse.c
> +++ b/tools/lib/traceevent/event-parse.c
> @@ -4895,7 +4895,7 @@ 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 == 1 &&

Bah, this breaks %p when reading on 32bit.

Update patch coming

-- Steve

>  				    sizeof(long) != 8) {
>  					char *p;
>  


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines
  2015-11-16 22:23 ` Steven Rostedt
@ 2015-11-16 22:25   ` Steven Rostedt
  2015-11-17  0:20     ` Namhyung Kim
                       ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Steven Rostedt @ 2015-11-16 22:25 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: LKML, Ingo Molnar, Namhyung Kim


When a long value is read on 32 bit machines for 64 bit output, the parsing
needs to change "%lu" into "%llu", as the value is read natively.

Unfortunately, if "%llu" is already there, the code will add another "l" to
it and fail to parse it properly.

Cc: stable@vger.kernel.org
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
diff --git a/event-parse.c b/event-parse.c
index 0a30253..ee5b720 100644
--- a/event-parse.c
+++ b/event-parse.c
@@ -4828,13 +4828,12 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
 				    sizeof(long) != 8) {
 					char *p;
 
-					ls = 2;
 					/* make %l into %ll */
-					p = strchr(format, 'l');
-					if (p)
+					if (ls == 1 && (p = strchr(format, 'l')))
 						memmove(p+1, p, strlen(p)+1);
 					else if (strcmp(format, "%p") == 0)
 						strcpy(format, "0x%llx");
+					ls = 2;
 				}
 				switch (ls) {
 				case -2:

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines
  2015-11-16 22:25   ` [PATCH v2] " Steven Rostedt
@ 2015-11-17  0:20     ` Namhyung Kim
  2015-11-17  2:43       ` Steven Rostedt
  2015-11-23 22:18     ` Arnaldo Carvalho de Melo
  2015-11-26  8:21     ` [tip:perf/core] tools lib traceevent: " tip-bot for Steven Rostedt
  2 siblings, 1 reply; 7+ messages in thread
From: Namhyung Kim @ 2015-11-17  0:20 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Arnaldo Carvalho de Melo, LKML, Ingo Molnar

On Mon, Nov 16, 2015 at 05:25:16PM -0500, Steven Rostedt wrote:
> 
> When a long value is read on 32 bit machines for 64 bit output, the parsing
> needs to change "%lu" into "%llu", as the value is read natively.
> 
> Unfortunately, if "%llu" is already there, the code will add another "l" to
> it and fail to parse it properly.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

Acked-by: Namhyung Kim <namhyung@kernel.org>


What about the opposite case?  Maybe we need something like this?

Thanks,
Namhyung


diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 4d885934b919..afc32fb17d1e 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -4906,6 +4906,17 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
 						memmove(p+1, p, strlen(p)+1);
 					else if (strcmp(format, "%p") == 0)
 						strcpy(format, "0x%llx");
+				} else if (pevent->long_size == 4 && ls == 1 &&
+					   sizeof(long) != 4) {
+					char *p;
+
+					ls = 0;
+					/* make %l into % */
+					p = strchr(format, 'l');
+					if (p)
+						memmove(p, p+1, strlen(p));
+					else if (strcmp(format, "%p") == 0)
+						strcpy(foramt, "0x%x");
 				}
 				switch (ls) {
 				case -2:

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines
  2015-11-17  0:20     ` Namhyung Kim
@ 2015-11-17  2:43       ` Steven Rostedt
  0 siblings, 0 replies; 7+ messages in thread
From: Steven Rostedt @ 2015-11-17  2:43 UTC (permalink / raw)
  To: Namhyung Kim; +Cc: Arnaldo Carvalho de Melo, LKML, Ingo Molnar

On Tue, 17 Nov 2015 09:20:27 +0900
Namhyung Kim <namhyung@kernel.org> wrote:

> On Mon, Nov 16, 2015 at 05:25:16PM -0500, Steven Rostedt wrote:
> > 
> > When a long value is read on 32 bit machines for 64 bit output, the parsing
> > needs to change "%lu" into "%llu", as the value is read natively.
> > 
> > Unfortunately, if "%llu" is already there, the code will add another "l" to
> > it and fail to parse it properly.
> > 
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Steven Rostedt <rostedt@goodmis.org>  
> 
> Acked-by: Namhyung Kim <namhyung@kernel.org>
> 
> 
> What about the opposite case?  Maybe we need something like this?

Hmm, good question. I'll need to play with this.

Thanks!

-- Steve

> 
> Thanks,
> Namhyung
> 
> 
> diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
> index 4d885934b919..afc32fb17d1e 100644
> --- a/tools/lib/traceevent/event-parse.c
> +++ b/tools/lib/traceevent/event-parse.c
> @@ -4906,6 +4906,17 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
>  						memmove(p+1, p, strlen(p)+1);
>  					else if (strcmp(format, "%p") == 0)
>  						strcpy(format, "0x%llx");
> +				} else if (pevent->long_size == 4 && ls == 1 &&
> +					   sizeof(long) != 4) {
> +					char *p;
> +
> +					ls = 0;
> +					/* make %l into % */
> +					p = strchr(format, 'l');
> +					if (p)
> +						memmove(p, p+1, strlen(p));
> +					else if (strcmp(format, "%p") == 0)
> +						strcpy(foramt, "0x%x");
>  				}
>  				switch (ls) {
>  				case -2:


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines
  2015-11-16 22:25   ` [PATCH v2] " Steven Rostedt
  2015-11-17  0:20     ` Namhyung Kim
@ 2015-11-23 22:18     ` Arnaldo Carvalho de Melo
  2015-11-26  8:21     ` [tip:perf/core] tools lib traceevent: " tip-bot for Steven Rostedt
  2 siblings, 0 replies; 7+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-11-23 22:18 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: LKML, Ingo Molnar, Namhyung Kim

Em Mon, Nov 16, 2015 at 05:25:16PM -0500, Steven Rostedt escreveu:
> 
> When a long value is read on 32 bit machines for 64 bit output, the parsing
> needs to change "%lu" into "%llu", as the value is read natively.
> 
> Unfortunately, if "%llu" is already there, the code will add another "l" to
> it and fail to parse it properly.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> ---
> diff --git a/event-parse.c b/event-parse.c
> index 0a30253..ee5b720 100644
> --- a/event-parse.c
> +++ b/event-parse.c

Applied, after reusing this from Namhyung's patch:

diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c

:-)

> @@ -4828,13 +4828,12 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
>  				    sizeof(long) != 8) {
>  					char *p;
>  
> -					ls = 2;
>  					/* make %l into %ll */
> -					p = strchr(format, 'l');
> -					if (p)
> +					if (ls == 1 && (p = strchr(format, 'l')))
>  						memmove(p+1, p, strlen(p)+1);
>  					else if (strcmp(format, "%p") == 0)
>  						strcpy(format, "0x%llx");
> +					ls = 2;
>  				}
>  				switch (ls) {
>  				case -2:
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tip:perf/core] tools lib traceevent: Fix output of %llu for 64 bit values read on 32 bit machines
  2015-11-16 22:25   ` [PATCH v2] " Steven Rostedt
  2015-11-17  0:20     ` Namhyung Kim
  2015-11-23 22:18     ` Arnaldo Carvalho de Melo
@ 2015-11-26  8:21     ` tip-bot for Steven Rostedt
  2 siblings, 0 replies; 7+ messages in thread
From: tip-bot for Steven Rostedt @ 2015-11-26  8:21 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, acme, rostedt, namhyung, tglx

Commit-ID:  32abc2ede536aae52978d6c0a8944eb1df14f460
Gitweb:     http://git.kernel.org/tip/32abc2ede536aae52978d6c0a8944eb1df14f460
Author:     Steven Rostedt <rostedt@goodmis.org>
AuthorDate: Mon, 16 Nov 2015 17:25:16 -0500
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 23 Nov 2015 19:17:23 -0300

tools lib traceevent: Fix output of %llu for 64 bit values read on 32 bit machines

When a long value is read on 32 bit machines for 64 bit output, the
parsing needs to change "%lu" into "%llu", as the value is read
natively.

Unfortunately, if "%llu" is already there, the code will add another "l"
to it and fail to parse it properly.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/20151116172516.4b79b109@gandalf.local.home
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/lib/traceevent/event-parse.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 2a912df..68276f3 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -4968,13 +4968,12 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
 				    sizeof(long) != 8) {
 					char *p;
 
-					ls = 2;
 					/* make %l into %ll */
-					p = strchr(format, 'l');
-					if (p)
+					if (ls == 1 && (p = strchr(format, 'l')))
 						memmove(p+1, p, strlen(p)+1);
 					else if (strcmp(format, "%p") == 0)
 						strcpy(format, "0x%llx");
+					ls = 2;
 				}
 				switch (ls) {
 				case -2:

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-11-26  8:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-16 20:33 [PATCH] tools lib traceevents: Fix output of %llu for 64 bit values read on 32 bit machines Steven Rostedt
2015-11-16 22:23 ` Steven Rostedt
2015-11-16 22:25   ` [PATCH v2] " Steven Rostedt
2015-11-17  0:20     ` Namhyung Kim
2015-11-17  2:43       ` Steven Rostedt
2015-11-23 22:18     ` Arnaldo Carvalho de Melo
2015-11-26  8:21     ` [tip:perf/core] tools lib traceevent: " tip-bot for Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).