+2015-07-02 Markus Metzger <markus.t.metzger@intel.com>
+
+ * nat/linux-btrace.c (linux_enable_bts): Check for
+ PERF_ATTR_SIZE_VER5.
+ Check for data_offset and data_size fields. Use them.
+
2015-07-02 Markus Metzger <markus.t.metzger@intel.com>
* NEWS: Announce new commands "record btrace pt" and "record pt".
struct perf_event_mmap_page *header;
struct btrace_target_info *tinfo;
struct btrace_tinfo_bts *bts;
- unsigned long long size, pages;
+ unsigned long long size, pages, data_offset, data_size;
int pid, pg;
tinfo = xzalloc (sizeof (*tinfo));
break;
}
- if (header == MAP_FAILED)
+ if (pages == 0)
goto err_file;
+ data_offset = PAGE_SIZE;
+ data_size = size;
+
+#if defined (PERF_ATTR_SIZE_VER5)
+ if (offsetof (struct perf_event_mmap_page, data_size) <= header->size)
+ {
+ data_offset = header->data_offset;
+ data_size = header->data_size;
+ }
+#endif /* defined (PERF_ATTR_SIZE_VER5) */
+
bts->header = header;
- bts->bts.mem = ((const uint8_t *) header) + PAGE_SIZE;
- bts->bts.size = size;
+ bts->bts.mem = ((const uint8_t *) header) + data_offset;
+ bts->bts.size = data_size;
bts->bts.data_head = &header->data_head;
bts->bts.last_head = 0;
- tinfo->conf.bts.size = size;
+ tinfo->conf.bts.size = data_size;
return tinfo;
err_file: