perf trace: Allow specifying index offset in strarrays

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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 316d70d6
...@@ -44,6 +44,7 @@ struct syscall_arg { ...@@ -44,6 +44,7 @@ struct syscall_arg {
}; };
struct strarray { struct strarray {
int offset;
int nr_entries; int nr_entries;
const char **entries; const char **entries;
}; };
...@@ -53,14 +54,20 @@ struct strarray { ...@@ -53,14 +54,20 @@ struct strarray {
.entries = array, \ .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, static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
int idx = arg->val;
struct strarray *sa = arg->parm; struct strarray *sa = arg->parm;
int idx = arg->val - sa->offset;
if (idx < 0 || idx >= sa->nr_entries) 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]); return scnprintf(bf, size, "%s", sa->entries[idx]);
} }
...@@ -288,8 +295,8 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc ...@@ -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 #define SCA_FUTEX_OP syscall_arg__scnprintf_futex_op
static const char *epoll_ctl_ops[] = { [1] = "ADD", "DEL", "MOD", }; static const char *epoll_ctl_ops[] = { "ADD", "DEL", "MOD", };
static DEFINE_STRARRAY(epoll_ctl_ops); static DEFINE_STRARRAY_OFFSET(epoll_ctl_ops, 1);
static const char *itimers[] = { "REAL", "VIRTUAL", "PROF", }; static const char *itimers[] = { "REAL", "VIRTUAL", "PROF", };
static DEFINE_STRARRAY(itimers); static DEFINE_STRARRAY(itimers);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment