perf: Report maximum values for counter overflow
[akaros.git] / tools / profile / perf / perfconv.h
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  *
5  * Converts kprof profiler files into Linux perf ones. The Linux Perf file
6  * format has bee illustrated here:
7  *
8  *       https://lwn.net/Articles/644919/
9  *       https://openlab-mu-internal.web.cern.ch/openlab-mu-internal/03_Documents/
10  *                       3_Technical_Documents/Technical_Reports/2011/Urs_Fassler_report.pdf
11  *
12  */
13
14 #pragma once
15
16 #include <sys/types.h>
17 #include <stdio.h>
18 #include <stdint.h>
19 #include "xlib.h"
20 #include "perf_format.h"
21
22 struct mem_file_reloc {
23         struct mem_file_reloc *next;
24         uint64_t *ptr;
25 };
26
27 struct mem_block {
28         struct mem_block *next;
29         char *base;
30         char *top;
31         char *wptr;
32 };
33
34 struct mem_file {
35         size_t size;
36         struct mem_block *head;
37         struct mem_block *tail;
38         struct mem_file_reloc *relocs;
39 };
40
41 struct static_mmap64 {
42         struct static_mmap64 *next;
43         uint64_t addr;
44         uint64_t size;
45         uint64_t offset;
46         uint32_t pid;
47         uint32_t tid;
48         uint16_t header_misc;
49         char *path;
50 };
51
52 struct perf_headers {
53         struct mem_block *headers[HEADER_FEAT_BITS];
54 };
55
56 struct perf_event_id {
57         uint64_t event;
58         uint64_t id;
59 };
60
61 struct perfconv_context {
62         struct perf_context *pctx;
63         int debug_level;
64         struct static_mmap64 *static_mmaps;
65         struct perf_header ph;
66         struct perf_headers hdrs;
67         struct mem_file fhdrs, attr_ids, attrs, data, event_types;
68 };
69
70 extern char *cmd_line_save;
71
72 struct perfconv_context *perfconv_create_context(struct perf_context *pctx);
73 void perfconv_free_context(struct perfconv_context *cctx);
74 void perfconv_set_dbglevel(int level, struct perfconv_context *cctx);
75 void perfconv_add_kernel_mmap(struct perfconv_context *cctx);
76 void perfconv_add_kernel_buildid(struct perfconv_context *cctx);
77 void perfconv_process_input(struct perfconv_context *cctx, FILE *input,
78                                                         FILE *output);