- 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
の正規表現にマッチされた場合、次の行を飛ばす仕組みが実装されています
|
|