Annotation of nono/vm/bootloader.h, revision 1.1.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.