Я пытаюсь реализовать счетчик системных вызовов, и в результате я включил значение int в task_struct и функцию, которая увеличивает его в отдельном файле. Предполагается, что эта функция вызывается из system_call непосредственно перед тем, как она на самом деле вызывает требуемый sys_call (у меня есть причины вызывать ее до, а не после). Однако, если я помещаю его перед sys_call, то после компиляции и загрузки возникает паника ядра («попытка убить init_idle»), и если я помещаю его сразу после sys_call, это работает. Какая разница и как мне это преодолеть?
Вот соответствующий код
ENTRY(system_call)
pushl %eax # save orig_eax
SAVE_ALL
GET_CURRENT(%ebx)
testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
jne tracesys
cmpl $(NR_syscalls),%eax
jae badsys
call update_counter /*This causes a kernel panic*/
call *SYMBOL_NAME(sys_call_table)(,%eax,4)
movl %eax,EAX(%esp) # save the return value