|
@@ -212,6 +212,7 @@ static int read_ftrace_printk(struct pevent *pevent)
|
|
|
static int read_header_files(struct pevent *pevent)
|
|
|
{
|
|
|
unsigned long long size;
|
|
|
+ char *header_page;
|
|
|
char buf[BUFSIZ];
|
|
|
int ret = 0;
|
|
|
|
|
@@ -224,7 +225,26 @@ static int read_header_files(struct pevent *pevent)
|
|
|
}
|
|
|
|
|
|
size = read8(pevent);
|
|
|
- skip(size);
|
|
|
+
|
|
|
+ header_page = malloc(size);
|
|
|
+ if (header_page == NULL)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ if (do_read(header_page, size) < 0) {
|
|
|
+ pr_debug("did not read header page");
|
|
|
+ free(header_page);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!pevent_parse_header_page(pevent, header_page, size,
|
|
|
+ pevent_get_long_size(pevent))) {
|
|
|
+ /*
|
|
|
+ * The commit field in the page is of type long,
|
|
|
+ * use that instead, since it represents the kernel.
|
|
|
+ */
|
|
|
+ pevent_set_long_size(pevent, pevent->header_page_size_size);
|
|
|
+ }
|
|
|
+ free(header_page);
|
|
|
|
|
|
if (do_read(buf, 13) < 0)
|
|
|
return -1;
|