クラスの課題として、おもちゃのオペレーティングシステムに取り組んでいます。カーネルパニック関数の記述に問題があります。
すべてのレジスタを保存し、printfのような関数を呼び出してから、保存したレジスタを印刷してCPUを停止する必要があります。現在、マクロとして定義されています。
#define panic(...) \
do{ \
asm volatile("SAVE_REGISTERS %1\n\t" : "m="(_panic_context)); \
_panic_printk(&_panic_context, __VA_ARGS__); \
while(0)
_panic_context
スレッドの保存されたレジスタとその他のものを含むグローバル変数です。問題はにありSAVE_REGISTERS
ます。アセンブラヘッダーファイルのどこかに定義されているマクロですが、インクルードする方法がわかりません。ファイル内の単純な#includeは明らかに機能しません。私はグーグルで面白くて絶望的なもの(アセンブラー文字列の#includeなど)を書いてみましたが、何も役に立ちませんでした。これを解決する方法はありますか?
GCCを使用しており、MIPS用にコンパイルしています(シミュレーターで実行中:-))
編集:
...SAVE_REGISTERS
で定義され.macro SAVE_REGISTERS
ます。他のアセンブリモジュールで使用されているため、Cマクロに含めることはできません。パニックは可変個引数でなければならないため、それを使用して.Sファイルを作成することはできません。または、少なくとも私はそれを行う他の方法を思い付くことができませんでした。