btrace, linux: use data_size and data_offset
In struct perf_event_mmap_page there are new fields data_size and data_offset that give the location of the perf_event data buffer relative to the mmap page. Use them if they are present. gdb/ * nat/linux-btrace.c (linux_enable_bts): Check for PERF_ATTR_SIZE_VER5. Check for data_offset and data_size fields. Use them.
This commit is contained in:
parent
b20a652466
commit
010a18a1b1
2 changed files with 22 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
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".
|
||||
|
|
|
@ -642,7 +642,7 @@ linux_enable_bts (ptid_t ptid, const struct btrace_config_bts *conf)
|
|||
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));
|
||||
|
@ -704,16 +704,27 @@ linux_enable_bts (ptid_t ptid, const struct btrace_config_bts *conf)
|
|||
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:
|
||||
|
|
Loading…
Add table
Reference in a new issue