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? >