1*df114daeSRuslan Bukin /*- 2*df114daeSRuslan Bukin * Copyright (c) 2023-2025 Ruslan Bukin <br@bsdpad.com> 3*df114daeSRuslan Bukin * 4*df114daeSRuslan Bukin * This work was supported by Innovate UK project 105694, "Digital Security 5*df114daeSRuslan Bukin * by Design (DSbD) Technology Platform Prototype". 6*df114daeSRuslan Bukin * 7*df114daeSRuslan Bukin * Redistribution and use in source and binary forms, with or without 8*df114daeSRuslan Bukin * modification, are permitted provided that the following conditions 9*df114daeSRuslan Bukin * are met: 10*df114daeSRuslan Bukin * 1. Redistributions of source code must retain the above copyright 11*df114daeSRuslan Bukin * notice, this list of conditions and the following disclaimer. 12*df114daeSRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 13*df114daeSRuslan Bukin * notice, this list of conditions and the following disclaimer in the 14*df114daeSRuslan Bukin * documentation and/or other materials provided with the distribution. 15*df114daeSRuslan Bukin * 16*df114daeSRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*df114daeSRuslan Bukin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*df114daeSRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*df114daeSRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*df114daeSRuslan Bukin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*df114daeSRuslan Bukin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*df114daeSRuslan Bukin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*df114daeSRuslan Bukin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*df114daeSRuslan Bukin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*df114daeSRuslan Bukin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*df114daeSRuslan Bukin * SUCH DAMAGE. 27*df114daeSRuslan Bukin */ 28*df114daeSRuslan Bukin 29*df114daeSRuslan Bukin #include <sys/hwt_record.h> 30*df114daeSRuslan Bukin 31*df114daeSRuslan Bukin #ifndef _DEV_HWT_HWT_HOOK_H_ 32*df114daeSRuslan Bukin #define _DEV_HWT_HWT_HOOK_H_ 33*df114daeSRuslan Bukin 34*df114daeSRuslan Bukin #define HWT_SWITCH_IN 0 35*df114daeSRuslan Bukin #define HWT_SWITCH_OUT 1 36*df114daeSRuslan Bukin #define HWT_THREAD_EXIT 2 37*df114daeSRuslan Bukin #define HWT_THREAD_CREATE 3 38*df114daeSRuslan Bukin #define HWT_THREAD_SET_NAME 4 39*df114daeSRuslan Bukin #define HWT_RECORD 5 40*df114daeSRuslan Bukin #define HWT_MMAP 6 41*df114daeSRuslan Bukin #define HWT_EXEC 7 42*df114daeSRuslan Bukin 43*df114daeSRuslan Bukin #define HWT_CALL_HOOK(td, func, arg) \ 44*df114daeSRuslan Bukin do { \ 45*df114daeSRuslan Bukin if (hwt_hook != NULL) \ 46*df114daeSRuslan Bukin (hwt_hook)((td), (func), (arg)); \ 47*df114daeSRuslan Bukin } while (0) 48*df114daeSRuslan Bukin 49*df114daeSRuslan Bukin #define HWT_HOOK_INSTALLED (hwt_hook != NULL) 50*df114daeSRuslan Bukin 51*df114daeSRuslan Bukin extern void (*hwt_hook)(struct thread *td, int func, void *arg); 52*df114daeSRuslan Bukin 53*df114daeSRuslan Bukin void hwt_hook_load(void); 54*df114daeSRuslan Bukin void hwt_hook_unload(void); 55*df114daeSRuslan Bukin 56*df114daeSRuslan Bukin #endif /* !_DEV_HWT_HWT_HOOK_H_ */ 57