diff options
| author | hachem <im@hachem.wtf> | 2026-09-25 21:21:09 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-25 21:21:09 +0200 |
| commit | 09982d80c45805715984cc1cae96c37e4fc148c3 (patch) | |
| tree | f711d6e7f4d4cb2d4dcb555d6a139aae343d7334 /kernel/proc.rv | |
| parent | fd3f51eecaecc12806a573c38263df1de43ee8c2 (diff) | |
feat: scheduler + cleanup
Diffstat (limited to 'kernel/proc.rv')
| -rw-r--r-- | kernel/proc.rv | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/kernel/proc.rv b/kernel/proc.rv index af6e8f7..162d24b 100644 --- a/kernel/proc.rv +++ b/kernel/proc.rv @@ -1,7 +1,7 @@ -# parse the embedded ELF (physical address from elf_phys()) and run it in ring 3 +# parse the embedded elf (physical address from elf_phys()) and run it in ring 3 const PT_LOAD = 1 -const PAGE_FLAGS = 6 # WRITE | USER +const PAGE_FLAGS = 6 # write | user fn cmd_run() do const base = elf_phys() @@ -13,28 +13,28 @@ fn cmd_run() do const phoff = mem_read(base + 32, 8) const phnum = mem_read(base + 56, 2) const phentsize = mem_read(base + 54, 2) - const as = as_create() + const space = as_create() for i in 0..phnum do - const ph = base + phoff + i * phentsize - if mem_read(ph, 4) == PT_LOAD do - const offset = mem_read(ph + 8, 8) - const vaddr = mem_read(ph + 16, 8) - const filesz = mem_read(ph + 32, 8) - const memsz = mem_read(ph + 40, 8) - let off = 0 - while off < memsz do + const phdr = base + phoff + i * phentsize + if mem_read(phdr, 4) == PT_LOAD do + const offset = mem_read(phdr + 8, 8) + const vaddr = mem_read(phdr + 16, 8) + const filesz = mem_read(phdr + 32, 8) + const memsz = mem_read(phdr + 40, 8) + let seg_off = 0 + while seg_off < memsz do const frame = frame_alloc() mem_zero(frame, 4096) - if off < filesz do - const left = filesz - off - mem_copy(frame, base + offset + off, if left > 4096 4096 else left) + if seg_off < filesz do + const left = filesz - seg_off + mem_copy(frame, base + offset + seg_off, if left > 4096 4096 else left) end - as_map(as, vaddr + off, frame, PAGE_FLAGS) - off = off + 4096 + as_map(space, vaddr + seg_off, frame, PAGE_FLAGS) + seg_off = seg_off + 4096 end end end const stack_top = 0x7fff0000 - as_map(as, stack_top - 4096, frame_alloc(), PAGE_FLAGS) - proc_run(as, entry, stack_top) + as_map(space, stack_top - 4096, frame_alloc(), PAGE_FLAGS) + proc_run(space, entry, stack_top) end |
