All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
@ 2015-09-22 13:22 Kapileshwar Singh
  2015-09-22 13:46 ` Steven Rostedt
  2015-09-23  8:45 ` [tip:perf/core] tools lib traceevent: Fix string handling " tip-bot for Kapileshwar Singh
  0 siblings, 2 replies; 8+ messages in thread
From: Kapileshwar Singh @ 2015-09-22 13:22 UTC (permalink / raw)
  To: linux-kernel
  Cc: Kapileshwar Singh, Steven Rostedt, Arnaldo Carvalho de Melo,
	Namhyung Kim, Javi Merino, David Ahern, Jiri Olsa

When a trace recorded on a 32-bit device is processed with a 64-bit
binary, the higher 32-bits of the address need to ignored

The lack of this results in the output of the 64-bit pointer
value to the trace as the 32-bit address lookup fails in find_printk.

Before:
burn-1778  [003]   548.600305: bputs:   0xc0046db2s: 2cec5c058d98c

After:
burn-1778  [003]   548.600305: bputs:   0xc0046db2s: RT throttling activated

The problem occurs in PRINT_FEILD when the field is recognized as a pointer
to a string (of the type const char *)

Heterogeneous architectures cases below can arise and should be handled:

* Traces recorded using 32-bit addresses processed on a 64-bit machine
* Traces recorded using 64-bit addresses processed on a 32-bit machine

Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Javi Merino <javi.merino@arm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Reported-by: Juri Lelli <juri.lelli@arm.com>
Signed-off-by: Kapileshwar Singh <kapileshwar.singh@arm.com>
---
 tools/lib/traceevent/event-parse.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index cc25f059ab3d..a843bee66a4f 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -3721,7 +3721,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
 	struct format_field *field;
 	struct printk_map *printk;
 	long long val, fval;
-	unsigned long addr;
+	unsigned long long addr;
 	char *str;
 	unsigned char *hex;
 	int print;
@@ -3754,13 +3754,30 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
 		 */
 		if (!(field->flags & FIELD_IS_ARRAY) &&
 		    field->size == pevent->long_size) {
-			addr = *(unsigned long *)(data + field->offset);
+
+			/* Handle heterogeneous recording and processing
+			 * architectures
+			 *
+			 * CASE I:
+			 * Traces recorded on 32-bit devices (32-bit
+			 * addressing) and processed on 64-bit devices:
+			 * In this case, only 32 bits should be read.
+			 *
+			 * CASE II:
+			 * Traces recorded on 64 bit devices and processed
+			 * on 32-bit devices:
+			 * In this case, 64 bits must be read.
+			 */
+			addr = (pevent->long_size == 8) ?
+				*(unsigned long long *)(data + field->offset) :
+				(unsigned long long)*(unsigned int *)(data + field->offset);
+
 			/* Check if it matches a print format */
 			printk = find_printk(pevent, addr);
 			if (printk)
 				trace_seq_puts(s, printk->printk);
 			else
-				trace_seq_printf(s, "%lx", addr);
+				trace_seq_printf(s, "%llx", addr);
 			break;
 		}
 		str = malloc(len + 1);
-- 
1.9.1


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

