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

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.4 ! root       26:        // info で指定された実行ファイルを mainram にロードする。
1.1.1.2   root       27:        // data, size が指定されていればバッファから読み込む。
                     28:        // 指定されていなければホストの path から読み込む。
                     29:        // (path はいずれにしてもエラー出力の際に使う)
1.1.1.4 ! root       30:        static bool LoadExec(MainRAMDevice *mainram_, LoadInfo *info);
1.1.1.2   root       31: 
1.1.1.4 ! root       32:        // info で指定されたデータファイルを mainram にロードする。
1.1.1.2   root       33:        // data, size が指定されていればバッファから読み込む。
                     34:        // 指定されていなければホストの path から読み込む。
                     35:        // (path はいずれにしてもエラー出力の際に使う)
1.1.1.4 ! root       36:        static bool LoadData(MainRAMDevice *mainram_, LoadInfo *info);
        !            37: 
        !            38:        bool LoadExec(LoadInfo *);
1.1.1.2   root       39:        bool LoadData(LoadInfo *);
1.1       root       40: 
                     41:  private:
1.1.1.2   root       42:        bool LoadExecFromFile(LoadInfo *);
                     43:        bool LoadExecFromBuf(LoadInfo *);
1.1       root       44:        bool LoadGzFile(LoadInfo *);
                     45:        bool Load_aout(LoadInfo *);
                     46:        bool Load_elf32(LoadInfo *);
                     47:        bool Load_elf32_exec(LoadInfo *);
                     48:        bool Load_elf32_rel(LoadInfo *);
                     49:        bool Load_elf32_sym(LoadInfo *, std::string&);
                     50: 
1.1.1.3   root       51:        MainRAMDevice *mainram {};
1.1       root       52: };
                     53: 
                     54: // 実行ファイルを読み込む際の受け渡しパラメータ
                     55: class LoadInfo {
                     56:  public:
                     57:        LoadInfo();
1.1.1.3   root       58:        explicit LoadInfo(const char *path_);
1.1       root       59:        LoadInfo(const char *path_, const uint8 *data_, size_t size_);
                     60: 
                     61:        // ファイルから読み込む時はファイルパスを指定する。
1.1.1.2   root       62:        // バッファから読み込む時はエラーの時に表示される名前を指定する。
1.1       root       63:        const char *path {};
                     64: 
1.1.1.2   root       65:        // バッファから読み込む際は、データ本体とそのサイズを指定する。
                     66:        // ファイルから読み込む時は 0 を指定しておくこと (ただし内部で使用する)。
1.1       root       67:        const uint8 *data {};
                     68:        size_t size {};
                     69: 
1.1.1.2   root       70:        // シンボルテーブルを読み込まない場合は false をセットする。
                     71:        // デフォルトは true。
                     72:        bool loadsym {};
                     73: 
                     74:        // RAM にロードした先頭アドレスを返す。
1.1       root       75:        uint32 start {};
                     76: 
1.1.1.2   root       77:        // RAM にロードしたファイルのエントリポイントを返す。
1.1       root       78:        uint32 entry {};
                     79: 
1.1.1.2   root       80:        // RAM にロードしたカーネル本体の後のシンボル開始アドレスを返す。
1.1       root       81:        uint32 sym {};
                     82: 
1.1.1.2   root       83:        // RAM にロードした最終アドレス(の次のアドレス)を返す。
1.1       root       84:        uint32 end {};
                     85: };

unix.superglobalmegacorp.com

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