Merge pull request #11572 from kjbracey-arm/sbrk2_fix

Tighten GCC 2-region _sbrk
pull/11625/head
Anna Bridge 2019-10-03 11:19:37 +01:00 committed by GitHub
commit 8688b183a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 7 deletions

View File

@ -1268,7 +1268,7 @@ extern "C" WEAK void __cxa_pure_virtual(void)
extern uint32_t __mbed_sbrk_start;
extern uint32_t __mbed_krbs_start;
/* Additional RAM memory used for heap - please note this
* address should be lower address then the previous default address
* address must be lower address then the previous default address
*/
extern uint32_t __mbed_sbrk_start_0;
extern uint32_t __mbed_krbs_start_0;
@ -1276,19 +1276,18 @@ extern uint32_t __mbed_krbs_start_0;
extern "C" WEAK caddr_t _sbrk(int incr)
{
static uint32_t heap = (uint32_t) &__mbed_sbrk_start_0;
static bool once = true;
uint32_t prev_heap = heap;
uint32_t new_heap = heap + incr;
/**
* If the new address is outside the first region, start allocating from the second region.
* Jump to second region is done just once, and `static bool once` is used to keep track of that.
* If we exceed the first region, start allocating from the second region.
*/
if (once && (new_heap > (uint32_t) &__mbed_krbs_start_0)) {
once = false;
if (prev_heap <= (uint32_t) &__mbed_krbs_start_0 && new_heap > (uint32_t) &__mbed_krbs_start_0) {
prev_heap = (uint32_t) &__mbed_sbrk_start;
new_heap = prev_heap + incr;
} else if (new_heap > (uint32_t) &__mbed_krbs_start) {
}
if (new_heap > (uint32_t) &__mbed_krbs_start) {
/**
* If the new address is outside the second region, return out-of-memory.
*/