2 * SPDX-License-Identifier: CDDL 1.0
4 * Copyright 2022 Christos Margiolis <christos@FreeBSD.org>
10 #include <sys/dtrace.h>
13 char kpd_func[DTRACE_FUNCNAMELEN];
14 char kpd_mod[DTRACE_MODNAMELEN];
16 } dtrace_kinst_probedesc_t;
18 #define KINSTIOC_MAKEPROBE _IOW('k', 1, dtrace_kinst_probedesc_t)
22 #include <sys/queue.h>
24 #include "kinst_isa.h"
27 LIST_ENTRY(kinst_probe) kp_hashnext;
31 kinst_patchval_t kp_patchval;
32 kinst_patchval_t kp_savedval;
33 kinst_patchval_t *kp_patchpoint;
35 struct kinst_probe_md kp_md;
38 LIST_HEAD(kinst_probe_list, kinst_probe);
40 extern struct kinst_probe_list *kinst_probetab;
42 #define KINST_PROBETAB_MAX 0x8000 /* 32k */
43 #define KINST_ADDR2NDX(addr) (((uintptr_t)(addr)) & (KINST_PROBETAB_MAX - 1))
44 #define KINST_GETPROBE(i) (&kinst_probetab[KINST_ADDR2NDX(i)])
49 int kinst_invop(uintptr_t, struct trapframe *, uintptr_t);
50 int kinst_make_probe(struct linker_file *, int, struct linker_symval *,
52 void kinst_patch_tracepoint(struct kinst_probe *, kinst_patchval_t);
53 void kinst_probe_create(struct kinst_probe *, struct linker_file *);
55 int kinst_trampoline_init(void);
56 int kinst_trampoline_deinit(void);
57 uint8_t *kinst_trampoline_alloc(int);
58 void kinst_trampoline_dealloc(uint8_t *);
61 MALLOC_DECLARE(M_KINST);
62 #endif /* MALLOC_DECLARE */
64 #define KINST_LOG_HELPER(fmt, ...) \
65 printf("%s:%d: " fmt "%s\n", __func__, __LINE__, __VA_ARGS__)
66 #define KINST_LOG(...) \
67 KINST_LOG_HELPER(__VA_ARGS__, "")
71 #endif /* _KINST_H_ */