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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc2/] [newlib/] [libc/] [sys/] [arc/] [sbrk.c] - Diff between revs 207 and 520

Only display areas with differences | Details | Blame | View Log

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

powered by: WebSVN 2.1.0

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