diff options
Diffstat (limited to 'cores')
-rw-r--r-- | cores/arduino/Printable.h | 6 | ||||
-rw-r--r-- | cores/arduino/new.cpp | 18 | ||||
-rw-r--r-- | cores/arduino/new.h | 22 |
3 files changed, 45 insertions, 1 deletions
diff --git a/cores/arduino/Printable.h b/cores/arduino/Printable.h index d332aad..5ff6077 100644 --- a/cores/arduino/Printable.h +++ b/cores/arduino/Printable.h @@ -20,6 +20,8 @@ #ifndef Printable_h #define Printable_h +#include <new.h> + class Print; /** The Printable class provides a way for new classes to allow themselves to be printed. @@ -27,10 +29,12 @@ class Print; for users to print out instances of this class by passing them into the usual Print::print and Print::println methods. */ + class Printable { public: - virtual void printTo(Print& p) const = 0; + virtual ~Printable() {}; + virtual void printTo(Print& p) const =0; }; #endif diff --git a/cores/arduino/new.cpp b/cores/arduino/new.cpp new file mode 100644 index 0000000..0f6d422 --- /dev/null +++ b/cores/arduino/new.cpp @@ -0,0 +1,18 @@ +#include <new.h> + +void * operator new(size_t size) +{ + return malloc(size); +} + +void operator delete(void * ptr) +{ + free(ptr); +} + +int __cxa_guard_acquire(__guard *g) {return !*(char *)(g);}; +void __cxa_guard_release (__guard *g) {*(char *)g = 1;}; +void __cxa_guard_abort (__guard *) {}; + +void __cxa_pure_virtual(void) {}; + diff --git a/cores/arduino/new.h b/cores/arduino/new.h new file mode 100644 index 0000000..cd940ce --- /dev/null +++ b/cores/arduino/new.h @@ -0,0 +1,22 @@ +/* Header to define new/delete operators as they aren't provided by avr-gcc by default + Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453 + */ + +#ifndef NEW_H +#define NEW_H + +#include <stdlib.h> + +void * operator new(size_t size); +void operator delete(void * ptr); + +__extension__ typedef int __guard __attribute__((mode (__DI__))); + +extern "C" int __cxa_guard_acquire(__guard *); +extern "C" void __cxa_guard_release (__guard *); +extern "C" void __cxa_guard_abort (__guard *); + +extern "C" void __cxa_pure_virtual(void); + +#endif + |