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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [libgloss/] [m32r/] [sbrk.c] - Diff between revs 57 and 1765

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

Rev 57 Rev 1765
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include "syscall.h"
#include "syscall.h"
#include "eit.h"
#include "eit.h"
 
 
caddr_t
caddr_t
_sbrk (int incr)
_sbrk (int incr)
{
{
  /* `_end' is defined in the linker script.
  /* `_end' is defined in the linker script.
     We must handle it carefully as we don't want the compiler to think
     We must handle it carefully as we don't want the compiler to think
     it lives in the small data area.  Use medium model to ensure 32 bit
     it lives in the small data area.  Use medium model to ensure 32 bit
     addressability.  */
     addressability.  */
  extern char _end __attribute__ ((__model__(__medium__)));
  extern char _end __attribute__ ((__model__(__medium__)));
  static char *heap_end;
  static char *heap_end;
  char *prev_heap_end;
  char *prev_heap_end;
  char *sp = (char *)&sp;
  char *sp = (char *)&sp;
 
 
  if (heap_end == 0)
  if (heap_end == 0)
    {
    {
      heap_end = &_end;
      heap_end = &_end;
    }
    }
  prev_heap_end = heap_end;
  prev_heap_end = heap_end;
  if (heap_end > sp)
  if (heap_end > sp)
    {
    {
      _write (1, "Heap and stack collision\n", 25);
      _write (1, "Heap and stack collision\n", 25);
#if 0 /* Calling abort brings in the signal handling code.  */
#if 0 /* Calling abort brings in the signal handling code.  */
      abort ();
      abort ();
#else
#else
      exit (1);
      exit (1);
#endif
#endif
    }
    }
  heap_end += incr;
  heap_end += incr;
  return (caddr_t) prev_heap_end;
  return (caddr_t) prev_heap_end;
}
}
 
 

powered by: WebSVN 2.1.0

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