--- nono/vm/bootloader.h 2026/04/29 17:05:18 1.1 +++ nono/vm/bootloader.h 2026/04/29 17:05:29 1.1.1.3 @@ -11,7 +11,6 @@ #pragma once #include "object.h" -#include "iodevstream.h" class LoadInfo; class MainRAMDevice; @@ -21,52 +20,63 @@ class BootLoader : public Object { using inherited = Object; public: - BootLoader(MainRAMDevice *ram_); + explicit BootLoader(MainRAMDevice *mainram_); ~BootLoader() override; - // path で指定されたホストファイルをロードする - bool LoadFromFile(LoadInfo *); - // data, size で指定されたバッファをロードする - bool LoadFromData(LoadInfo *); + // info で指定された実行ファイルをロードする。 + // data, size が指定されていればバッファから読み込む。 + // 指定されていなければホストの path から読み込む。 + // (path はいずれにしてもエラー出力の際に使う) + bool LoadExec(LoadInfo *); + + // info で指定されたデータファイルをロードする。 + // data, size が指定されていればバッファから読み込む。 + // 指定されていなければホストの path から読み込む。 + // (path はいずれにしてもエラー出力の際に使う) + bool LoadData(LoadInfo *); private: + bool LoadExecFromFile(LoadInfo *); + bool LoadExecFromBuf(LoadInfo *); bool LoadGzFile(LoadInfo *); bool Load_aout(LoadInfo *); bool Load_elf32(LoadInfo *); bool Load_elf32_exec(LoadInfo *); bool Load_elf32_rel(LoadInfo *); bool Load_elf32_sym(LoadInfo *, std::string&); - void WriteFromHost(IODeviceStream&, const void *, int); - void readfile_global(uint32, const void *, int); - MainRAMDevice *ram {}; + MainRAMDevice *mainram {}; }; // 実行ファイルを読み込む際の受け渡しパラメータ class LoadInfo { public: LoadInfo(); - LoadInfo(const char *path_); + explicit LoadInfo(const char *path_); LoadInfo(const char *path_, const uint8 *data_, size_t size_); // ファイルから読み込む時はファイルパスを指定する。 - // メモリから読み込む時はエラーの時に表示される名前を指定する。 + // バッファから読み込む時はエラーの時に表示される名前を指定する。 const char *path {}; - // データ本体とそのサイズ。メモリから読み込む時には指定する。 - // ファイルから読み込む時は内部で使用。 + // バッファから読み込む際は、データ本体とそのサイズを指定する。 + // ファイルから読み込む時は 0 を指定しておくこと (ただし内部で使用する)。 const uint8 *data {}; size_t size {}; - // RAM にロードした先頭アドレス。 + // シンボルテーブルを読み込まない場合は false をセットする。 + // デフォルトは true。 + bool loadsym {}; + + // RAM にロードした先頭アドレスを返す。 uint32 start {}; - // RAM にロードしたファイルのエントリポイント。 + // RAM にロードしたファイルのエントリポイントを返す。 uint32 entry {}; - // RAM にロードしたカーネル本体の後のシンボル開始アドレス。 + // RAM にロードしたカーネル本体の後のシンボル開始アドレスを返す。 uint32 sym {}; - // RAM にロードした最終アドレス(の次のアドレス)。 + // RAM にロードした最終アドレス(の次のアドレス)を返す。 uint32 end {}; };