diff options
author | Nick Clifton <nickc@redhat.com> | 2011-05-27 10:46:48 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2011-05-27 10:46:48 +0000 |
commit | 747a0a5205433496ac28f07e173407df5b9dad8a (patch) | |
tree | cbd917e5c54cedea44a9550d3d6b6a4894daa19e /libgloss/v850 | |
parent | bfce73c261fd9da02ce1d25a4a466ece1b3a55ea (diff) | |
download | newlib-747a0a5205433496ac28f07e173407df5b9dad8a.zip newlib-747a0a5205433496ac28f07e173407df5b9dad8a.tar.gz newlib-747a0a5205433496ac28f07e173407df5b9dad8a.tar.bz2 |
* 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.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/libgloss/v850/sbrk.c b/libgloss/v850/sbrk.c index b413705..76c7d6a 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; } |