[SOS] Traitement d'un "stack overflow"

Cyril Dupuit cyrildupuit at hotmail.com
Mar 13 Juin 19:54:40 CEST 2006


Salut,

>J'ai regardé ton problème et j'ai 3 erreurs différentes:
>- sos_thread_get_current at sos/thread.c:83 Assertion current_thread->state == 
>SOS_THR_RUNNING failed
>- sos_cpu_context_is_in_user_mode at hwcore/cpu_context.c:528 FATAL: Invalid 
>saved context Code segment register: 0x9f70 (k=8, u=1b) !

Oui, effectivement, j'avais remarqué ces erreurs. Elles sont toutes liées à 
la récursivité de la fonction Toto().

>J'ai regadé durant le débogage le parametre de
>sos_thread_prepare_irq_servicing et la struct sos_cpu_state
>passé et l'adresse de la struct sos_thread courant. Je
>pense donc qu'il y a un écrasement de donnée à ce niveau,
>ce qui entraine les 2 premières erreurs.

Je pense que le débogage n'apporte pas grand chose dans ce cas parce que 
normalement, le pc ou l'émulateur aurait dû signaler un reboot.

>Pour la double faute, 2 choses:
>- le selecteur de segment dans le task desc doit être le
>selecteur du tss et non des donnés du noyau.

Je ne veux me servir de la tss de double fault que comme indication de 
dépassement de pile. Je ne cherche pas à faire tourner le noyau avec.
C'est pour ça que je ne comprends pas pourquoi je dois utiliser le sélecteur 
de tss à la place du segment noyau dans les descripteurs de threads.

Ou peut-être que je n'ai pas compris ton explication.

Bonne soirée.

Cyril




Plus d'informations sur la liste de diffusion Sos