day03_b での FreePool におけるimplicit declaration error
Closed this issue · 3 comments
実行環境
- Ubuntu 20.04
生じた問題
day03_b の写経をしていたところ、ビルドしたときに
/home/yudai/edk2/MikanLoaderPkg/Main.c:150:3: error: implicit declaration of function 'FreePool' is i
nvalid in C99 [-Werror,-Wimplicit-function-declaration]
FreePool(gop_handles);
^
1 error generated.
というエラーが生じてビルドできませんでした。これはosbook_day03_b タグの Main.c 内の
Line 131 in 3d021f2
で生じていました。
解決方法
とりあえず、私の環境では該当部分を
gBS->FreePool(gop_handles);
に変更したことでビルドは通り、QEMU で実行したときの挙動も書籍のようになったのですが、この対処法は正しいでしょうか?
はい、正しいです。
本来 gBS->FreePool
と書くべきところですが、おそらく単なるミスで gBS->
を付け忘れていますね。
私の環境でビルドできていたのは、EDK IIに FreePool
という関数が含まれている からです。
知らず知らずのうちにこの関数を参照していたため、ミスに気付きませんでした。
この関数は gBS->FreePool
を呼びだすだけの単純な実装になっていて、実用上はどちらを使っても問題にならないようです。
ちなみに gBS->FreePool
を使うべきという根拠は、UEFI 仕様書の EFI_BOOT_SERVICES.LocateHandleBuffer()
の仕様に
It is the caller's responsibility to call the Boot Service EFI_BOOT_SERVICES.FreePool() when the caller no longer requires the contents of Buffer.
とあるからです。(まあ、EDK II の FreePool
も最終的には gBS->FreePool
を呼ぶのだから仕様は満たしている、という見方もできますけども)
もし、修正をプルリクしていただけたら取り込みますが、どうしましょうか?
ご回答くださりありがとうございます。プルリクを作りましたのでよろしくお願いします。
プルリクを確認したので、こちらは閉じます