From fa03afa46984fbf6eacbd5540e4e318d161cbbe0 Mon Sep 17 00:00:00 2001 From: mithe24 Date: Wed, 8 Oct 2025 13:35:41 +0200 Subject: chore(snippets): move snippetss to src/ --- src/lib/allocate.s | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/lib/allocate.s (limited to 'src/lib/allocate.s') diff --git a/src/lib/allocate.s b/src/lib/allocate.s new file mode 100644 index 0000000..fdd9bf8 --- /dev/null +++ b/src/lib/allocate.s @@ -0,0 +1,21 @@ +# void *allocate(int n) +# +# A naive memory allocator that simply retrieves some new space from the OS. +# It is not possible to deallocate the memory again. +.globl allocate +.type allocate, @function +allocate: + push %rdi + # 1. Find the current end of the data segment. + movq $12, %rax # brk + xorq %rdi, %rdi # 0 means we retrieve the current end. + syscall + # 2. Add the amount of memory we want to allocate. + pop %rdi # the argument + push %rax # current end, which is where the allocated memory will start + addq %rax, %rdi # compute the new end + movq $12, %rax # brk + syscall + pop %rax # the old end, which is the address of our allocated memory + ret + -- cgit v1.2.3-70-g09d2