OPT_CALLBACK
OPT_CALLBACK('C', "cpus", NULL, "cpu[,cpu2,...cpuN]",
OPT_CALLBACK('M', "memnodes", NULL, "node[,node2,...nodeN]",
OPT_CALLBACK('G', "cgroups", NULL, "SEND,RECV",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK(0, "percent-type", &annotate_opts, "local-period",
OPT_CALLBACK(0, "percent-limit", &annotate, "percent",
OPT_CALLBACK('e', "event", &event_set, "event",
OPT_CALLBACK('c', "compute", &compute,
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK(0, "percentage", NULL, "relative|absolute",
OPT_CALLBACK('T', "trace-funcs", &ftrace.filters, "func",
OPT_CALLBACK('N', "notrace-funcs", &ftrace.notrace, "func",
OPT_CALLBACK(0, "func-opts", &ftrace, "options",
OPT_CALLBACK('G', "graph-funcs", &ftrace.graph_funcs, "func",
OPT_CALLBACK('g', "nograph-funcs", &ftrace.nograph_funcs, "func",
OPT_CALLBACK(0, "graph-opts", &ftrace, "options",
OPT_CALLBACK('m', "buffer-size", &ftrace.percpu_buffer_size, "size",
OPT_CALLBACK('T', "trace-funcs", &ftrace.filters, "func",
OPT_CALLBACK('e', "events", &ftrace.event_pair, "event1,event2",
OPT_CALLBACK('T', "trace-funcs", &ftrace.filters, "func",
OPT_CALLBACK('N', "notrace-funcs", &ftrace.notrace, "func",
OPT_CALLBACK('G', "graph-funcs", &ftrace.graph_funcs, "func",
OPT_CALLBACK('g', "nograph-funcs", &ftrace.nograph_funcs, "func",
OPT_CALLBACK('m', "buffer-size", &ftrace.percpu_buffer_size, "size",
OPT_CALLBACK('s', "sort", &profile_sort, "key",
OPT_CALLBACK(0, "graph-opts", &ftrace, "options",
OPT_CALLBACK(0, "unwind-style", NULL, "unwind style",
OPT_CALLBACK('s', "sort", NULL, "key[,key2...]",
OPT_CALLBACK('l', "line", NULL, "num", "show n lines", parse_line_opt),
OPT_CALLBACK('m', "mmap-pages", &kvm->opts.mmap_pages, "pages",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK(0, "output", &output_name, "file", "output file name", parse_output),
OPT_CALLBACK('M', "map-nr-entries", &bpf_map_entries, "num",
OPT_CALLBACK(0, "max-stack", &max_stack_depth, "num",
OPT_CALLBACK('Y', "type-filter", NULL, "FLAGS",
OPT_CALLBACK('L', "lock-filter", NULL, "ADDRS/NAMES",
OPT_CALLBACK('S', "callstack-filter", NULL, "NAMES",
OPT_CALLBACK('G', "cgroup-filter", NULL, "CGROUPS",
OPT_CALLBACK('J', "inject-delay", NULL, "TIME@FUNC",
OPT_CALLBACK('t', "type", &mem.operation,
OPT_CALLBACK('e', "event", &mem, "event",
OPT_CALLBACK('d', "del", NULL, "[GROUP:]EVENT", "delete a probe event.",
OPT_CALLBACK('a', "add", NULL, PROBEDEF_STR,
OPT_CALLBACK('D', "definition", NULL, PROBEDEF_STR,
OPT_CALLBACK('L', "line", NULL,
OPT_CALLBACK('V', "vars", NULL,
OPT_CALLBACK('\0', "filter", NULL,
OPT_CALLBACK('x', "exec", NULL, "executable|path",
OPT_CALLBACK('m', "module", NULL, "modname|path",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK(0, "target-ns", NULL, "pid",
OPT_CALLBACK('e', "event", &parse_events_option_args, "event",
OPT_CALLBACK(0, "filter", &record.evlist, "filter",
OPT_CALLBACK('F', "freq", &record.opts, "freq or 'max'",
OPT_CALLBACK('m', "mmap-pages", &record.opts, "pages[,pages]",
OPT_CALLBACK(0, "mmap-flush", &record.opts, "number",
OPT_CALLBACK(0, "call-graph", &record.opts,
OPT_CALLBACK('G', "cgroup", &record.evlist, "name",
OPT_CALLBACK('D', "delay", &record, "ms",
OPT_CALLBACK('j', "branch-filter", &record.opts.branch_stack,
OPT_CALLBACK('k', "clockid", &record.opts,
OPT_CALLBACK(0, "affinity", &record.opts, "node|cpu",
OPT_CALLBACK(0, "max-size", &record.output_max_size,
OPT_CALLBACK(0, "pfm-events", &record.evlist, "event",
OPT_CALLBACK(0, "control", &record.opts, "fd:ctl-fd[,ack-fd] or fifo:ctl-fifo[,ack-fifo]",
OPT_CALLBACK(0, "synth", &record.opts, "no|all|task|mmap|cgroup",
OPT_CALLBACK(0, "off-cpu-thresh", &record.opts, "ms",
OPT_CALLBACK(0, "ignore-callees", NULL, "regex",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK(0, "addr2line-style", NULL, "addr2line style",
OPT_CALLBACK(0, "unwind-style", NULL, "unwind style",
OPT_CALLBACK(0, "percent-limit", &report, "percent",
OPT_CALLBACK(0, "percentage", NULL, "relative|absolute",
OPT_CALLBACK(0, "percent-type", &annotate_opts, "local-period",
OPT_CALLBACK(0, "time-quantum", &symbol_conf.time_quantum, "time (ms|us|ns|s)",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK('s', "script", NULL, "name",
OPT_CALLBACK(0, "dlarg", NULL, "argument", "filter argument",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK('F', "fields", NULL, "str",
OPT_CALLBACK(0, "unwind-style", NULL, "unwind style",
OPT_CALLBACK('e', "event", &parse_events_option_args, "event",
OPT_CALLBACK(0, "filter", &evsel_list, "filter",
OPT_CALLBACK('G', "cgroup", &evsel_list, "name",
OPT_CALLBACK(0, "tpebs-mode", &tpebs_mode, "tpebs-mode",
OPT_CALLBACK('M', "metrics", &evsel_list, "metric/metric group list",
OPT_CALLBACK(0, "cputype", &evsel_list, "hybrid cpu type",
OPT_CALLBACK(0, "pmu-filter", &evsel_list, "pmu",
OPT_CALLBACK(0, "pfm-events", &evsel_list, "event",
OPT_CALLBACK(0, "control", &stat_config, "fd:ctl-fd[,ack-fd] or fifo:ctl-fifo[,ack-fifo]",
OPT_CALLBACK(0, "highlight", NULL, "duration or task name",
OPT_CALLBACK('p', "process", NULL, "process",
OPT_CALLBACK(0, "symfs", NULL, "directory[,layout]", SYMFS_HELP,
OPT_CALLBACK(0, "io-min-time", &tchart.min_time, "time",
OPT_CALLBACK(0, "io-merge-dist", &tchart.merge_dist, "time",
OPT_CALLBACK('e', "event", &parse_events_option_args, "event",
OPT_CALLBACK(0, "filter", &top.evlist, "filter",
OPT_CALLBACK('m', "mmap-pages", &opts->mmap_pages, "pages",
OPT_CALLBACK('F', "freq", &top.record_opts, "freq or 'max'",
OPT_CALLBACK(0, "call-graph", &callchain_param,
OPT_CALLBACK(0, "ignore-callees", NULL, "regex",
OPT_CALLBACK(0, "percent-limit", &top, "percent",
OPT_CALLBACK(0, "percentage", NULL, "relative|absolute",
OPT_CALLBACK('j', "branch-filter", &opts->branch_stack,
OPT_CALLBACK('G', "cgroup", &top.evlist, "name",
OPT_CALLBACK(0, "pfm-events", &top.evlist, "event",
OPT_CALLBACK('e', "event", &trace, "event",
OPT_CALLBACK(0, "filter", &trace.evlist, "filter",
OPT_CALLBACK(0, "expr", &trace, "expr", "list of syscalls/events to trace",
OPT_CALLBACK(0, "filter-pids", &trace, "CSV list of pids",
OPT_CALLBACK('m', "mmap-pages", &trace.opts.mmap_pages, "pages",
OPT_CALLBACK(0, "duration", &trace, "float",
OPT_CALLBACK(0, "summary-mode", &trace, "mode",
OPT_CALLBACK(0, "call-graph", &trace.opts,
OPT_CALLBACK('G', "cgroup", &trace, "name", "monitor event in cgroup name only",
#define RTLA_OPT_FILTER OPT_CALLBACK(0, "filter", ¶ms->common.events, \
#define RTLA_OPT_TRACE_BUFFER_SIZE OPT_CALLBACK(0, "trace-buffer-size", \
#define RTLA_OPT_WARM_UP OPT_CALLBACK(0, "warm-up", ¶ms->common.warmup, "s", \
#define RTLA_OPT_AUTO(cb) OPT_CALLBACK('a', "auto", &cb_data, "us", \
#define RTLA_OPT_ON_THRESHOLD(threshold, cb) OPT_CALLBACK(0, "on-threshold", \
#define RTLA_OPT_ON_END(cb) OPT_CALLBACK(0, "on-end", ¶ms->common.end_actions, \
#define OSNOISE_OPT_PERIOD OPT_CALLBACK('p', "period", ¶ms->period, "us", \
#define OSNOISE_OPT_RUNTIME OPT_CALLBACK('r', "runtime", ¶ms->runtime, "us", \
#define OSNOISE_OPT_THRESHOLD OPT_CALLBACK('T', "threshold", ¶ms->threshold, "us", \
#define TIMERLAT_OPT_PERIOD OPT_CALLBACK('p', "period", ¶ms->timerlat_period_us, "us", \
#define TIMERLAT_OPT_STACK OPT_CALLBACK('s', "stack", ¶ms->print_stack, "us", \
#define TIMERLAT_OPT_DMA_LATENCY OPT_CALLBACK(0, "dma-latency", ¶ms->dma_latency, "us", \
#define TIMERLAT_OPT_DEEPEST_IDLE_STATE OPT_CALLBACK(0, "deepest-idle-state", \
#define TIMERLAT_OPT_AA_ONLY OPT_CALLBACK(0, "aa-only", params, "us", \
#define TIMERLAT_OPT_STACK_FORMAT OPT_CALLBACK(0, "stack-format", ¶ms->stack_format, "format", \
#define TIMERLAT_OPT_ALIGNED OPT_CALLBACK('A', "aligned", params, "us", \
#define RTLA_OPT_CPUS OPT_CALLBACK('c', "cpus", ¶ms->common, \
#define HIST_OPT_BUCKET_SIZE OPT_CALLBACK('b', "bucket-size", \
#define HIST_OPT_ENTRIES OPT_CALLBACK('E', "entries", ¶ms->common.hist.entries, "N", \
#define RTLA_OPT_DURATION OPT_CALLBACK('d', "duration", ¶ms->common, \
#define RTLA_OPT_EVENT OPT_CALLBACK('e', "event", ¶ms->common.events, \
#define RTLA_OPT_HOUSEKEEPING OPT_CALLBACK('H', "house-keeping", ¶ms->common, \
#define RTLA_OPT_PRIORITY OPT_CALLBACK('P', "priority", ¶ms->common, \
#define RTLA_OPT_TRIGGER OPT_CALLBACK(0, "trigger", ¶ms->common.events, \
#define TEST_CALLBACK(value, cb) OPT_CALLBACK('t', "test", value, "test value", "test help", cb)