Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2011-05-27 14:46:48 +0400
committerNick Clifton <nickc@redhat.com>2011-05-27 14:46:48 +0400
commit747a0a5205433496ac28f07e173407df5b9dad8a (patch)
treecbd917e5c54cedea44a9550d3d6b6a4894daa19e /libgloss/v850
parentbfce73c261fd9da02ce1d25a4a466ece1b3a55ea (diff)
* v8500/sbrk.c (_sbrk): Tidy code.
Base start of heap on the "heap_start" symbol. * libc/sys/sysnecv850/sbrk.c (_sbrk): Tidy code. Base start of heap on the "heap_start" symbol.
Diffstat (limited to 'libgloss/v850')
-rw-r--r--libgloss/v850/sbrk.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/libgloss/v850/sbrk.c b/libgloss/v850/sbrk.c
index b41370595..76c7d6ab3 100644
--- a/libgloss/v850/sbrk.c
+++ b/libgloss/v850/sbrk.c
@@ -3,34 +3,27 @@
#include <sys/stat.h>
#include "sys/syscall.h"
-int errno;
-
-int __trap0 (int function, int p1, int p2, int p3);
-
-#define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3))
-
caddr_t
_sbrk (int incr)
{
- extern char end; /* Defined by the linker */
- static char *heap_end;
- char *prev_heap_end;
-#if 0
- char *sp = (char *)stack_ptr;
-#else
- char *sp = (char *)&sp;
-#endif
+ extern char heap_start; /* Defined by the linker script. */
+ static char * heap_end = NULL;
+ char * prev_heap_end;
+ char * sp = (char *) & sp;
+
+ if (heap_end == NULL)
+ heap_end = & heap_start;
- if (heap_end == 0)
- {
- heap_end = &end;
- }
prev_heap_end = heap_end;
+
if (heap_end + incr > sp)
{
- _write (1, "Heap and stack collision\n", 25);
+#define MESSAGE "Heap and stack collision\n"
+ _write (1, MESSAGE, sizeof MESSAGE);
abort ();
}
+
heap_end += incr;
+
return (caddr_t) prev_heap_end;
}