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:
commit
82e04ba325
@ -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;
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
@ -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) {};
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
37
hardware/arduino/sam/cores/arduino/abi.cpp
Normal file
37
hardware/arduino/sam/cores/arduino/abi.cpp
Normal 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)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user