Explorar el Código

Adding alloc function

Vinicius Teshima hace 10 meses
padre
commit
02042a350f
Se han modificado 1 ficheros con 44 adiciones y 0 borrados
  1. 44 0
      src/alloc.asm

+ 44 - 0
src/alloc.asm

@@ -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