Become a leader in the IoT community!
Join our community of embedded and IoT practitioners to contribute experience, learn new skills and collaborate with other developers with complementary skillsets.
Join our community of embedded and IoT practitioners to contribute experience, learn new skills and collaborate with other developers with complementary skillsets.
I have implemented a custom memory allocation function using `sys_mmap` for memory allocation. Here’s my code for the `malloc_` function:
malloc_:
pushq %rbp
movq %rsp, %rbp
mov %rdi, %rcx # store size
movl $9, %eax # system call 9: sys_mmap
movq $0, %rdi # start address
movq %rcx, %rsi # size
movl $3, %edx # page flags (PROT_READ | PROT_WRITE)
mov $34, %r10 # mem flags (MAP_PRIVATE | MAP_ANONYMOUS)
movl $-1, %r8d # file descriptor
movl $0, %r9d # offset
syscall
cmp $0, %rax
jg .L1.malloc_exit_ # jump if allocation was successful
mov $0, %rax # set return value to 0 if failed
.L1.malloc_exit_:
popq %rbp
retq
In my `main` function, I use `malloc_` to allocate memory like this:
.globl main
main:
pushq %rbp
movq %rsp, %rbp
mov $512, %rdi # size to allocate
call malloc_
cmp $0, %rax # check if allocation failed
je exit
// movl (%eax), %edx // <---- causes a crash
mov (%rax), %rdx // <---- works fine
exit:
# Exit code here
The issue I don’t understand is why the line `movl (%eax), %edx` causes a crash, but using `mov (%rax), %rdx` works perfectly fine.
If I use the system provided `malloc` function instead, both lines work without issue. What could be causing this behavior with my custom `malloc_` function?
CONTRIBUTE TO THIS THREAD