diff options
Diffstat (limited to 'include/uskel.s')
| -rw-r--r-- | include/uskel.s | 52 |
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) |
