00001 00015 #include <sys/time.h> 00016 #include <time.h> 00017 #include <stdint.h> 00018 00019 #include "op_types.h" 00020 00021 #ifndef JITDUMP_H 00022 #define JITDUMP_H 00023 00027 #define JITHEADER_MAGIC 0x4F74496A 00028 00032 #define PADDING_8ALIGNED(x) ((((x) + 7) & 7) ^ 7) 00033 00037 #define JITHEADER_VERSION 1 00038 00039 struct jitheader { 00040 /* characters "jItO" */ 00041 u32 magic; 00042 /* version of the dump */ 00043 u32 version; 00044 u32 totalsize; 00045 u32 bfd_arch; 00046 u32 bfd_mach; 00047 u64 timestamp; 00048 char bfd_target[0]; 00049 }; 00050 00051 enum jit_record_type { 00052 JIT_CODE_LOAD=0, 00053 JIT_CODE_UNLOAD=1, 00054 JIT_CODE_CLOSE=2, 00055 JIT_CODE_DEBUG_INFO=3 00056 }; 00057 00058 /* each record starts always with a id and a total_size */ 00059 struct jr_prefix { 00060 u32 id; 00061 u32 total_size; 00062 }; 00063 00064 /* record0 (id=0) logs a jitted code */ 00065 struct jr_code_load { 00066 u32 id; 00067 u32 total_size; 00068 u64 timestamp; 00069 u64 vma; 00070 u64 code_addr; 00071 u32 code_size; 00072 u32 align; 00073 }; 00074 00075 /* record1 (id=1) logs a code unload */ 00076 struct jr_code_unload { 00077 u32 id; 00078 u32 total_size; 00079 u64 timestamp; 00080 u64 vma; 00081 }; 00082 00083 /* record2 (id=2) logs end of JVM livetime */ 00084 struct jr_code_close { 00085 u32 id; 00086 u32 total_size; 00087 u64 timestamp; 00088 }; 00089 00090 /* record3 (id=3) logs debug line information. */ 00091 struct jr_code_debug_info { 00092 u32 id; 00093 u32 total_size; 00094 u64 timestamp; 00095 u64 code_addr; 00096 u32 nr_entry; 00097 u32 align; 00098 }; 00099 00100 #endif /* !JITDUMP_H */ 00101