brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · ab2842d Raw
141 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * jitdump.h: jitted code info encapsulation file format4 *5 * Adapted from OProfile GPLv2 support jidump.h:6 * Copyright 2007 OProfile authors7 * Jens Wilke8 * Daniel Hansel9 * Copyright IBM Corporation 200710 */11#ifndef JITDUMP_H12#define JITDUMP_H13 14#include <sys/time.h>15#include <time.h>16#include <stdint.h>17 18/* JiTD */19#define JITHEADER_MAGIC		0x4A69544420#define JITHEADER_MAGIC_SW	0x4454694A21 22#define PADDING_8ALIGNED(x) ((((x) + 7) & 7) ^ 7)23#define ALIGN_8(x) (((x) + 7) & (~7))24 25#define JITHEADER_VERSION 126 27enum jitdump_flags_bits {28	JITDUMP_FLAGS_ARCH_TIMESTAMP_BIT,29	JITDUMP_FLAGS_MAX_BIT,30};31 32#define JITDUMP_FLAGS_ARCH_TIMESTAMP	(1ULL << JITDUMP_FLAGS_ARCH_TIMESTAMP_BIT)33 34#define JITDUMP_FLAGS_RESERVED (JITDUMP_FLAGS_MAX_BIT < 64 ? \35				(~((1ULL << JITDUMP_FLAGS_MAX_BIT) - 1)) : 0)36 37struct jitheader {38	uint32_t magic;		/* characters "jItD" */39	uint32_t version;	/* header version */40	uint32_t total_size;	/* total size of header */41	uint32_t elf_mach;	/* elf mach target */42	uint32_t pad1;		/* reserved */43	uint32_t pid;		/* JIT process id */44	uint64_t timestamp;	/* timestamp */45	uint64_t flags;		/* flags */46};47 48enum jit_record_type {49	JIT_CODE_LOAD		= 0,50        JIT_CODE_MOVE           = 1,51	JIT_CODE_DEBUG_INFO	= 2,52	JIT_CODE_CLOSE		= 3,53	JIT_CODE_UNWINDING_INFO	= 4,54 55	JIT_CODE_MAX,56};57 58/* record prefix (mandatory in each record) */59struct jr_prefix {60	uint32_t id;61	uint32_t total_size;62	uint64_t timestamp;63};64 65struct jr_code_load {66	struct jr_prefix p;67 68	uint32_t pid;69	uint32_t tid;70	uint64_t vma;71	uint64_t code_addr;72	uint64_t code_size;73	uint64_t code_index;74};75 76struct jr_code_close {77	struct jr_prefix p;78};79 80struct jr_code_move {81	struct jr_prefix p;82 83	uint32_t pid;84	uint32_t tid;85	uint64_t vma;86	uint64_t old_code_addr;87	uint64_t new_code_addr;88	uint64_t code_size;89	uint64_t code_index;90};91 92struct debug_entry {93	uint64_t addr;94	int lineno;	    /* source line number starting at 1 */95	int discrim;	    /* column discriminator, 0 is default */96	const char name[]; /* null terminated filename, \xff\0 if same as previous entry */97};98 99struct jr_code_debug_info {100	struct jr_prefix p;101 102	uint64_t code_addr;103	uint64_t nr_entry;104	struct debug_entry entries[];105};106 107struct jr_code_unwinding_info {108	struct jr_prefix p;109 110	uint64_t unwinding_size;111	uint64_t eh_frame_hdr_size;112	uint64_t mapped_size;113	const char unwinding_data[];114};115 116union jr_entry {117        struct jr_code_debug_info info;118        struct jr_code_close close;119        struct jr_code_load load;120        struct jr_code_move move;121        struct jr_prefix prefix;122        struct jr_code_unwinding_info unwinding;123};124 125static inline struct debug_entry *126debug_entry_next(struct debug_entry *ent)127{128	void *a = ent + 1;129	size_t l = strlen(ent->name) + 1;130	return a + l;131}132 133static inline char *134debug_entry_file(struct debug_entry *ent)135{136	void *a = ent + 1;137	return a;138}139 140#endif /* !JITDUMP_H */141