Skip to content

Commit

Permalink
perf trace: Allow specifying index offset in strarrays
Browse files Browse the repository at this point in the history
So that the index passed doesn't have to start at zero, being
decremented from an offset specified when declaring the strarray before
being used as the real array index.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-k1ce6uqyt4qar9edrj3mevod@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Arnaldo Carvalho de Melo committed Oct 11, 2013
1 parent 316d70d commit 03e3adc
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions tools/perf/builtin-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ struct syscall_arg {
};

struct strarray {
int offset;
int nr_entries;
const char **entries;
};
Expand All @@ -53,14 +54,20 @@ struct strarray {
.entries = array, \
}

#define DEFINE_STRARRAY_OFFSET(array, off) struct strarray strarray__##array = { \
.offset = off, \
.nr_entries = ARRAY_SIZE(array), \
.entries = array, \
}

static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size,
struct syscall_arg *arg)
{
int idx = arg->val;
struct strarray *sa = arg->parm;
int idx = arg->val - sa->offset;

if (idx < 0 || idx >= sa->nr_entries)
return scnprintf(bf, size, "%d", idx);
return scnprintf(bf, size, "%d", arg->val);

return scnprintf(bf, size, "%s", sa->entries[idx]);
}
Expand Down Expand Up @@ -288,8 +295,8 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc

#define SCA_FUTEX_OP syscall_arg__scnprintf_futex_op

static const char *epoll_ctl_ops[] = { [1] = "ADD", "DEL", "MOD", };
static DEFINE_STRARRAY(epoll_ctl_ops);
static const char *epoll_ctl_ops[] = { "ADD", "DEL", "MOD", };
static DEFINE_STRARRAY_OFFSET(epoll_ctl_ops, 1);

static const char *itimers[] = { "REAL", "VIRTUAL", "PROF", };
static DEFINE_STRARRAY(itimers);
Expand Down

0 comments on commit 03e3adc

Please sign in to comment.