Пример #1
0
 internal static ulong map_in(Multiboot.Module mod)
 {
     if (mod.virt_base_addr != 0)
     {
         return(mod.virt_base_addr);
     }
     mod.virt_base_addr = map_in(mod.base_addr, mod.length, mod.name);
     return(mod.virt_base_addr);
 }
Пример #2
0
        internal static Process LoadELFModule(string name, Multiboot.Header mboot, SymbolTable stab, Dictionary <string, Process> running_processes, ulong stack_size,
                                              object[] parameters)
        {
            Multiboot.Module mod = find_module(mboot.modules, name);
            if (mod == null || mod.length == 0)
            {
                throw new Exception("Module: " + name + " not found");
            }
            ulong mod_vaddr = map_in(mod);

            return(LoadELFModule(mod_vaddr, mod.length, name, mboot, stab, running_processes, stack_size, parameters));
        }
Пример #3
0
        internal static void LoadELFLibrary(string name, Multiboot.Header mboot, SymbolTable stab)
        {
            Formatter.Write("Loading library: ", arch.BootInfoOutput);
            Formatter.Write(name, arch.BootInfoOutput);
            Formatter.Write("... ", arch.BootInfoOutput);

            Multiboot.Module mod        = find_module(mboot.modules, name);
            ulong            mod_vaddr  = map_in(mod);
            ulong            load_vaddr = ElfReader.LoadModule(arch.VirtualRegions, arch.VirtMem, stab, mod_vaddr, mod.base_addr, name);

            ElfReader.LoadSymbols(stab, mod_vaddr, load_vaddr);

            Formatter.WriteLine("done", arch.BootInfoOutput);
            Formatter.Write(name, arch.DebugOutput);
            Formatter.Write(" library loaded, load address: ", arch.DebugOutput);
            Formatter.Write(load_vaddr, "X", arch.DebugOutput);
            Formatter.WriteLine(arch.DebugOutput);
        }