sbrk() is not supported in FreeBSD as a system call (see file
vm/vm_mmap.c). However, sbrk(0) can reflect the latest end of the heap. I
am interested in how sbrk() interacts with malloc(). I know my question is
too specific. Thanks for your answer. I did learn a lesson: mixing
abstraction layers is really bad.
-Zhihui
On Thu, 28 Jun 2001, Terry Lambert wrote:
> Zhihui Zhang wrote:
> >
> > Suppose I write a program that calls sbrk(). How can I trace into the
> > function sbrk()? In this particular case, I want to know whether
> > sbrk() calls the function in file lib/libstand/sbrk.c or sys/sbrk.S.
> > Sometimes it is nice to see what system call is eventually called as well.
> > I know dynamic linking may make this hard. But is there a way to do
> > this? Thanks.
>
> sbrk() is a system call, not a library call. It has a
> stub that just loads a register with the call ID and
> does an INT 0x80.
>
> You can't "trace into" it, since you are in a user space
> program.
>
> If you want to see how it works, the sources are in /sys;
> but all it does is add pages to the end of the address
> space, in the heap.
>
> If you are having problems with it, you are probably using
> sbrk() and malloc() in the same program. Don't do that;
> malloc() traditionally calls sbrk() to get pages, so you
> will have the same effect as trying to use fopen() and
> open() in the same program: mainly, that fd manipulation
> routines can close/open/etc. fd's out from under file
> pointers. In the sbrk() case, there can be attempts to
> (re)map pages to regions where they don't really belong.
>
> -- Terry
>
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message