Huge numbers for incr passed to _sbrk

Michael Mamic <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAChm1gQqnt-NcO4GG=RKZcHD7HrcFuwLjtDeTupT00Kh0pcXng@mail.gmail.com>
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.