1 /* 2 * SPDX-License-Identifier: CDDL 1.0 3 * 4 * Copyright 2022 Christos Margiolis <christos@FreeBSD.org> 5 * Copyright 2022 Mark Johnston <markj@FreeBSD.org> 6 */ 7 8 #ifndef _KINST_ISA_H_ 9 #define _KINST_ISA_H_ 10 11 #include <sys/types.h> 12 13 #define KINST_PATCHVAL 0xcc 14 15 /* 16 * Each trampoline is 32 bytes long and contains [instruction, jmp]. Since we 17 * have 2 instructions stored in the trampoline, and each of them can take up 18 * to 16 bytes, 32 bytes is enough to cover even the worst case scenario. 19 */ 20 #define KINST_TRAMP_SIZE 32 21 22 typedef uint8_t kinst_patchval_t; 23 24 struct kinst_probe_md { 25 int flags; 26 int instlen; /* original instr len */ 27 int tinstlen; /* trampoline instr len */ 28 uint8_t template[16]; /* copied into thread tramps */ 29 int dispoff; /* offset of rip displacement */ 30 31 /* operands to "call" instruction branch target */ 32 int reg1; 33 int reg2; 34 int scale; 35 int64_t disp; 36 }; 37 38 #endif /* _KINST_ISA_H_ */ 39