Messages in this thread | | | Date | Wed, 17 Jul 2013 14:02:08 +0300 | From | Adrian Hunter <> | Subject | Re: [PATCH V5 12/12] perf tools: add a sample parsing test |
| |
On 16/07/13 15:48, Jiri Olsa wrote: > On Thu, Jul 11, 2013 at 04:12:21PM +0300, Adrian Hunter wrote: >> Add a test that checks that sample parsing is correctly >> implemented. > > nice!!! :) > >> >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > > SNIP > >> +static int do_test(u64 sample_type, u64 sample_regs_user) >> +{ >> + struct perf_evsel evsel = { >> + .needs_swap = false, >> + .attr = { >> + .sample_type = sample_type, >> + .sample_regs_user = sample_regs_user, >> + }, >> + }; >> + union perf_event event = { >> + .header = { >> + .type = PERF_RECORD_SAMPLE, >> + .size = sizeof(union perf_event), >> + }, >> + }; > > maybe I'm missing something but how does event.sample.array get > allocated? It's used in perf_event__synthesize_sample func.
'union perf_event' is very big because of 'struct mmap_event' which contains 'char filename[PATH_MAX]' and PATH_MAX is 4096.
> > do we need to use something like in the patch below..
Might as well calculate it correctly.
> > thanks, > jirka > > --- > diff --git a/tools/perf/tests/sample-parsing.c b/tools/perf/tests/sample-parsing.c > index c6e6813..dcbd40d 100644 > --- a/tools/perf/tests/sample-parsing.c > +++ b/tools/perf/tests/sample-parsing.c > @@ -111,12 +111,8 @@ static int do_test(u64 sample_type, u64 sample_regs_user) > .sample_regs_user = sample_regs_user, > }, > }; > - union perf_event event = { > - .header = { > - .type = PERF_RECORD_SAMPLE, > - .size = sizeof(union perf_event), > - }, > - }; > + u64 buf[100]; > + union perf_event *event = (union perf_event *) buf; > union { > struct ip_callchain callchain; > u64 data[64]; > @@ -162,10 +158,15 @@ static int do_test(u64 sample_type, u64 sample_regs_user) > size_t i; > int err; > > + event->sample.header = (struct perf_event_header) { > + .type = PERF_RECORD_SAMPLE, > + .size = sizeof(union perf_event), > + }; > + > for (i = 0; i < sizeof(user_regs); i++) > *(u8 *)user_regs = i; > > - err = perf_event__synthesize_sample(&event, sample_type, > + err = perf_event__synthesize_sample(event, sample_type, > sample_regs_user, &sample, false); > if (err) { > pr_debug("%s failed for sample_type %#"PRIx64", error %d\n", > @@ -175,7 +176,7 @@ static int do_test(u64 sample_type, u64 sample_regs_user) > > evsel.sample_size = __perf_evsel__sample_size(sample_type); > > - err = perf_evsel__parse_sample(&evsel, &event, &sample_out); > + err = perf_evsel__parse_sample(&evsel, event, &sample_out); > if (err) { > pr_debug("%s failed for sample_type %#"PRIx64", error %d\n", > "perf_evsel__parse_sample", sample_type, err); > >
| |