Définitions des types | |
| typedef jmp_buf | LinuxIA32FredContext |
| Contexte de sauvegarde : un jmp_buf de linux. | |
Fonctions | |
| void | LinuxIA32FredContextRestore (LinuxIA32FredContext ctx) |
| Restaurer un contexte processeur. Le contexte courant est perdu. | |
| void | LinuxIA32FredContextSwitch (LinuxIA32FredContext old, LinuxIA32FredContext ctx) |
| Restaurer un contexte processeur. Le contexte courant est sauvé. | |
| void | LinuxIA32FredContextInit (LinuxIA32FredContext ctx, char *sp, void(*entry)()) |
| Initialiser un contexte processeur. | |
|
||||||||||||||||
|
Implantation C'est totalement dépendant du type de processeur et de l'implantation des fonction setjmp() et longjmp() car on doit connaitre les registres à modifier et leurs emplacements dans le jmp_buf.
00063 {
00064 ctx->__jmpbuf[JB_SP] = (int)sp;
00065 ctx->__jmpbuf[JB_PC] = (int)entry;
00066 };
|
|
|
Implantation
C'est exactement un
00019 {
00020 longjmp(ctx,1);
00021 /* Il n'y a pas de retour possible en séquence d'un tel appel */
00022 KernelAbort(" FredContext Restore : erreur fatale..... ");
00023 }
|
|
||||||||||||
|
Implantation
C'est exactement une combinaison de
00038 {
00039 if(setjmp(old))return; /* cas de reprise du contexte*/
00040 /* contexte courant sauvegardé : on restaure un autre contexte*/
00041 longjmp(ctx,1);
00042 /* on ne revient jamais ici */
00043 KernelError(" FredContext switch : erreur ????...???... ");
00044 }
|
1.2.17