Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jan 2007 01:22:50 -0500 (EST)
From:      "darran kartaschew" <chewy509@lycos.com>
To:        <freebsd-hackers@freebsd.org>
Subject:   sbrk vs mmap
Message-ID:  <20070110012250.HM.0000000000000G0@chewy509.bos-mail-wwl8.lycos.com>

next in thread | raw e-mail | index | archive | help

   Hi Guys,
   I'm having some issues with rewriting a simple malloc() function to be
   with FreeBSD (AMD64). This is part of porting an application from
   Linux
   to FreeBSD.
   After pulling my hair out for a while, I've found that the sbrk()
   system call just returns "45 - Operation Not Supported" error,
   irrespective of the parameters passed to it. (I've found the source
   for sbrk() and see that it's not implemented).
   So I decided to try using mmap() instead. All memory allocations don't
   have to be continuous, so mmap() will suffice. The problem is I'm
   getting an invalid file handle error? According to the man page, if
   you
   use MAP_ANON you're just allocating a block of memory without linking
   to a file, and a handle of -1 should be supplied... Any way code is as
   follows:
   memInit:
   mov r4, 0 ; don't care where the memory is allocated
   mov r5, 1048576 ; alloc 1MB
   mov r3, 3 ; RW access to memory
   mov r2, 4096 ; MAP_ANON - not a file
   mov r8d, -1 ; -1 for file handle if using MAP_ANON
   mov r9, 0 ; ignored for MAP_ANON
   mov r0, 197 ; mmap();
   syscall
   mov qword [_mmap], r0 ; save address so we can release it on exit;
   ret
   It fails with an EBADF (9) ; Bad File Descriptor error...
   Note: r0 = rax, r1 = rbx, r2 = rcx, r3 = rdx, r4 = rdi, r5 = rsi, r6 =
   rbp, r7 = rsp. Various parameters for mmap() are found in mman.h>.
   So does anyone have an example of a working call to mmap() or tell me
   what's wrong with the above code?
   I've done up a test C program that simple calls mmap(), after
   tracing through the compiled C program using gdb I can't see that
   I'm doing anything different to what gcc/glibc are doing? (except
   the macro expansion that's in libc which adds an additional
   0 to the top of the stack).
   PS. FASM 1.66 running on FreeBSD 6.1 (AMD64).
   PPS. This is NOT a homework assignment! (tm) :P
     _________________________________________________________________

   [1]Free Movies 100's of Free Feature Length Films - Meet Friends,
   Watch Movies & Win!

References

   1. http://cinema.lycos.com/?if_Event=mail



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070110012250.HM.0000000000000G0>