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

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: #include "iodevstream.h"
                     15: 
                     16: class LoadInfo;
                     17: class MainRAMDevice;
                     18: 
                     19: // RAM から呼ばれてファイルを読み込むだけのヘルパー。
                     20: class BootLoader : public Object
                     21: {
                     22:        using inherited = Object;
                     23:  public:
                     24:        BootLoader(MainRAMDevice *ram_);
                     25:        ~BootLoader() override;
                     26: 
1.1.1.2 ! root       27:        // info で指定された実行ファイルをロードする。
        !            28:        // data, size が指定されていればバッファから読み込む。
        !            29:        // 指定されていなければホストの path から読み込む。
        !            30:        // (path はいずれにしてもエラー出力の際に使う)
        !            31:        bool LoadExec(LoadInfo *);
        !            32: 
        !            33:        // info で指定されたデータファイルをロードする。
        !            34:        // data, size が指定されていればバッファから読み込む。
        !            35:        // 指定されていなければホストの path から読み込む。
        !            36:        // (path はいずれにしてもエラー出力の際に使う)
        !            37:        bool LoadData(LoadInfo *);
1.1       root       38: 
                     39:  private:
1.1.1.2 ! root       40:        bool LoadExecFromFile(LoadInfo *);
        !            41:        bool LoadExecFromBuf(LoadInfo *);
1.1       root       42:        bool LoadGzFile(LoadInfo *);
                     43:        bool Load_aout(LoadInfo *);
                     44:        bool Load_elf32(LoadInfo *);
                     45:        bool Load_elf32_exec(LoadInfo *);
                     46:        bool Load_elf32_rel(LoadInfo *);
                     47:        bool Load_elf32_sym(LoadInfo *, std::string&);
                     48:        void WriteFromHost(IODeviceStream&, const void *, int);
                     49:        void readfile_global(uint32, const void *, int);
                     50: 
                     51:        MainRAMDevice *ram {};
                     52: };
                     53: 
                     54: // 実行ファイルを読み込む際の受け渡しパラメータ
                     55: class LoadInfo {
                     56:  public:
                     57:        LoadInfo();
                     58:        LoadInfo(const char *path_);
                     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.