1#ifndef JITDUMP_H
2#define JITDUMP_H
3
4#include <sys/time.h>
5#include <time.h>
6#include <stdint.h>
7
8/* JiTD */
9#define JITHEADER_MAGIC 0x4A695444
10#define JITHEADER_MAGIC_SW 0x4454694A
11
12#define PADDING_8ALIGNED(x) ((((x) + 7) & 7) ^ 7)
13
14#define JITHEADER_VERSION 1
15
16struct jitheader {
17  uint32_t magic;      /* characters "jItD" */
18  uint32_t version;    /* header version */
19  uint32_t total_size; /* total size of header */
20  uint32_t elf_mach;   /* elf mach target */
21  uint32_t pad1;       /* reserved */
22  uint32_t pid;        /* JIT process id */
23  uint64_t timestamp;  /* timestamp */
24};
25
26enum jit_record_type {
27  JIT_CODE_LOAD = 0,
28  JIT_CODE_MOVE = 1,
29  JIT_CODE_DEBUG_INFO = 2,
30  JIT_CODE_CLOSE = 3,
31  JIT_CODE_MAX
32};
33
34/* record prefix (mandatory in each record) */
35struct jr_prefix {
36  uint32_t id;
37  uint32_t total_size;
38  uint64_t timestamp;
39};
40
41struct jr_code_load {
42  struct jr_prefix p;
43
44  uint32_t pid;
45  uint32_t tid;
46  uint64_t vma;
47  uint64_t code_addr;
48  uint64_t code_size;
49  uint64_t code_index;
50};
51
52struct jr_code_close {
53  struct jr_prefix p;
54};
55
56struct jr_code_move {
57  struct jr_prefix p;
58
59  uint32_t pid;
60  uint32_t tid;
61  uint64_t vma;
62  uint64_t old_code_addr;
63  uint64_t new_code_addr;
64  uint64_t code_size;
65  uint64_t code_index;
66};
67
68struct jr_code_debug_info {
69  struct jr_prefix p;
70
71  uint64_t code_addr;
72  uint64_t nr_entry;
73};
74
75union jr_entry {
76  struct jr_code_debug_info info;
77  struct jr_code_close close;
78  struct jr_code_load load;
79  struct jr_code_move move;
80  struct jr_prefix prefix;
81};
82
83#endif /* !JITDUMP_H */
84