- GearsOSの中心的なヘッダファイル
- 実行されるすべてのCodeGear, 利用されるすべてのDataGearが定義されている
# 内容
# 定義されているもの
- GearsOSで利用するマクロ
- GearsOSのContext
- DataGearの集合
union Data
# includeしているもの
- 各種enum
- DataGear
- CodeGear
c/extern.h
# 生成方法
# 従来の方法 (~2019/12)
- 秘伝のタレ的に手で追加していく
- interfaceやImplを手でDataGearにマッピングして追加する
# 現在の方法
generate_context.pl で自動的に生成される
# generate_context.pl内での生成について
ALLOCATEなどのマクロや、__codeでの引数で利用している構造体がピックアップされる- 構造体の名前に対応するヘッダファイルが検索される
struct Stackの場合はStack.h
- ヘッダファイルの名前が衝突する場合、
.dgのファイルが優先的に利用される - 中身がスキャンされた後、 辞書順で「Interface -> Impl」の順で union Data として出力される
# テンプレートファイル
gearstools/lib/Gears/Context/Template.pmもしくは、Template/XV6.pmがテンプレート- 直接メソッドにヒアドキュメントで記述されている
# おかしいな?と思ったら
- 生成された
context.hを確認してください- XV6の場合は
CMakeFiles/kernel.dir/context.hが対応します
- XV6の場合は
# context.hに含めたくないCodeGearの引数
//\s*Skip:\s*generate_contextの正規表現にマッチされた場合、次の行を飛ばす仕組みが実装されています
|
|