Browse Source

Fix new/delete operators

main
PaulStoffregen 11 years ago
parent
commit
ee66b4f4a1
6 changed files with 81 additions and 23 deletions
  1. +3
    -0
      teensy/Printable.h
  2. +16
    -6
      teensy/new.cpp
  3. +7
    -3
      teensy/new.h
  4. +1
    -14
      teensy3/Printable.h
  5. +28
    -0
      teensy3/new.cpp
  6. +26
    -0
      teensy3/new.h

+ 3
- 0
teensy/Printable.h View File

#ifndef Printable_h #ifndef Printable_h
#define Printable_h #define Printable_h


#ifdef __cplusplus

#include "new.h" #include "new.h"


class Print; class Print;


#endif #endif
#endif #endif
#endif

+ 16
- 6
teensy/new.cpp View File

#include <new.h>
#include "new.h"


void * operator new(size_t size) void * operator new(size_t size)
{ {
return malloc(size); return malloc(size);
} }


void * operator new[](size_t size)
{
return malloc(size);
}

void operator delete(void * ptr) void operator delete(void * ptr)
{ {
free(ptr); free(ptr);
}
}

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 *) {};
//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) {};
//void __cxa_pure_virtual(void) {};



+ 7
- 3
teensy/new.h View File

#ifndef NEW_H #ifndef NEW_H
#define NEW_H #define NEW_H


#ifdef __cplusplus

#include <stdlib.h> #include <stdlib.h>


void * operator new(size_t size); void * operator new(size_t size);
void operator delete(void * ptr);
void * operator new[](size_t size);
void operator delete(void * ptr);
void operator delete[](void * ptr);


__extension__ typedef int __guard __attribute__((mode (__DI__))); __extension__ typedef int __guard __attribute__((mode (__DI__)));


extern "C" int __cxa_guard_acquire(__guard *); extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *); extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *); extern "C" void __cxa_guard_abort (__guard *);

extern "C" void __cxa_pure_virtual(void); extern "C" void __cxa_pure_virtual(void);


#endif
#endif // __cplusplus


#endif

+ 1
- 14
teensy3/Printable.h View File



#ifdef __cplusplus #ifdef __cplusplus


#include <stdlib.h>

inline void * operator new(unsigned int size) __attribute__((always_inline, unused));
inline void * operator new(unsigned int size)
{
return malloc(size);
}

inline void operator delete(void * ptr) __attribute__((always_inline, unused));
inline void operator delete(void * ptr)
{
free(ptr);
}

#include "new.h"


class Print; class Print;



+ 28
- 0
teensy3/new.cpp View File

#include "new.h"

void * operator new(size_t size)
{
return malloc(size);
}

void * operator new[](size_t size)
{
return malloc(size);
}

void operator delete(void * ptr)
{
free(ptr);
}

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) {};


+ 26
- 0
teensy3/new.h View File

/* 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

#ifdef __cplusplus

#include <stdlib.h>

void * operator new(size_t size);
void * operator new[](size_t size);
void operator delete(void * ptr);
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 // __cplusplus

#endif

Loading…
Cancel
Save