Nous travaillons sur un système d'exploitation de jouet en tant qu'affectation pour une classe. Je rencontre des problèmes avec l'écriture de la fonction de panique du noyau.Inclus dans l'assemblage en ligne
Il devrait enregistrer tous les registres, appeler une fonction de type printf, puis imprimer les registres enregistrés et arrêter le processeur. il est en ce moment défini comme une macro:
#define panic(...) \
do{ \
asm volatile("SAVE_REGISTERS %1\n\t" : "m="(_panic_context)); \
_panic_printk(&_panic_context, __VA_ARGS__); \
while(0)
_panic_context
est une variable globale qui contient les registres sauvegardés d'un fil et un peu plus de choses. Le problème est avec SAVE_REGISTERS
. C'est une macro définie quelque part dans un fichier d'en-tête assembleur, mais je ne sais pas comment l'inclure. #include simple dans le fichier ne fonctionne évidemment pas. J'ai essayé de googler et d'écrire des choses drôles et désespérées (comme #include dans les chaînes de l'assembleur :-)) mais rien n'a aidé. Avez-vous des idées pour résoudre ce problème?
Nous utilisons GCC et compiler pour MIPS (en cours d'exécution dans un :-) simulateur)
modifier: SAVE_REGISTERS
est défini avec .macro SAVE_REGISTERS
.... Il ne peut pas être dans une macro C, car il est utilisé dans d'autres modules d'assemblage. Je ne peux pas faire un fichier .S avec, parce que la panique doit être variée. Ou au moins, je ne pouvais pas trouver d'autre moyen de le faire.
Comment exactement est 'SAVE_REGISTERS' défini? –