or1k: Make heap start configurable

- Previously the heap started right after the bss section. This can now
  be configured by changing the _or1k_heap_start symbol that defaults to
  the old value (&end). In board_init_early, we can now set this to
  another value.

    * or1k/sbrk.c: Allow for different heap start
This commit is contained in:
Jeff Johnston 2015-05-26 15:28:31 -04:00 committed by Corinna Vinschen
parent aa26b78462
commit 58efeedd16
2 changed files with 7 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2015-05-26 Stefan Wallentowitz <stefan.wallentowitz@tum.de>
* or1k/sbrk.c: Allow for different heap start
2015-05-26 Stefan Wallentowitz <stefan.wallentowitz@tum.de> 2015-05-26 Stefan Wallentowitz <stefan.wallentowitz@tum.de>
* or1k/or1k_uart.c: Fix interrupts * or1k/or1k_uart.c: Fix interrupts

View File

@ -19,12 +19,13 @@
#include "include/or1k-support.h" #include "include/or1k-support.h"
extern uint32_t end; /* Set by linker. */
uint32_t _or1k_heap_start = &end;
static uint32_t _or1k_heap_end; static uint32_t _or1k_heap_end;
void * void *
_sbrk_r (struct _reent * reent, ptrdiff_t incr) _sbrk_r (struct _reent * reent, ptrdiff_t incr)
{ {
extern uint32_t end; /* Set by linker. */
uint32_t prev_heap_end; uint32_t prev_heap_end;
// This needs to be atomic // This needs to be atomic
@ -34,7 +35,7 @@ _sbrk_r (struct _reent * reent, ptrdiff_t incr)
uint32_t sr_tee = or1k_timer_disable(); uint32_t sr_tee = or1k_timer_disable();
// Initialize heap end to end if not initialized before // Initialize heap end to end if not initialized before
or1k_sync_cas((void*) &_or1k_heap_end, 0, (uint32_t) &end); or1k_sync_cas((void*) &_or1k_heap_end, 0, (uint32_t) _or1k_heap_start);
do { do {
// Read previous heap end // Read previous heap end