diff options
| -rw-r--r-- | cores/arduino/Printable.h | 3 | ||||
| -rw-r--r-- | cores/arduino/new.cpp | 18 | ||||
| -rw-r--r-- | cores/arduino/new.h | 22 | 
3 files changed, 43 insertions, 0 deletions
| diff --git a/cores/arduino/Printable.h b/cores/arduino/Printable.h index e5d7732..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. @@ -31,6 +33,7 @@ class Print;  class Printable  {    public: +    virtual ~Printable() {};      virtual void printTo(Print& p) const =0;  }; 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 + | 
