Re: Huge numbers for incr passed to _sbrk

Emeka <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAOypoo74gb-dU=4rJuqowjPcw0e19WYtypJkGGY38WazMCLCWA@mail.gmail.com>
Can you share what you are doing with me ?

On Thu, Aug 16, 2018, 8:31 AM Michael Mamic <[email protected]>
wrote:

> Hello,
>
> I am making a bare metal operating system for then Raspberry Pi, using
> newlib as the standard library. I have implemented all of the syscalls
> without trouble, the exception being _sbrk which always yields an error. My
> simple implementation is below:
>
> uint32_t sbrk(int incr) {
>     highest_addr+=incr;
>     if(highest_addr > 0x20000000) {
>         errno = ENOMEM;
>         return -1;
>     }
>     return highest_addr;
> }
>
> This implementation of sbrk is seemingly fine, but sbrk itself is called
> with an incredibly large value for incr, 1431656813. This huge number
> causes my memory to immediately overflow. After debugging, I have found
> with almost absolute certainty that this call to sbrk comes when I call
> printf, sometime before the text is sent to _write for dislay. My
> installation of newlib comes from the libnewlib debian package, and it is
> on the most recent update.
>
> What could be the problem here, and is my implementation of sbrk adequate?
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.