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

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: 
        !            27:        // path で指定されたホストファイルをロードする
        !            28:        bool LoadFromFile(LoadInfo *);
        !            29:        // data, size で指定されたバッファをロードする
        !            30:        bool LoadFromData(LoadInfo *);
        !            31: 
        !            32:  private:
        !            33:        bool LoadGzFile(LoadInfo *);
        !            34:        bool Load_aout(LoadInfo *);
        !            35:        bool Load_elf32(LoadInfo *);
        !            36:        bool Load_elf32_exec(LoadInfo *);
        !            37:        bool Load_elf32_rel(LoadInfo *);
        !            38:        bool Load_elf32_sym(LoadInfo *, std::string&);
        !            39:        void WriteFromHost(IODeviceStream&, const void *, int);
        !            40:        void readfile_global(uint32, const void *, int);
        !            41: 
        !            42:        MainRAMDevice *ram {};
        !            43: };
        !            44: 
        !            45: // 実行ファイルを読み込む際の受け渡しパラメータ
        !            46: class LoadInfo {
        !            47:  public:
        !            48:        LoadInfo();
        !            49:        LoadInfo(const char *path_);
        !            50:        LoadInfo(const char *path_, const uint8 *data_, size_t size_);
        !            51: 
        !            52:        // ファイルから読み込む時はファイルパスを指定する。
        !            53:        // メモリから読み込む時はエラーの時に表示される名前を指定する。
        !            54:        const char *path {};
        !            55: 
        !            56:        // データ本体とそのサイズ。メモリから読み込む時には指定する。
        !            57:        // ファイルから読み込む時は内部で使用。
        !            58:        const uint8 *data {};
        !            59:        size_t size {};
        !            60: 
        !            61:        // RAM にロードした先頭アドレス。
        !            62:        uint32 start {};
        !            63: 
        !            64:        // RAM にロードしたファイルのエントリポイント。
        !            65:        uint32 entry {};
        !            66: 
        !            67:        // RAM にロードしたカーネル本体の後のシンボル開始アドレス。
        !            68:        uint32 sym {};
        !            69: 
        !            70:        // RAM にロードした最終アドレス(の次のアドレス)。
        !            71:        uint32 end {};
        !            72: };

unix.superglobalmegacorp.com

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