Annotation of nono/vm/bootloader.h, revision 1.1.1.3

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2022 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: //
                      8: // ローダ
                      9: //
                     10: 
                     11: #pragma once
                     12: 
                     13: #include "object.h"
                     14: 
                     15: class LoadInfo;
                     16: class MainRAMDevice;
                     17: 
                     18: // RAM から呼ばれてファイルを読み込むだけのヘルパー。
                     19: class BootLoader : public Object
                     20: {
                     21:        using inherited = Object;
                     22:  public:
1.1.1.3 ! root       23:        explicit BootLoader(MainRAMDevice *mainram_);
1.1       root       24:        ~BootLoader() override;
                     25: 
1.1.1.2   root       26:        // info で指定された実行ファイルをロードする。
                     27:        // data, size が指定されていればバッファから読み込む。
                     28:        // 指定されていなければホストの path から読み込む。
                     29:        // (path はいずれにしてもエラー出力の際に使う)
                     30:        bool LoadExec(LoadInfo *);
                     31: 
                     32:        // info で指定されたデータファイルをロードする。
                     33:        // data, size が指定されていればバッファから読み込む。
                     34:        // 指定されていなければホストの path から読み込む。
                     35:        // (path はいずれにしてもエラー出力の際に使う)
                     36:        bool LoadData(LoadInfo *);
1.1       root       37: 
                     38:  private:
1.1.1.2   root       39:        bool LoadExecFromFile(LoadInfo *);
                     40:        bool LoadExecFromBuf(LoadInfo *);
1.1       root       41:        bool LoadGzFile(LoadInfo *);
                     42:        bool Load_aout(LoadInfo *);
                     43:        bool Load_elf32(LoadInfo *);
                     44:        bool Load_elf32_exec(LoadInfo *);
                     45:        bool Load_elf32_rel(LoadInfo *);
                     46:        bool Load_elf32_sym(LoadInfo *, std::string&);
                     47: 
1.1.1.3 ! root       48:        MainRAMDevice *mainram {};
1.1       root       49: };
                     50: 
                     51: // 実行ファイルを読み込む際の受け渡しパラメータ
                     52: class LoadInfo {
                     53:  public:
                     54:        LoadInfo();
1.1.1.3 ! root       55:        explicit LoadInfo(const char *path_);
1.1       root       56:        LoadInfo(const char *path_, const uint8 *data_, size_t size_);
                     57: 
                     58:        // ファイルから読み込む時はファイルパスを指定する。
1.1.1.2   root       59:        // バッファから読み込む時はエラーの時に表示される名前を指定する。
1.1       root       60:        const char *path {};
                     61: 
1.1.1.2   root       62:        // バッファから読み込む際は、データ本体とそのサイズを指定する。
                     63:        // ファイルから読み込む時は 0 を指定しておくこと (ただし内部で使用する)。
1.1       root       64:        const uint8 *data {};
                     65:        size_t size {};
                     66: 
1.1.1.2   root       67:        // シンボルテーブルを読み込まない場合は false をセットする。
                     68:        // デフォルトは true。
                     69:        bool loadsym {};
                     70: 
                     71:        // RAM にロードした先頭アドレスを返す。
1.1       root       72:        uint32 start {};
                     73: 
1.1.1.2   root       74:        // RAM にロードしたファイルのエントリポイントを返す。
1.1       root       75:        uint32 entry {};
                     76: 
1.1.1.2   root       77:        // RAM にロードしたカーネル本体の後のシンボル開始アドレスを返す。
1.1       root       78:        uint32 sym {};
                     79: 
1.1.1.2   root       80:        // RAM にロードした最終アドレス(の次のアドレス)を返す。
1.1       root       81:        uint32 end {};
                     82: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.