hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/kernel/proc.rv
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/proc.rv')
-rw-r--r--kernel/proc.rv36
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