mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-09 01:18:29 -04:00
AP_Common: override new and delete on all platforms to zero memory
this guarantees that all classes get zero initial members when they are dynamically allocated.
This commit is contained in:
parent
f2756ecb22
commit
21c8a2d94a
@ -9,10 +9,18 @@
|
|||||||
#include <AP_HAL.h>
|
#include <AP_HAL.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#if CONFIG_HAL_BOARD == HAL_BOARD_APM1 || CONFIG_HAL_BOARD == HAL_BOARD_APM2 || CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE
|
/*
|
||||||
|
globally override new and delete to ensure that we always start with
|
||||||
|
zero memory. This ensures consistent behaviour. Note that
|
||||||
|
initialising all members of all C++ classes separately takes a lot
|
||||||
|
of flash space. On APM1/APM2 it would mean we wouldn't fit on the
|
||||||
|
board at all.
|
||||||
|
*/
|
||||||
void * operator new(size_t size)
|
void * operator new(size_t size)
|
||||||
{
|
{
|
||||||
|
if (size < 1) {
|
||||||
|
size = 1;
|
||||||
|
}
|
||||||
return(calloc(size, 1));
|
return(calloc(size, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,15 +29,11 @@ void operator delete(void *p)
|
|||||||
if (p) free(p);
|
if (p) free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Conflicts with libmaple wirish/cxxabi-compat.cpp
|
|
||||||
#if CONFIG_HAL_BOARD != HAL_BOARD_FLYMAPLE
|
|
||||||
extern "C" void __cxa_pure_virtual(){
|
|
||||||
while (1){}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void * operator new[](size_t size)
|
void * operator new[](size_t size)
|
||||||
{
|
{
|
||||||
|
if (size < 1) {
|
||||||
|
size = 1;
|
||||||
|
}
|
||||||
return(calloc(size, 1));
|
return(calloc(size, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +42,16 @@ void operator delete[](void * ptr)
|
|||||||
if (ptr) free(ptr);
|
if (ptr) free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_HAL_BOARD == HAL_BOARD_APM1 || CONFIG_HAL_BOARD == HAL_BOARD_APM2 || CONFIG_HAL_BOARD == HAL_BOARD_FLYMAPLE
|
||||||
|
|
||||||
|
// Conflicts with libmaple wirish/cxxabi-compat.cpp
|
||||||
|
#if CONFIG_HAL_BOARD != HAL_BOARD_FLYMAPLE
|
||||||
|
extern "C" void __cxa_pure_virtual(){
|
||||||
|
while (1){}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
__extension__ typedef int __guard __attribute__((mode (__DI__)));
|
__extension__ typedef int __guard __attribute__((mode (__DI__)));
|
||||||
|
|
||||||
int __cxa_guard_acquire(__guard *g)
|
int __cxa_guard_acquire(__guard *g)
|
||||||
|
Loading…
Reference in New Issue
Block a user