OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib-1.10.0/] [newlib/] [libc/] [sys/] [arc/] [sbrk.c] - Rev 1773

Go to most recent revision | Compare with Previous | Blame | View Log

/* sbrk support */
 
/* The current plan is to have one sbrk handler for all cpus.
   Hence use `asm' for each global variable here to avoid the cpu prefix.
   We can't intrude on the user's namespace (another reason to use asm).  */
 
#include <sys/types.h>
#include <sys/syscall.h>
#include <errno.h>
#include <stddef.h>
 
/* These variables are publicly accessible for debugging purposes.
   The user is also free to set sbrk_size to something different.
   See mem-layout.c.  */
 
extern int sbrk_size asm ("sbrk_size");
 
caddr_t sbrk_start asm ("sbrk_start");
caddr_t sbrk_loc asm ("sbrk_loc");
 
/*caddr_t _sbrk_r (struct _reent *, size_t) asm ("__sbrk_r");*/
 
/* FIXME: We need a semaphore here.  */
 
caddr_t
_sbrk_r (struct _reent *r, size_t nbytes)
{
  caddr_t result;
 
  if (
      /* Ensure we don't underflow.  */
      sbrk_loc + nbytes < sbrk_start
      /* Ensure we don't overflow.  */
      || sbrk_loc + nbytes > sbrk_start + sbrk_size)
    {
      errno = ENOMEM;
      return ((caddr_t) -1);
    }
 
  result = sbrk_loc;
  sbrk_loc += nbytes;
  return result;
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.