| From 32abc2ede536aae52978d6c0a8944eb1df14f460 Mon Sep 17 00:00:00 2001 |
| From: Steven Rostedt <rostedt@goodmis.org> |
| Date: Mon, 16 Nov 2015 17:25:16 -0500 |
| Subject: tools lib traceevent: Fix output of %llu for 64 bit values read on 32 bit machines |
| |
| From: Steven Rostedt <rostedt@goodmis.org> |
| |
| commit 32abc2ede536aae52978d6c0a8944eb1df14f460 upstream. |
| |
| 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> |
| Link: http://lkml.kernel.org/r/20151116172516.4b79b109@gandalf.local.home |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| tools/lib/traceevent/event-parse.c | 5 ++--- |
| 1 file changed, 2 insertions(+), 3 deletions(-) |
| |
| --- a/tools/lib/traceevent/event-parse.c |
| +++ b/tools/lib/traceevent/event-parse.c |
| @@ -4249,13 +4249,12 @@ static void pretty_print(struct trace_se |
| 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: |