Page principale   Modules   Liste des composants   Liste des fichiers   Composants   Déclarations  

Gestion de contexte pour Solaris Sparc32 par setjmp/longjmp
[Interface de gestion de contexte]


Définitions des types

typedef jmp_buf SolarisSparc32FredContext
 Contexte de sauvegarde : un jmp_buf de solaris.


Fonctions

void SolarisSparc32FredContextRestore (SolarisSparc32FredContext ctx)
 Restaurer un contexte processeur. Le contexte courant est perdu.

void SolarisSparc32FredContextSwitch (SolarisSparc32FredContext old, SolarisSparc32FredContext ctx)
 Restaurer un contexte processeur. Le contexte courant est sauvé.

void SolarisSparc32FredContextInit (FredContext ctx, char *sp, void(*entry)())
 Initialiser un contexte processeur.


Documentation de la fonction

void SolarisSparc32FredContextInit FredContext    ctx,
char *    sp,
void(*    entry)()
 

Paramètres:
ctx  contexte à initialiser
sp  sommet de pile
entry  adresse de la procédure à démarrer
On initialise un pointeur de pile et une adresse d'instruction.



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.

00126 {
00127   ctx[ 1 ]= (long)sp;
00128   ctx[ 2 ]= (long)entry;
00129 };

void SolarisSparc32FredContextRestore SolarisSparc32FredContext    ctx
 

Paramètres:
ctx  contexte à restaurer
C'est l'équivalent d'un goto sans espoir de reprise.



Implantation

C'est exactement un longjmp() de la libC

00084 {
00085   longjmp(ctx,1);
00086   /*  Il n'y a pas de retour possible en séquence d'un tel appel  */
00087   KernelAbort(" FredContext Restore  : erreur fatale..... ");
00088 } 

void SolarisSparc32FredContextSwitch SolarisSparc32FredContext    old,
SolarisSparc32FredContext    ctx
 

Paramètres:
old  contexte où sauvegarder
ctx  contexte à restaurer


Implantation

C'est exactement une combinaison de setjmp() pour la sauvegarde et longjmp() pour la restauration

00102 { 
00103   if(setjmp(old))return; /* cas de reprise du contexte*/
00104   /* contexte courant sauvegardé : on restaure un autre contexte*/
00105   longjmp(ctx,1);
00106   /* on ne revient jamais ici */
00107   KernelError(" FredContext switch  : erreur ????...???... ");
00108 }


Généré le Mon Jan 5 16:22:06 2004 par doxygen1.2.17