formating

This commit is contained in:
nub31
2025-02-03 18:53:48 +01:00
parent 308e0310c4
commit 958a301d18

View File

@@ -1,18 +1,13 @@
global alloc, free global alloc, free
; metadata
; +0: size
; +8: next
; +16 data
section .bss section .bss
free_list: resq 1 ; head of free list free_list_head: resq 1 ; head of free list
alloc_list: resq 1 ; head of allocation list alloc_list_head: resq 1 ; head of allocation list
section .text section .text
alloc: alloc:
add rdi, 16 ; add space for metadata add rdi, 16 ; add space for metadata
mov rax, [free_list] ; load head of free list mov rax, [free_list_head] ; load head of free list
xor r8, r8 ; last block xor r8, r8 ; last block
.loop: .loop:
test rax, rax ; end of list? test rax, rax ; end of list?
@@ -31,16 +26,16 @@ alloc:
jz .remove_free_head ; yes? remove head jz .remove_free_head ; yes? remove head
mov [r8 + 8], rsi ; set prev.next to this.next mov [r8 + 8], rsi ; set prev.next to this.next
jmp .done_remove_free_block jmp .done_remove_free_block
.remove_free_head .remove_free_head:
mov [free_list], rsi mov [free_list_head], rsi
.done_remove_free_block: .done_remove_free_block:
mov rsi, [rax] ; load size of block excluding the newly allocated object mov rsi, [rax] ; load size of block excluding the newly allocated object
lea rax, [rax + rsi + 16] ; address of allocated block lea rax, [rax + rsi + 16] ; address of allocated block
sub rdi, 16 sub rdi, 16
mov [rax], rdi ; save size mov [rax], rdi ; save size
mov rsi, [alloc_list] ; load head of allocated blocks mov rsi, [alloc_list_head] ; load head of allocated blocks
mov [rax + 8], rsi ; move head to be next item after this block mov [rax + 8], rsi ; move head to be next item after this block
mov [alloc_list], rax ; set new head to this block mov [alloc_list_head], rax ; set new head to this block
lea rax, [rax + 16] ; skip metadata for return value lea rax, [rax + 16] ; skip metadata for return value
ret ret
.new_block: .new_block:
@@ -49,9 +44,9 @@ alloc:
mov rdi, 4096 ; page size mov rdi, 4096 ; page size
call sys_mmap ; allocate a page call sys_mmap ; allocate a page
mov qword [rax], 4080 ; set size of block to block size - metadata mov qword [rax], 4080 ; set size of block to block size - metadata
mov rsi, [free_list] mov rsi, [free_list_head]
mov qword [rax + 8], rsi ; move head to be the next item after this block mov qword [rax + 8], rsi ; move head to be the next item after this block
mov [free_list], rax ; set new head to this block mov [free_list_head], rax ; set new head to this block
pop r8 pop r8
pop rdi pop rdi
jmp .found_block jmp .found_block