aboutsummaryrefslogtreecommitdiff
path: root/include/uskel.s
diff options
context:
space:
mode:
Diffstat (limited to 'include/uskel.s')
-rw-r--r--include/uskel.s52
1 files changed, 20 insertions, 32 deletions
diff --git a/include/uskel.s b/include/uskel.s
index 34ee63a..0a21217 100644
--- a/include/uskel.s
+++ b/include/uskel.s
@@ -9,46 +9,34 @@ _start:
.include "include/macros.s"
.section .bss
-_memory_state:
- cell 0 # bottom of allocation (grows down)
- cell 0 # region start
- cell 0 # region end
- cell 0 # program entry rsp (aka the actual stack)
+_unix_rsp:
+ # back-up of program entry rsp (aka the actual stack given by the
+ # actual OS; we might like to use it at some point, maybe)
+ cell 0
-.section .text
+.include "include/gc.s"
-_uskel_alloc_basic_mem:
- mov $0x100000, %r15 # desired size
-
- mov $9, %rax # mmap
- mov $0, %rdi # addr = NULL
- mov %r15, %rsi # len = %rcx
- mov $0b11, %rdx # prot = PROT_READ 0b1 | PROT_WRITE 0b10
- mov $0x22, %r10 # flags = MAP_PRIVATE 0x2 | MAP_ANONYMOUS 0x20
- mov $-1, %r8 # fd = -1
- mov $0, %r9 # off = 0
- syscall
- mov $_memory_state, %rdi
- mov %rax, 010(%rdi)
- add %r15, %rax
- mov %rax, (%rdi)
- mov %rax, 020(%rdi)
- retq
+.section .text
_uskel_start:
- call _uskel_alloc_basic_mem
- # use the stack pointer for easy writing to the heap,
- # but back it up to memory state
- mov $_memory_state, %rdi
- mov %rsp, 030(%rdi)
- mov 0(%rdi), %rsp
+ # we use the stack pointer for easy writing to the heap;
+ # back it up to memory state just if we ever needed it again.
+ mov %rsp, _unix_rsp
+
+ # allocate the initial chunk of memory
+ mov $_uskel_start_main, %rsi
+ jmp _uskel_gc_init
+ _uskel_start_main:
# push a thunk for main
pushq $0
pushq $main
- mov $0, %rsi # set continuation to exit
+ # loop the continuation to itself (prevents gc trouble, should never be reached)
+ mov %rsp, %rsi
enter %rsp # run the program
# Q: are there gonna be functions that have both the argument AND the cont?
- # A: No, stuff is either entered as return-continuation (takes res, cont has to be saved) or as forward call (takes cont)
- # (needs validation)
+ # A: No, stuff is either entered as return-continuation (takes res,
+ # cont has to be saved) or as forward call (takes cont)
+ #
+ # (A needs validation)