mirror of https://github.com/ARMmbed/mbed-os.git
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
parent
783953e5dc
commit
63d14f3af4
|
@ -347,6 +347,16 @@ extern "C" void *SUB_REALLOC(void *ptr, size_t size)
|
||||||
memcpy(new_ptr, (void *)ptr, copy_size);
|
memcpy(new_ptr, (void *)ptr, copy_size);
|
||||||
free(ptr);
|
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
|
#else // #if MBED_HEAP_STATS_ENABLED
|
||||||
new_ptr = SUPER_REALLOC(ptr, size);
|
new_ptr = SUPER_REALLOC(ptr, size);
|
||||||
#endif // #if MBED_HEAP_STATS_ENABLED
|
#endif // #if MBED_HEAP_STATS_ENABLED
|
||||||
|
@ -369,6 +379,16 @@ extern "C" void *SUB_CALLOC(size_t nmemb, size_t size)
|
||||||
if (ptr != NULL) {
|
if (ptr != NULL) {
|
||||||
memset(ptr, 0, nmemb * size);
|
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
|
#else // #if MBED_HEAP_STATS_ENABLED
|
||||||
ptr = SUPER_CALLOC(nmemb, size);
|
ptr = SUPER_CALLOC(nmemb, size);
|
||||||
#endif // #if MBED_HEAP_STATS_ENABLED
|
#endif // #if MBED_HEAP_STATS_ENABLED
|
||||||
|
|
Loading…
Reference in New Issue