All of lore.kernel.org
 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 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.