18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file jitdump.h
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Header structure of a JIT-dump file.
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2007 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Jens Wilke
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @Modifications Daniel Hansel
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Copyright IBM Corporation 2007
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <sys/time.h>
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <time.h>
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdint.h>
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_types.h"
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef JITDUMP_H
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define JITDUMP_H
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /**
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd  * Magic to do a sanity check that this is a dump file
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd  * characters "jItO" */
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define JITHEADER_MAGIC 0x4F74496A
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Macro to calculate count of padding bytes
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * to extend a size to be 8-byte aligned. */
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define PADDING_8ALIGNED(x) ((((x) + 7) & 7) ^ 7)
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Version number to avoid conflicts, increase
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * this whenever the header is changed */
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define JITHEADER_VERSION 1
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct jitheader {
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/* characters "jItO" */
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 magic;
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/* version of the dump */
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 version;
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 totalsize;
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 bfd_arch;
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 bfd_mach;
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 timestamp;
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	char bfd_target[0];
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddenum jit_record_type {
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	JIT_CODE_LOAD=0,
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	JIT_CODE_UNLOAD=1,
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	JIT_CODE_CLOSE=2,
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	JIT_CODE_DEBUG_INFO=3
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* each record starts always with a id and a total_size */
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct jr_prefix {
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 id;
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 total_size;
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* record0 (id=0) logs a jitted code */
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct jr_code_load {
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 id;
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 total_size;
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 timestamp;
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 vma;
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 code_addr;
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 code_size;
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 align;
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* record1 (id=1) logs a code unload */
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct jr_code_unload {
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 id;
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 total_size;
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 timestamp;
808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 vma;
818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* record2 (id=2) logs end of JVM livetime */
848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct jr_code_close {
858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 id;
868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 total_size;
878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 timestamp;
888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* record3 (id=3) logs debug line information. */
918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct jr_code_debug_info {
928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 id;
938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 total_size;
948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 timestamp;
958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u64 code_addr;
968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 nr_entry;
978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	u32 align;
988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* !JITDUMP_H */
1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
102