--- nono/vm/bootloader.cpp 2026/04/29 17:05:28 1.1.1.3 +++ nono/vm/bootloader.cpp 2026/04/29 17:05:41 1.1.1.4 @@ -30,6 +30,22 @@ #include #include +// info で指定された実行ファイルを mainram にロードする。 +/*static*/ bool +BootLoader::LoadExec(MainRAMDevice *mainram_, LoadInfo *info) +{ + BootLoader loader(mainram_); + return loader.LoadExec(info); +} + +// info で指定されたデータファイルを mainram にロードする。 +/*static*/ bool +BootLoader::LoadData(MainRAMDevice *mainram_, LoadInfo *info) +{ + BootLoader loader(mainram_); + return loader.LoadData(info); +} + // コンストラクタ BootLoader::BootLoader(MainRAMDevice *mainram_) : inherited(OBJ_BOOTLOADER) @@ -502,15 +518,15 @@ BootLoader::Load_elf32_exec(LoadInfo *in return false; } - // 読み込み開始位置。 - // 実際にはカーネルのプログラムヘッダは1つのはずだけど一応。 + // 読み込み開始位置を一応覚えておく。 + // 隙間のある2つ以上のヘッダが来られるとあまり意味はなくなるが。 if (j == 0) { info->start = p_vaddr; } else { info->start = std::min(info->start, p_vaddr); } - ds.SetOffset(p_vaddr); + ds.SetAddr(p_vaddr); ds.WriteMem(info->data + p_offset, p_filesz); for (int i = p_filesz; i < p_memsz; i++) { ds.Write1(0); @@ -530,7 +546,7 @@ BootLoader::Load_elf32_exec(LoadInfo *in } } - info->end = ds.GetOffset(); + info->end = ds.GetAddr(); info->sym = info->end; // シンボルテーブルをロード。出来なくても構わないので続行する。 @@ -937,7 +953,7 @@ BootLoader::Load_elf32_rel(LoadInfo *inf info->start = entry; info->entry = entry; - info->end = ds.GetOffset(); + info->end = ds.GetAddr(); return true; }