* Re: [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
  2015-09-22 13:22 [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments Kapileshwar Singh
@ 2015-09-22 13:46 ` Steven Rostedt
  2015-09-22 14:04   ` Arnaldo Carvalho de Melo
  2015-09-23  8:45 ` [tip:perf/core] tools lib traceevent: Fix string handling " tip-bot for Kapileshwar Singh
  1 sibling, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2015-09-22 13:46 UTC (permalink / raw)
  To: Kapileshwar Singh
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Namhyung Kim, Javi Merino,
	David Ahern, Jiri Olsa

On Tue, 22 Sep 2015 14:22:03 +0100
Kapileshwar Singh <kapileshwar.singh@arm.com> wrote:

>  		if (!(field->flags & FIELD_IS_ARRAY) &&
>  		    field->size == pevent->long_size) {
> -			addr = *(unsigned long *)(data + field->offset);
> +
> +			/* Handle heterogeneous recording and processing
> +			 * architectures
> +			 *
> +			 * CASE I:
> +			 * Traces recorded on 32-bit devices (32-bit
> +			 * addressing) and processed on 64-bit devices:
> +			 * In this case, only 32 bits should be read.
> +			 *
> +			 * CASE II:
> +			 * Traces recorded on 64 bit devices and processed
> +			 * on 32-bit devices:
> +			 * In this case, 64 bits must be read.

Probably should have added a comment about not caring about endianess
and why, but that can be added later. This patch is good enough for now.

Reviewed-by: Steven Rostedt <rostedt@goodmis.org>

Arnaldo, want to pick this up?

-- Steve

> +			 */
> +			addr = (pevent->long_size == 8) ?
> +				*(unsigned long long *)(data + field->offset) :
> +				(unsigned long long)*(unsigned int *)(data + field->offset);
> +
>  			/* Check if it matches a print format */
>  			printk = find_printk(pevent, addr);
>  			if (printk)
>  				trace_seq_puts(s, printk->printk);
>  			else
> -				trace_seq_printf(s, "%lx", addr);
> +				trace_seq_printf(s, "%llx", addr);
>  			break;
>  		}
>  		str = malloc(len + 1);


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

* Re: [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
  2015-09-22 13:46 ` Steven Rostedt
@ 2015-09-22 14:04   ` Arnaldo Carvalho de Melo
  2015-09-22 14:19     ` Steven Rostedt
  0 siblings, 1 reply; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-22 14:04 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Kapileshwar Singh, linux-kernel, Namhyung Kim, Javi Merino,
	David Ahern, Jiri Olsa

Em Tue, Sep 22, 2015 at 09:46:18AM -0400, Steven Rostedt escreveu:
> On Tue, 22 Sep 2015 14:22:03 +0100
> Kapileshwar Singh <kapileshwar.singh@arm.com> wrote:
> 
> >  		if (!(field->flags & FIELD_IS_ARRAY) &&
> >  		    field->size == pevent->long_size) {
> > -			addr = *(unsigned long *)(data + field->offset);
> > +
> > +			/* Handle heterogeneous recording and processing
> > +			 * architectures
> > +			 *
> > +			 * CASE I:
> > +			 * Traces recorded on 32-bit devices (32-bit
> > +			 * addressing) and processed on 64-bit devices:
> > +			 * In this case, only 32 bits should be read.
> > +			 *
> > +			 * CASE II:
> > +			 * Traces recorded on 64 bit devices and processed
> > +			 * on 32-bit devices:
> > +			 * In this case, 64 bits must be read.
> 
> Probably should have added a comment about not caring about endianess
> and why, but that can be added later. This patch is good enough for now.
> 
> Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
> 
> Arnaldo, want to pick this up?

Sure, I'm adding it to perf/core, i.e. for 4.4, or do you think this
needs to go into 4.3?

- Arnaldo

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

* Re: [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
  2015-09-22 14:04   ` Arnaldo Carvalho de Melo
@ 2015-09-22 14:19     ` Steven Rostedt
  2015-09-22 14:37       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2015-09-22 14:19 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Kapileshwar Singh, linux-kernel, Namhyung Kim, Javi Merino,
	David Ahern, Jiri Olsa

On Tue, 22 Sep 2015 11:04:43 -0300
Arnaldo Carvalho de Melo <acme@redhat.com> wrote:
 
> Sure, I'm adding it to perf/core, i.e. for 4.4, or do you think this
> needs to go into 4.3?
> 

Well, it does fix a bug. Probably should. Maybe even mark it for stable?

-- Steve

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

* Re: [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
  2015-09-22 14:19     ` Steven Rostedt
@ 2015-09-22 14:37       ` Arnaldo Carvalho de Melo
  2015-09-22 14:39         ` Kapileshwar Singh
  2015-09-22 15:21         ` Steven Rostedt
  0 siblings, 2 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-22 14:37 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Kapileshwar Singh, linux-kernel, Namhyung Kim, Javi Merino,
	David Ahern, Jiri Olsa

Em Tue, Sep 22, 2015 at 10:19:39AM -0400, Steven Rostedt escreveu:
> On Tue, 22 Sep 2015 11:04:43 -0300
> Arnaldo Carvalho de Melo <acme@redhat.com> wrote:
> > Sure, I'm adding it to perf/core, i.e. for 4.4, or do you think this
> > needs to go into 4.3?
> > 
> 
> Well, it does fix a bug. Probably should. Maybe even mark it for stable?

Right, its not something that affects that many people, but indeed fixes
a bug, queuing it in perf/urgent.

BTW, I changed the patch summary to:

  "tools lib traceevent: Fix string handling in heterogeneous arch environments"

Ok?

- Arnaldo

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

* Re: [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
  2015-09-22 14:37       ` Arnaldo Carvalho de Melo
@ 2015-09-22 14:39         ` Kapileshwar Singh
  2015-09-22 15:21         ` Steven Rostedt
  1 sibling, 0 replies; 8+ messages in thread
From: Kapileshwar Singh @ 2015-09-22 14:39 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Steven Rostedt
  Cc: linux-kernel@vger.kernel.org, Namhyung Kim, Javi Merino,
	David Ahern, Jiri Olsa

Thanks for reviewing this Steve and Arnaldo!

On 22/09/15 15:37, Arnaldo Carvalho de Melo wrote:
> Em Tue, Sep 22, 2015 at 10:19:39AM -0400, Steven Rostedt escreveu:
>> On Tue, 22 Sep 2015 11:04:43 -0300
>> Arnaldo Carvalho de Melo <acme@redhat.com> wrote:
>>> Sure, I'm adding it to perf/core, i.e. for 4.4, or do you think this
>>> needs to go into 4.3?
>>>
>>
>> Well, it does fix a bug. Probably should. Maybe even mark it for stable?
> 
> Right, its not something that affects that many people, but indeed fixes
> a bug, queuing it in perf/urgent.
> 
> BTW, I changed the patch summary to:
> 
>   "tools lib traceevent: Fix string handling in heterogeneous arch environments"

Looks fine to me.

Regards, 
KP

> 
> Ok?
> 
> - Arnaldo
> 


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

* Re: [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments
  2015-09-22 14:37       ` Arnaldo Carvalho de Melo
  2015-09-22 14:39         ` Kapileshwar Singh
@ 2015-09-22 15:21         ` Steven Rostedt
  1 sibling, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2015-09-22 15:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Kapileshwar Singh, linux-kernel, Namhyung Kim, Javi Merino,
	David Ahern, Jiri Olsa

On Tue, 22 Sep 2015 11:37:14 -0300
Arnaldo Carvalho de Melo <acme@redhat.com> wrote:

> Em Tue, Sep 22, 2015 at 10:19:39AM -0400, Steven Rostedt escreveu:
> > On Tue, 22 Sep 2015 11:04:43 -0300
> > Arnaldo Carvalho de Melo <acme@redhat.com> wrote:
> > > Sure, I'm adding it to perf/core, i.e. for 4.4, or do you think this
> > > needs to go into 4.3?
> > > 
> > 
> > Well, it does fix a bug. Probably should. Maybe even mark it for stable?
> 
> Right, its not something that affects that many people, but indeed fixes
> a bug, queuing it in perf/urgent.
> 
> BTW, I changed the patch summary to:
> 
>   "tools lib traceevent: Fix string handling in heterogeneous arch environments"
> 
> Ok?
> 

Looks fine to me.

-- Steve

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

* [tip:perf/core] tools lib traceevent: Fix string handling in heterogeneous arch environments
  2015-09-22 13:22 [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments Kapileshwar Singh
  2015-09-22 13:46 ` Steven Rostedt
@ 2015-09-23  8:45 ` tip-bot for Kapileshwar Singh
  1 sibling, 0 replies; 8+ messages in thread
From: tip-bot for Kapileshwar Singh @ 2015-09-23  8:45 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: kapileshwar.singh, javi.merino, hpa, tglx, dsahern, linux-kernel,
	juri.lelli, rostedt, acme, namhyung, mingo, jolsa

Commit-ID:  c2e4b24ff848bb180f9b9cd873a38327cd219ad2
Gitweb:     http://git.kernel.org/tip/c2e4b24ff848bb180f9b9cd873a38327cd219ad2
Author:     Kapileshwar Singh <kapileshwar.singh@arm.com>
AuthorDate: Tue, 22 Sep 2015 14:22:03 +0100
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 22 Sep 2015 11:57:04 -0300

tools lib traceevent: Fix string handling in heterogeneous arch environments

When a trace recorded on a 32-bit device is processed with a 64-bit
binary, the higher 32-bits of the address need to ignored.

The lack of this results in the output of the 64-bit pointer
value to the trace as the 32-bit address lookup fails in find_printk().

Before:

  burn-1778  [003]   548.600305: bputs:   0xc0046db2s: 2cec5c058d98c

After:

  burn-1778  [003]   548.600305: bputs:   0xc0046db2s: RT throttling activated

The problem occurs in PRINT_FIELD when the field is recognized as a
pointer to a string (of the type const char *)

Heterogeneous architectures cases below can arise and should be handled:

* Traces recorded using 32-bit addresses processed on a 64-bit machine
* Traces recorded using 64-bit addresses processed on a 32-bit machine

Reported-by: Juri Lelli <juri.lelli@arm.com>
Signed-off-by: Kapileshwar Singh <kapileshwar.singh@arm.com>
Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Javi Merino <javi.merino@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1442928123-13824-1-git-send-email-kapileshwar.singh@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/lib/traceevent/event-parse.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 4d88593..cf42b09 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -3795,7 +3795,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
 	struct format_field *field;
 	struct printk_map *printk;
 	long long val, fval;
-	unsigned long addr;
+	unsigned long long addr;
 	char *str;
 	unsigned char *hex;
 	int print;
@@ -3828,13 +3828,30 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
 		 */
 		if (!(field->flags & FIELD_IS_ARRAY) &&
 		    field->size == pevent->long_size) {
-			addr = *(unsigned long *)(data + field->offset);
+
+			/* Handle heterogeneous recording and processing
+			 * architectures
+			 *
+			 * CASE I:
+			 * Traces recorded on 32-bit devices (32-bit
+			 * addressing) and processed on 64-bit devices:
+			 * In this case, only 32 bits should be read.
+			 *
+			 * CASE II:
+			 * Traces recorded on 64 bit devices and processed
+			 * on 32-bit devices:
+			 * In this case, 64 bits must be read.
+			 */
+			addr = (pevent->long_size == 8) ?
+				*(unsigned long long *)(data + field->offset) :
+				(unsigned long long)*(unsigned int *)(data + field->offset);
+
 			/* Check if it matches a print format */
 			printk = find_printk(pevent, addr);
 			if (printk)
 				trace_seq_puts(s, printk->printk);
 			else
-				trace_seq_printf(s, "%lx", addr);
+				trace_seq_printf(s, "%llx", addr);
 			break;
 		}
 		str = malloc(len + 1);

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

end of thread, other threads:[~2015-09-23  8:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-22 13:22 [PATCH v5] tools lib traceevent: str addresses in heterogeneous arch environments Kapileshwar Singh
2015-09-22 13:46 ` Steven Rostedt
2015-09-22 14:04   ` Arnaldo Carvalho de Melo
2015-09-22 14:19     ` Steven Rostedt
2015-09-22 14:37       ` Arnaldo Carvalho de Melo
2015-09-22 14:39         ` Kapileshwar Singh
2015-09-22 15:21         ` Steven Rostedt
2015-09-23  8:45 ` [tip:perf/core] tools lib traceevent: Fix string handling " tip-bot for Kapileshwar Singh

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.