Re: Huge numbers for incr passed to _sbrk
Michael Mamic <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAChm1gSPXUrs8DF3MdAeE2J6wqJs4nY4jyini8YsAYVKx833BQ@mail.gmail.com> |
I have posted the project source up on github. https://github.com/Mikestylz/CirnOS On Tue, Aug 21, 2018 at 2:12 PM Emeka <[email protected]> wrote: > 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? >> >