216 lines
5.4 KiB
C
216 lines
5.4 KiB
C
/*
|
|
* Copyright (c) 2020 AIIT XUOS Lab
|
|
* XiUOS is licensed under Mulan PSL v2.
|
|
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
* You may obtain a copy of Mulan PSL v2 at:
|
|
* http://license.coscl.org.cn/MulanPSL2
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
* See the Mulan PSL v2 for more details.
|
|
*/
|
|
|
|
/**
|
|
* @file: hook.c
|
|
* @brief: the general interface functions of hook
|
|
* @version: 1.0
|
|
* @author: AIIT XUOS Lab
|
|
* @date: 2020/3/20
|
|
*
|
|
*/
|
|
|
|
#include <xs_kdbg.h>
|
|
#include <xs_hook.h>
|
|
|
|
struct KernelHook hook;
|
|
|
|
/**
|
|
* a hook function, it will run when switch task
|
|
*
|
|
* @param from task descriptor
|
|
* @param to task descriptor
|
|
*/
|
|
void AssignHook(KTaskDescriptorType from, KTaskDescriptorType to)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], from task: %s, to task:%s\n",__func__,from->task_base_info.name,to->task_base_info.name));
|
|
/* add your code */
|
|
}
|
|
|
|
/**
|
|
*
|
|
* This hook function will be run after task inited .
|
|
*
|
|
* @param task task descripter
|
|
*
|
|
* @note no blocked or suspend function.
|
|
*/
|
|
void TaskCreatehook(KTaskDescriptorType task)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Create task: %s\n",__func__,task->task_base_info.name));
|
|
/* add your code */
|
|
}
|
|
|
|
/**
|
|
*
|
|
* This hook function will be run after task suspended .
|
|
*
|
|
* @param task descripter
|
|
*
|
|
* @note no blocked or suspend function.
|
|
*/
|
|
void TaskSuspendhook(KTaskDescriptorType task)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Suspend task: %s\n",__func__,task->task_base_info.name));
|
|
/* add your code */
|
|
}
|
|
|
|
/**
|
|
*
|
|
* This hook function will be run after task resumed .
|
|
*
|
|
* @param task descripter
|
|
*
|
|
* @note no blocked or suspend function.
|
|
*/
|
|
void TaskResumehook(KTaskDescriptorType task)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Resume task: %s\n",__func__,task->task_base_info.name));
|
|
/* add your code */
|
|
}
|
|
|
|
/**
|
|
* a MallocHook function. The MallocHook function will be run before a memory block is allocated from buddy-memory.
|
|
*
|
|
* @param ptr alloc mem point
|
|
* @param size alloc mem size
|
|
*/
|
|
void MemMallochook(void *ptr, x_size_t size)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Malloc memory: ptr:%p, size: %d\n",__func__,ptr,size));
|
|
/* add your code */
|
|
}
|
|
|
|
/**
|
|
* a FreeHook function. The FreeHook function will be run after a memory block is freed to buddy-memory.
|
|
*
|
|
* @param ptr free mem point
|
|
*/
|
|
void MemFreehook(void *ptr)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Free memory: ptr:%p\n",__func__,ptr));
|
|
/* add your code */
|
|
}
|
|
#ifdef KERNEL_MEMBLOCK
|
|
/**
|
|
* a allocation hook function before a gatherblock allocation.
|
|
*
|
|
* @param gm the alloc hook function
|
|
* @param date_ptr mem point
|
|
*/
|
|
void GmAllocHook(struct MemGather *gm, void *date_ptr)
|
|
{
|
|
/* add your code */
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* a free hook function after a gatherblock release.
|
|
*
|
|
* @param gm the free hook function
|
|
* @param date_ptr mem point
|
|
*/
|
|
void GmFreeHook(struct MemGather *gm, void *date_ptr)
|
|
{
|
|
/* add your code */
|
|
return;
|
|
}
|
|
#endif
|
|
/**
|
|
* this hook function will run when the system interrupt
|
|
*
|
|
* @note no blocked or suspend.
|
|
*/
|
|
void IsrEnterHook(void)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Enter Isr\n",__func__));
|
|
/* add your code */
|
|
}
|
|
|
|
/**
|
|
* this hook function will run when the system leave interrupt
|
|
*
|
|
* @note no blocked or suspend.
|
|
*/
|
|
void IsrLeaveHook(void)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Leave Isr\n",__func__));
|
|
/* add your code */
|
|
}
|
|
|
|
void TimerEnterHook(struct Timer *timer)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Timer Enter\n",__func__));
|
|
/* add your code */
|
|
}
|
|
|
|
void TimerExitHook(struct Timer *timer)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Timer Exit\n",__func__));
|
|
/* add your code */
|
|
}
|
|
|
|
void IdleTaskHook(void)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s], Idle0 \n",__func__));
|
|
/* add your code */
|
|
}
|
|
|
|
|
|
|
|
void testhook(const char *str)
|
|
{
|
|
SYS_KDEBUG_LOG(KDBG_HOOK,
|
|
("HOOK: Function[%s],Test: %s\n",__func__,str));
|
|
/* add your code */
|
|
return;
|
|
}
|
|
|
|
|
|
int hook_init(void)
|
|
{
|
|
REGISTER_HOOK(hook.assign.hook_Assign,AssignHook);
|
|
|
|
REGISTER_HOOK(hook.task.hook_TaskCreate,TaskCreatehook);
|
|
REGISTER_HOOK(hook.task.hook_TaskSuspend,TaskSuspendhook);
|
|
REGISTER_HOOK(hook.task.hook_TaskResume,TaskResumehook);
|
|
|
|
REGISTER_HOOK(hook.mem.hook_Malloc,MemMallochook);
|
|
REGISTER_HOOK(hook.mem.hook_Free,MemFreehook);
|
|
|
|
#ifdef KERNEL_MEMBLOCK
|
|
REGISTER_HOOK(hook.mem.hook_GmAlloc,GmAllocHook);
|
|
REGISTER_HOOK(hook.mem.hook_GmFree,GmFreeHook);
|
|
#endif
|
|
|
|
REGISTER_HOOK(hook.timer.hook_TimerEnter,TimerEnterHook);
|
|
REGISTER_HOOK(hook.timer.hook_TimerExit,TimerExitHook);
|
|
|
|
REGISTER_HOOK(hook.idle.hook_Idle,IdleTaskHook);
|
|
//REGISTER_HOOK(hook.idle[1].hook_Idle,IdleTask1Hook);
|
|
|
|
REGISTER_HOOK(hook.isr.hook_IsrEnter,IsrEnterHook);
|
|
REGISTER_HOOK(hook.isr.hook_IsrLeave,IsrLeaveHook);
|
|
REGISTER_HOOK(hook.test.hook_test,testhook);
|
|
return EOK;
|
|
} |