J'essaie d'implémenter un compteur d'appels système, et par conséquent j'ai inclus une valeur int dans task_struct, et une fonction qui l'incrémente dans un fichier séparé. Cette fonction est supposée être appelée à partir de system_call juste avant qu'elle appelle réellement le sys_call requis (j'ai mes raisons de l'appeler avant et non après). Cependant, si je le place avant le sys_call, après la compilation et le démarrage, il y a un kernel panic ("essayé de tuer init_idle"), et si je le place juste après le sys_call, cela fonctionne. Quelle est la différence et comment puis-je surmonter cela?Panique du noyau lors de la modification de system_call dans entry.S
Voici le code correspondant
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
J'ai essayé de faire SAVE_ALL et RESTORE_ALL juste avant et après update_counter d'appel, et maintenant il ne panique pas, mais ne démarre pas, soit (retourne à la sélection du noyau de GRUB). – EpsilonVector
OK J'ai essayé d'économiser eax comme vous l'avez suggéré et cela a fonctionné. Étrange. – EpsilonVector