|
|
@@ -0,0 +1,44 @@
|
|
|
+format ELF64
|
|
|
+
|
|
|
+
|
|
|
+include './syscalls.inc'
|
|
|
+include './types.inc'
|
|
|
+include './utils.inc'
|
|
|
+
|
|
|
+err_create ALLOC_ERR_OK, 0
|
|
|
+err_create ALLOC_ERR_ZERO_SIZE, 1
|
|
|
+err_create ALLOC_ERR_FAILED_MMAP, 2
|
|
|
+
|
|
|
+section ".text" executable
|
|
|
+
|
|
|
+;; rdi -> size_t size
|
|
|
+;; rax <- ptr ptr
|
|
|
+;; rdx <- alloc_err err
|
|
|
+public alloc
|
|
|
+alloc:
|
|
|
+ pp _alloc_err err
|
|
|
+ pp _alloc_ptr ptr
|
|
|
+ cmp rdi, 0
|
|
|
+ je _alloc_zero_size
|
|
|
+ mov [_alloc_ptr.cap], rdi
|
|
|
+ sys_mmap 0, [_alloc_ptr.cap], PROT_READ or PROT_WRITE, MAP_ANONYMOUS or MAP_PRIVATE, -1, 0
|
|
|
+ cmp rax, 0
|
|
|
+ jl _alloc_failed_mmap
|
|
|
+ err_set _alloc_err, ALLOC_ERR_OK
|
|
|
+ mov rdx, _alloc_err
|
|
|
+ mov [_alloc_ptr], rax
|
|
|
+ ret
|
|
|
+
|
|
|
+_alloc_failed_mmap:
|
|
|
+ err_set _alloc_err, ALLOC_ERR_FAILED_MMAP
|
|
|
+ mov rdx, _alloc_err
|
|
|
+ mov rax, 0
|
|
|
+ ret
|
|
|
+
|
|
|
+_alloc_zero_size:
|
|
|
+ err_set _alloc_err, ALLOC_ERR_ZERO_SIZE
|
|
|
+ mov rdx, _alloc_err
|
|
|
+ mov rax, 0
|
|
|
+ ret
|
|
|
+
|
|
|
+section ".bss" writeable
|