diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index d55aff717..629fb8826 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,8 @@ +2011-05-27 Nick Clifton + + * v8500/sbrk.c (_sbrk): Tidy code. + Base start of heap on the "heap_start" symbol. + 2011-03-26 Mike Frysinger * bfin/include/builtins.h (__builtin_raise): Change constraint to n. 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 #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; } diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 6fae8d0ee..561c278ab 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2011-05-27 Nick Clifton + + * libc/sys/sysnecv850/sbrk.c (_sbrk): Tidy code. + Base start of heap on the "heap_start" symbol. + 2011-05-25 Eric Blake * libc/string/strerror.c (_strerror_r): Report "Success" for 0. diff --git a/newlib/libc/sys/sysnecv850/sbrk.c b/newlib/libc/sys/sysnecv850/sbrk.c index b41370595..828364591 100644 --- a/newlib/libc/sys/sysnecv850/sbrk.c +++ b/newlib/libc/sys/sysnecv850/sbrk.c @@ -3,34 +3,27 @@ #include #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; }