add dummy SUPER_REALLOC/CALLOC calls to alloc wrappers

This code prevents the ARMC6 compiler/linker from removing
SUB_REALLOC/CALLOC symbols from image when LTO is enabled

Fixes below error:
L6137E: Symbol $Sub$$calloc was not preserved by the LTO codegen but is needed by the image.
pull/11874/head
Maciej Bocianski 2019-11-29 10:24:01 +01:00
parent 783953e5dc
commit 63d14f3af4
1 changed files with 20 additions and 0 deletions

View File

@ -347,6 +347,16 @@ extern "C" void *SUB_REALLOC(void *ptr, size_t size)
memcpy(new_ptr, (void *)ptr, copy_size);
free(ptr);
}
{
volatile uint8_t dummy = 0;
if (dummy != 0) { // always false
// this code will never be executed
// it's just to tell the compiler/linker to preserve SUB_REALLOC symbol
// when LTO enabled
SUPER_REALLOC(NULL, 0);
}
}
#else // #if MBED_HEAP_STATS_ENABLED
new_ptr = SUPER_REALLOC(ptr, size);
#endif // #if MBED_HEAP_STATS_ENABLED
@ -369,6 +379,16 @@ extern "C" void *SUB_CALLOC(size_t nmemb, size_t size)
if (ptr != NULL) {
memset(ptr, 0, nmemb * size);
}
{
volatile uint8_t dummy = 0;
if (dummy != 0) { // always false
// this code will never be executed
// it's just to tell the compiler/linker to preserve SUB_CALLOC symbol
// when LTO enabled
SUPER_CALLOC(NULL, 0);
}
}
#else // #if MBED_HEAP_STATS_ENABLED
ptr = SUPER_CALLOC(nmemb, size);
#endif // #if MBED_HEAP_STATS_ENABLED