クラスの課題として、おもちゃのオペレーティングシステムに取り組んでいます。カーネルパニック関数の記述に問題があります。
すべてのレジスタを保存し、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ファイルを作成することはできません。または、少なくとも私はそれを行う他の方法を思い付くことができませんでした。