#include <byteswap.h>
 #include <linux/bitops.h>
 #include "asm/bug.h"
+#include "event-parse.h"
 #include "evsel.h"
 #include "evlist.h"
 #include "util.h"
 
        return 0;
 }
+
+char *perf_evsel__strval(struct perf_evsel *evsel, struct perf_sample *sample,
+                        const char *name)
+{
+       struct format_field *field = pevent_find_field(evsel->tp_format, name);
+       int offset;
+
+        if (!field)
+                return NULL;
+
+       offset = field->offset;
+
+       if (field->flags & FIELD_IS_DYNAMIC) {
+               offset = *(int *)(sample->raw_data + field->offset);
+               offset &= 0xffff;
+       }
+
+       return sample->raw_data + offset;
+}
+
+u64 perf_evsel__intval(struct perf_evsel *evsel, struct perf_sample *sample,
+                      const char *name)
+{
+       struct format_field *field = pevent_find_field(evsel->tp_format, name);
+       u64 val;
+
+        if (!field)
+                return 0;
+
+       val = pevent_read_number(evsel->tp_format->pevent,
+                                sample->raw_data + field->offset, field->size);
+       return val;
+
+}
 
                     struct thread_map *threads);
 void perf_evsel__close(struct perf_evsel *evsel, int ncpus, int nthreads);
 
+struct perf_sample;
+
+char *perf_evsel__strval(struct perf_evsel *evsel, struct perf_sample *sample,
+                        const char *name);
+u64 perf_evsel__intval(struct perf_evsel *evsel, struct perf_sample *sample,
+                      const char *name);
+
 #define perf_evsel__match(evsel, t, c)         \
        (evsel->attr.type == PERF_TYPE_##t &&   \
         evsel->attr.config == PERF_COUNT_##c)