All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Ahern <dsahern@gmail.com>
To: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	Peter Zijlstra <peterz@infradead.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	linux-kernel@vger.kernel.org,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	yrl.pp-manager.tt@hitachi.com, Paul Mackerras <paulus@samba.org>
Subject: Re: [PATCH -tip v2 2/6] perf script: add magic word to indicate the failure of resolving symbols
Date: Sun, 17 Jul 2011 10:30:42 -0600	[thread overview]
Message-ID: <4E230E32.3010503@gmail.com> (raw)
In-Reply-To: <4E2308A9.5000706@gmail.com>

On 07/17/2011 10:07 AM, David Ahern wrote:
> 
> 
> On 07/17/2011 03:30 AM, Akihiro Nagai wrote:
>> Latest perf-script doesn't output symbol name when it failed to
>> resolve symbol name. This output is not friendly for external scripts
>> because it causes misaligment. So, this patch adds the magic word
>> "(unknown)" when perf-script failed to resolve symbols.
> 
> Code has [unknown] with {}, not ().

Evidently I had the shift key down -- s/{}/[]/.  :-) And I see now, for
dsoname you have [unknown] and for symname (unknown). Use the same for
both. Since () is already used for separating dsoname, use [unknown] for
both

David


> 
>>
>> At the same time, this patch changes perf-script to output "[unknown]"
>> in the DSO field, when it failed to resolve the path of DSOs.
>>
>> Changes in v2:
>>  - add this patch
>>
>> Signed-off-by: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
>> Cc: Peter Zijlstra <peterz@infradead.org>
>> Cc: Frederic Weisbecker <fweisbec@gmail.com>
>> Cc: Paul Mackerras <paulus@samba.org>
>> Cc: Ingo Molnar <mingo@elte.hu>
>> Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
>> Cc: David Ahern <dsahern@gmail.com>
>> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
>> ---
>>
>>  tools/perf/builtin-script.c |   18 +++++-------------
>>  tools/perf/util/map.c       |   12 ++++++++++++
>>  tools/perf/util/map.h       |    1 +
>>  tools/perf/util/session.c   |   35 ++++++++++-------------------------
>>  tools/perf/util/symbol.c    |   12 ++++++++++++
>>  tools/perf/util/symbol.h    |    1 +
>>  6 files changed, 41 insertions(+), 38 deletions(-)
>>
>> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
>> index 09024ec..b3e0951 100644
>> --- a/tools/perf/builtin-script.c
>> +++ b/tools/perf/builtin-script.c
>> @@ -320,7 +320,6 @@ static void print_sample_addr(union perf_event *event,
>>  {
>>  	struct addr_location al;
>>  	u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
>> -	const char *symname, *dsoname;
>>  
>>  	printf("%16" PRIx64, sample->addr);
>>  
>> @@ -340,21 +339,14 @@ static void print_sample_addr(union perf_event *event,
>>  		al.sym = map__find_symbol(al.map, al.addr, NULL);
>>  
>>  	if (PRINT_FIELD(SYM)) {
>> -		if (al.sym && al.sym->name)
>> -			symname = al.sym->name;
>> -		else
>> -			symname = "";
>> -
>> -		printf(" %16s", symname);
>> +		printf(" ");
>> +		symbol__print_symname(al.sym);
>>  	}
>>  
>>  	if (PRINT_FIELD(DSO)) {
>> -		if (al.map && al.map->dso && al.map->dso->name)
>> -			dsoname = al.map->dso->name;
>> -		else
>> -			dsoname = "";
>> -
>> -		printf(" (%s)", dsoname);
>> +		printf(" (");
>> +		map__print_dsoname(al.map);
>> +		printf(")");
>>  	}
>>  }
>>  
>> diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
>> index a16ecab..dddc0f3 100644
>> --- a/tools/perf/util/map.c
>> +++ b/tools/perf/util/map.c
>> @@ -200,6 +200,18 @@ size_t map__fprintf(struct map *self, FILE *fp)
>>  		       self->start, self->end, self->pgoff, self->dso->name);
>>  }
>>  
>> +void map__print_dsoname(struct map *self)
>> +{
>> +	const char *dsoname;
>> +
>> +	if (self && self->dso && self->dso->name)
>> +			dsoname = self->dso->name;
> 
> extra tab in the above line.
> 
> Otherwise looks good to me.
> 
> Acked-By: dsahern@gmail.com
> 
>> +	else
>> +		dsoname = "[unknown]";
>> +
>> +	printf("%s", dsoname);
>> +}
>> +
>>  /*
>>   * objdump wants/reports absolute IPs for ET_EXEC, and RIPs for ET_DYN.
>>   * map->dso->adjust_symbols==1 for ET_EXEC-like cases.
>> diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h
>> index b397c03..6f452b9 100644
>> --- a/tools/perf/util/map.h
>> +++ b/tools/perf/util/map.h
>> @@ -112,6 +112,7 @@ void map__delete(struct map *self);
>>  struct map *map__clone(struct map *self);
>>  int map__overlap(struct map *l, struct map *r);
>>  size_t map__fprintf(struct map *self, FILE *fp);
>> +void map__print_dsoname(struct map *self);
>>  
>>  int map__load(struct map *self, symbol_filter_t filter);
>>  struct symbol *map__find_symbol(struct map *self,
>> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
>> index 453a010..442be3a 100644
>> --- a/tools/perf/util/session.c
>> +++ b/tools/perf/util/session.c
>> @@ -1214,7 +1214,6 @@ void perf_session__print_ip(union perf_event *event,
>>  			    int print_sym, int print_dso)
>>  {
>>  	struct addr_location al;
>> -	const char *symname, *dsoname;
>>  	struct callchain_cursor *cursor = &session->callchain_cursor;
>>  	struct callchain_cursor_node *node;
>>  
>> @@ -1242,20 +1241,13 @@ void perf_session__print_ip(union perf_event *event,
>>  
>>  			printf("\t%16" PRIx64, node->ip);
>>  			if (print_sym) {
>> -				if (node->sym && node->sym->name)
>> -					symname = node->sym->name;
>> -				else
>> -					symname = "";
>> -
>> -				printf(" %s", symname);
>> +				printf(" ");
>> +				symbol__print_symname(node->sym);
>>  			}
>>  			if (print_dso) {
>> -				if (node->map && node->map->dso && node->map->dso->name)
>> -					dsoname = node->map->dso->name;
>> -				else
>> -					dsoname = "";
>> -
>> -				printf(" (%s)", dsoname);
>> +				printf(" (");
>> +				map__print_dsoname(al.map);
>> +				printf(")");
>>  			}
>>  			printf("\n");
>>  
>> @@ -1265,21 +1257,14 @@ void perf_session__print_ip(union perf_event *event,
>>  	} else {
>>  		printf("%16" PRIx64, sample->ip);
>>  		if (print_sym) {
>> -			if (al.sym && al.sym->name)
>> -				symname = al.sym->name;
>> -			else
>> -				symname = "";
>> -
>> -			printf(" %s", symname);
>> +			printf(" ");
>> +			symbol__print_symname(al.sym);
>>  		}
>>  
>>  		if (print_dso) {
>> -			if (al.map && al.map->dso && al.map->dso->name)
>> -				dsoname = al.map->dso->name;
>> -			else
>> -				dsoname = "";
>> -
>> -			printf(" (%s)", dsoname);
>> +			printf(" (");
>> +			map__print_dsoname(al.map);
>> +			printf(")");
>>  		}
>>  	}
>>  }
>> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
>> index eec1963..85e19c4 100644
>> --- a/tools/perf/util/symbol.c
>> +++ b/tools/perf/util/symbol.c
>> @@ -175,6 +175,18 @@ static size_t symbol__fprintf(struct symbol *sym, FILE *fp)
>>  		       sym->name);
>>  }
>>  
>> +void symbol__print_symname(const struct symbol *sym)
>> +{
>> +	const char *symname;
>> +
>> +	if (sym && sym->name)
>> +		symname = sym->name;
>> +	else
>> +		symname = "(unknown)";
>> +
>> +	printf("%s", symname);
>> +}
>> +
>>  void dso__set_long_name(struct dso *dso, char *name)
>>  {
>>  	if (name == NULL)
>> diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
>> index 325ee36..1ec17b4 100644
>> --- a/tools/perf/util/symbol.h
>> +++ b/tools/perf/util/symbol.h
>> @@ -238,6 +238,7 @@ void machines__destroy_guest_kernel_maps(struct rb_root *machines);
>>  
>>  int symbol__init(void);
>>  void symbol__exit(void);
>> +void symbol__print_symname(const struct symbol *sym);
>>  bool symbol_type__is_a(char symbol_type, enum map_type map_type);
>>  
>>  size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp);
>>

  reply	other threads:[~2011-07-17 16:30 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-17  9:30 [PATCH -tip v2 0/6] perf script: add BTS analysis features Akihiro Nagai
2011-07-17  9:30 ` [PATCH -tip v2 1/6] [BUGFIX] perf script: print correct IP address Akihiro Nagai
2011-07-17 15:59   ` David Ahern
2011-07-17 17:29     ` Frederic Weisbecker
2011-07-17  9:30 ` [PATCH -tip v2 2/6] perf script: add magic word to indicate the failure of resolving symbols Akihiro Nagai
2011-07-17 16:07   ` David Ahern
2011-07-17 16:30     ` David Ahern [this message]
2011-07-21  9:36       ` Akihiro Nagai
2011-07-21  9:42         ` Peter Zijlstra
2011-07-21 14:39         ` David Ahern
2011-07-22  4:25           ` Akihiro Nagai
2011-07-17  9:30 ` [PATCH -tip v2 3/6] perf script: resolve DSOs and symbols for user-space Akihiro Nagai
2011-07-17 16:20   ` David Ahern
2011-07-21  9:36     ` Akihiro Nagai
2011-07-17  9:31 ` [PATCH -tip v2 4/6] perf script: print DSOs and symbols for BTS branch_from addr Akihiro Nagai
2011-07-17 16:22   ` David Ahern
2011-07-21  9:36     ` Akihiro Nagai
2011-07-17  9:31 ` [PATCH -tip v2 5/6] perf script: add the offset field specifier Akihiro Nagai
2011-07-17 16:28   ` David Ahern
2011-07-17  9:31 ` [PATCH -tip v2 6/6] perf script: add option resolving vmlinux path Akihiro Nagai
2011-07-17 16:36   ` David Ahern
2011-07-21  9:36     ` Akihiro Nagai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E230E32.3010503@gmail.com \
    --to=dsahern@gmail.com \
    --cc=acme@infradead.org \
    --cc=akihiro.nagai.hw@hitachi.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=yrl.pp-manager.tt@hitachi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.