perf_counter tools: Use hex2u64 in more places
This has also a nice side effect, tools built on newer systems such as
fedora 10 again work on systems with older versions of glibc:
My workstation:
[acme@doppio ~]$ rpm -q glibc.x86_64
glibc-2.9-3.x86_64
Test machine:
[acme@emilia ~]$ rpm -q glibc.x86_64
glibc-2.5-24
Before:
[acme@emilia ~]$ perf
perf: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by perf)
[acme@emilia ~]$ nm `which perf` | grep GLIBC_2\.7
U __isoc99_sscanf@@GLIBC_2.7
[acme@emilia ~]$
After:
[acme@emilia ~]$ perf
usage: perf [--version] [--help] COMMAND [ARGS]
The most commonly used perf commands are:
record Run a command and record its profile into perf.data
report Read perf.data (created by perf record) and display the
profile
stat Run a command and gather performance counter statistics
top Run a command and profile it
See 'perf help COMMAND' for more information on a specific command.
[acme@emilia ~]$ nm `which perf` | grep GLIBC_2\.7
[acme@emilia ~]$
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <20090601205019.GA7805@ghostprotocols.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
ea5cc87c63
commit
a0055ae2a4
5 changed files with 54 additions and 70 deletions
|
|
@ -4,6 +4,7 @@
|
|||
#include "parse-options.h"
|
||||
#include "parse-events.h"
|
||||
#include "exec_cmd.h"
|
||||
#include "string.h"
|
||||
|
||||
int nr_counters;
|
||||
|
||||
|
|
@ -105,22 +106,26 @@ static __u64 match_event_symbols(const char *str)
|
|||
__u64 config, id;
|
||||
int type;
|
||||
unsigned int i;
|
||||
char mask_str[4];
|
||||
const char *sep, *pstr;
|
||||
|
||||
if (sscanf(str, "r%llx", &config) == 1)
|
||||
if (str[0] == 'r' && hex2u64(str + 1, &config) > 0)
|
||||
return config | PERF_COUNTER_RAW_MASK;
|
||||
|
||||
switch (sscanf(str, "%d:%llu:%2s", &type, &id, mask_str)) {
|
||||
case 3:
|
||||
if (strchr(mask_str, 'k'))
|
||||
pstr = str;
|
||||
sep = strchr(pstr, ':');
|
||||
if (sep) {
|
||||
type = atoi(pstr);
|
||||
pstr = sep + 1;
|
||||
id = atoi(pstr);
|
||||
sep = strchr(pstr, ':');
|
||||
if (sep) {
|
||||
pstr = sep + 1;
|
||||
if (strchr(pstr, 'k'))
|
||||
event_mask[nr_counters] |= EVENT_MASK_USER;
|
||||
if (strchr(mask_str, 'u'))
|
||||
if (strchr(pstr, 'u'))
|
||||
event_mask[nr_counters] |= EVENT_MASK_KERNEL;
|
||||
case 2:
|
||||
return EID(type, id);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return EID(type, id);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(event_symbols); i++) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue