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:
parent
65ff3ce7fb
commit
c6d4802435
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user