1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-18 12:54:25 +01:00

Merge pull request #2284 from cmaglie/ide-1.5.x-cxx-abi-compat

Correct implementation of gcc specific internal functions (take 2)
This commit is contained in:
Cristian Maglie 2014-09-08 19:14:04 +02:00
commit 82e04ba325
7 changed files with 98 additions and 38 deletions

View File

@ -20,7 +20,7 @@
#ifndef Printable_h #ifndef Printable_h
#define Printable_h #define Printable_h
#include <new.h> #include <stdlib.h>
class Print; class Print;

View File

@ -1,5 +1,5 @@
/* /*
Copyright (c) 2011 Arduino. All right reserved. Copyright (c) 2014 Arduino. All right reserved.
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
@ -8,7 +8,7 @@
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
@ -16,11 +16,20 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
extern "C" void __cxa_pure_virtual(void) ; #include <stdlib.h>
/* We compile with nodefaultlibs, so we need to provide an error extern "C" void __cxa_pure_virtual(void) __attribute__ ((__noreturn__));
* handler for an empty pure virtual function */ extern "C" void __cxa_deleted_virtual(void) __attribute__ ((__noreturn__));
extern "C" void __cxa_pure_virtual(void) {
while(1) void __cxa_pure_virtual(void) {
; // We might want to write some diagnostics to uart in this case
//std::terminate();
abort();
} }
void __cxa_deleted_virtual(void) {
// We might want to write some diagnostics to uart in this case
//std::terminate();
abort();
}

View File

@ -1,28 +1,36 @@
#include <new.h> /*
Copyright (c) 2014 Arduino. All right reserved.
void * operator new(size_t size) This library is free software; you can redistribute it and/or
{ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
void *operator new(size_t size) {
return malloc(size); return malloc(size);
} }
void * operator new[](size_t size) void *operator new[](size_t size) {
{
return malloc(size); return malloc(size);
} }
void operator delete(void * ptr) void operator delete(void * ptr) {
{
free(ptr); free(ptr);
} }
void operator delete[](void * ptr) void operator delete[](void * ptr) {
{
free(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) {};

View File

@ -1,6 +1,20 @@
/* 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 Copyright (c) 2014 Arduino. All right reserved.
*/
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef NEW_H #ifndef NEW_H
#define NEW_H #define NEW_H
@ -12,13 +26,5 @@ void * operator new[](size_t size);
void operator delete(void * ptr); void operator delete(void * ptr);
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 #endif

View File

@ -21,7 +21,7 @@ compiler.c.elf.flags=-w -Os -Wl,--gc-sections
compiler.c.elf.cmd=avr-gcc compiler.c.elf.cmd=avr-gcc
compiler.S.flags=-c -g -x assembler-with-cpp compiler.S.flags=-c -g -x assembler-with-cpp
compiler.cpp.cmd=avr-g++ compiler.cpp.cmd=avr-g++
compiler.cpp.flags=-c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD compiler.cpp.flags=-c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD
compiler.ar.cmd=avr-ar compiler.ar.cmd=avr-ar
compiler.ar.flags=rcs compiler.ar.flags=rcs
compiler.objcopy.cmd=avr-objcopy compiler.objcopy.cmd=avr-objcopy

View File

@ -0,0 +1,37 @@
/*
Copyright (c) 2014 Arduino. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
extern "C" void __cxa_pure_virtual(void) __attribute__ ((__noreturn__));
extern "C" void __cxa_deleted_virtual(void) __attribute__ ((__noreturn__));
void __cxa_pure_virtual(void) {
// We might want to write some diagnostics to uart in this case
//std::terminate();
while (1)
;
}
void __cxa_deleted_virtual(void) {
// We might want to write some diagnostics to uart in this case
//std::terminate();
while (1)
;
}

View File

@ -13,11 +13,11 @@ version=1.5.8
compiler.path={runtime.ide.path}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin/ compiler.path={runtime.ide.path}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin/
compiler.c.cmd=arm-none-eabi-gcc compiler.c.cmd=arm-none-eabi-gcc
compiler.c.flags=-c -g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -Dprintf=iprintf compiler.c.flags=-c -g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -Dprintf=iprintf
compiler.c.elf.cmd=arm-none-eabi-g++ compiler.c.elf.cmd=arm-none-eabi-gcc
compiler.c.elf.flags=-Os -Wl,--gc-sections compiler.c.elf.flags=-Os -Wl,--gc-sections
compiler.S.flags=-c -g -x assembler-with-cpp compiler.S.flags=-c -g -x assembler-with-cpp
compiler.cpp.cmd=arm-none-eabi-g++ compiler.cpp.cmd=arm-none-eabi-g++
compiler.cpp.flags=-c -g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf compiler.cpp.flags=-c -g -Os -w -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf
compiler.ar.cmd=arm-none-eabi-ar compiler.ar.cmd=arm-none-eabi-ar
compiler.ar.flags=rcs compiler.ar.flags=rcs
compiler.objcopy.cmd=arm-none-eabi-objcopy compiler.objcopy.cmd=arm-none-eabi-objcopy