mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-16 18:13:49 +01:00
Merge pull request #3107 from gebart/pr/cppsupport
c++: Define some support functions required by GCC
This commit is contained in:
commit
56b0beeebe
@ -52,11 +52,6 @@ extern uint32_t _eram;
|
|||||||
*/
|
*/
|
||||||
#define STACK_CANARY_WORD 0xE7FEE7FEu
|
#define STACK_CANARY_WORD 0xE7FEE7FEu
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Required by g++ cross compiler
|
|
||||||
*/
|
|
||||||
void *__dso_handle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Pre-start routine for CPU-specific settings
|
* @brief Pre-start routine for CPU-specific settings
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -26,6 +26,9 @@ endif
|
|||||||
|
|
||||||
ifneq (,$(filter cpp11-compat,$(USEMODULE)))
|
ifneq (,$(filter cpp11-compat,$(USEMODULE)))
|
||||||
USEMODULE_INCLUDES += $(RIOTBASE)/sys/cpp11-compat/include
|
USEMODULE_INCLUDES += $(RIOTBASE)/sys/cpp11-compat/include
|
||||||
|
# make sure cppsupport.o is linked explicitly because __dso_handle is not
|
||||||
|
# found if it is hidden away inside a static object.
|
||||||
|
export UNDEF += $(BINDIR)cpp11-compat/cppsupport.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter gnrc_slip,$(USEMODULE)))
|
ifneq (,$(filter gnrc_slip,$(USEMODULE)))
|
||||||
|
|||||||
@ -18,12 +18,12 @@
|
|||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <system_error>
|
#include <system_error>
|
||||||
|
|
||||||
#include "irq.h"
|
#include "irq.h"
|
||||||
#include "sched.h"
|
#include "sched.h"
|
||||||
|
#include "timex.h"
|
||||||
#include "vtimer.h"
|
#include "vtimer.h"
|
||||||
#include "priority_queue.h"
|
#include "priority_queue.h"
|
||||||
|
|
||||||
|
|||||||
147
sys/cpp11-compat/cppsupport.cpp
Normal file
147
sys/cpp11-compat/cppsupport.cpp
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Eistec AB
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU Lesser General
|
||||||
|
* Public License v2.1. See the file LICENSE in the top level directory for more
|
||||||
|
* details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup cpp11-compat
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* @file
|
||||||
|
* @brief C++ runtime support functions
|
||||||
|
*
|
||||||
|
* Tested with GCC-4.9.2 and Clang-3.6
|
||||||
|
*
|
||||||
|
* @author Joakim Gebart <joakim.gebart@eistec.se>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <new>
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "panic.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DSO handle
|
||||||
|
*
|
||||||
|
* This symbol is used by dynamic shared objects to identify them, but it is
|
||||||
|
* somehow pulled in as a dependency by the compiler-generated global (static)
|
||||||
|
* constructor code.
|
||||||
|
*/
|
||||||
|
void *__dso_handle __attribute__((weak)) = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Definition of a pure virtual function
|
||||||
|
*
|
||||||
|
* Calling this function is an error.
|
||||||
|
*/
|
||||||
|
extern "C" void __cxa_pure_virtual ()
|
||||||
|
{
|
||||||
|
core_panic(123, "PURE VIRTUAL CALL");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Register a function to be called by exit or when a shared library is unloaded.
|
||||||
|
*
|
||||||
|
* Not really used on an embedded system where you pull the power to shut down
|
||||||
|
* the program.
|
||||||
|
*
|
||||||
|
* This is only called by code automatically generated by the C++ compiler.
|
||||||
|
*
|
||||||
|
* @return 0 on success
|
||||||
|
* @return non-zero on failure.
|
||||||
|
*/
|
||||||
|
extern "C" int __cxa_atexit (void (*) (void *), void *, void *)
|
||||||
|
{
|
||||||
|
/* We just pretend everything is dandy. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace __gnu_cxx {
|
||||||
|
/**
|
||||||
|
* @brief Override the G++ verbose termination handler
|
||||||
|
*
|
||||||
|
* The default implementation of __gnu_cxx::__verbose_terminate_handler comes
|
||||||
|
* with gcc and will print the name of unhandled exceptions to stderr before
|
||||||
|
* terminating the program. However, in order to get the name of the exceptions
|
||||||
|
* a large chunk of name demangling code is pulled in as well (several tens of
|
||||||
|
* kBytes!).
|
||||||
|
*
|
||||||
|
* @note Depending on the version of the compiler and what settings were used
|
||||||
|
* when building the toolchain __gnu_cxx::__verbose_terminate_handler may or may
|
||||||
|
* not be pulled in. std::abort may be used instead by default in some
|
||||||
|
* toolchains.
|
||||||
|
*
|
||||||
|
* @see http://www.webalice.it/fede.tft/cpp_on_microcontrollers_tricks/cpp_on_microcontrollers_tricks.html
|
||||||
|
*/
|
||||||
|
void __verbose_terminate_handler()
|
||||||
|
{
|
||||||
|
core_panic(123, "UNHANDLED C++ EXCEPTION");
|
||||||
|
}
|
||||||
|
} /* namespace __gnu_cxx */
|
||||||
|
|
||||||
|
/* Implementations of new and delete operators taken from public domain code
|
||||||
|
* at http://pastebin.com/7VKUuTJa (downloaded on Wed 24 Jun 2015 09:00:07 PM CEST)
|
||||||
|
* Author: Eric Agan
|
||||||
|
* The license text reads:
|
||||||
|
* > "Public domain, use however you wish.
|
||||||
|
* > "If you really need a license, consider it MIT."
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* tinynew.cpp
|
||||||
|
|
||||||
|
Overrides operators new and delete
|
||||||
|
globally to reduce code size.
|
||||||
|
|
||||||
|
Public domain, use however you wish.
|
||||||
|
If you really need a license, consider it MIT:
|
||||||
|
http://www.opensource.org/licenses/mit-license.php
|
||||||
|
|
||||||
|
- Eric Agan
|
||||||
|
Elegant Invention
|
||||||
|
*/
|
||||||
|
|
||||||
|
void* operator new(std::size_t size) {
|
||||||
|
return std::malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* operator new[](std::size_t size) {
|
||||||
|
return std::malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete(void* ptr) noexcept {
|
||||||
|
std::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete[](void* ptr) noexcept {
|
||||||
|
std::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Optionally you can override the 'nothrow' versions as well.
|
||||||
|
This is useful if you want to catch failed allocs with your
|
||||||
|
own debug code, or keep track of heap usage for example,
|
||||||
|
rather than just eliminate exceptions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void* operator new(std::size_t size, const std::nothrow_t&) noexcept {
|
||||||
|
return std::malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* operator new[](std::size_t size, const std::nothrow_t&) noexcept {
|
||||||
|
return std::malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete(void* ptr, const std::nothrow_t&) noexcept {
|
||||||
|
std::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator delete[](void* ptr, const std::nothrow_t&) noexcept {
|
||||||
|
std::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
||||||
@ -26,7 +26,6 @@
|
|||||||
#define RIOT_CHRONO_HPP
|
#define RIOT_CHRONO_HPP
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstdio>
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
|||||||
@ -4,22 +4,28 @@ APPLICATION = cpp11_condition_variable
|
|||||||
# If no BOARD is found in the environment, use this default:
|
# If no BOARD is found in the environment, use this default:
|
||||||
BOARD ?= native
|
BOARD ?= native
|
||||||
|
|
||||||
|
# ROM is overflowing for these boards when using
|
||||||
|
# gcc-arm-none-eabi-4.9.3.2015q2-1trusty1 from ppa:terry.guo/gcc-arm-embedded
|
||||||
|
# (Travis is using this PPA currently, 2015-06-23)
|
||||||
|
# Debian jessie libstdc++-arm-none-eabi-newlib-4.8.3-9+4 works fine, though.
|
||||||
|
# Remove this line if Travis is upgraded to a different toolchain which does
|
||||||
|
# not pull in all C++ locale code whenever exceptions are used.
|
||||||
|
BOARD_INSUFFICIENT_RAM := stm32f0discovery spark-core nucleo-f334
|
||||||
|
|
||||||
# This has to be the absolute path to the RIOT base directory:
|
# This has to be the absolute path to the RIOT base directory:
|
||||||
RIOTBASE ?= $(CURDIR)/../..
|
RIOTBASE ?= $(CURDIR)/../..
|
||||||
|
|
||||||
# Comment this out to disable code in RIOT that does safety checking
|
# Comment this out to disable code in RIOT that does safety checking
|
||||||
# which is not needed in a production environment but helps in the
|
# which is not needed in a production environment but helps in the
|
||||||
# development process:
|
# development process:
|
||||||
CFLAGS += -DDEVELHELP -Wno-deprecated
|
CFLAGS += -DDEVELHELP
|
||||||
|
|
||||||
# Change this to 0 show compiler invocation lines by default:
|
# Change this to 0 show compiler invocation lines by default:
|
||||||
QUIET ?= 1
|
QUIET ?= 1
|
||||||
|
|
||||||
BOARD_WHITELIST := stm32f4discovery native
|
|
||||||
|
|
||||||
# If you want to add some extra flags when compile c++ files, add these flags
|
# If you want to add some extra flags when compile c++ files, add these flags
|
||||||
# to CXXEXFLAGS variable
|
# to CXXEXFLAGS variable
|
||||||
CXXEXFLAGS += -std=c++11 -g -O0 -Wno-deprecated
|
CXXEXFLAGS += -std=c++11
|
||||||
|
|
||||||
USEMODULE += cpp11-compat
|
USEMODULE += cpp11-compat
|
||||||
USEMODULE += vtimer
|
USEMODULE += vtimer
|
||||||
|
|||||||
@ -4,22 +4,28 @@ APPLICATION = cpp11_mutex
|
|||||||
# If no BOARD is found in the environment, use this default:
|
# If no BOARD is found in the environment, use this default:
|
||||||
BOARD ?= native
|
BOARD ?= native
|
||||||
|
|
||||||
|
# ROM is overflowing for these boards when using
|
||||||
|
# gcc-arm-none-eabi-4.9.3.2015q2-1trusty1 from ppa:terry.guo/gcc-arm-embedded
|
||||||
|
# (Travis is using this PPA currently, 2015-06-23)
|
||||||
|
# Debian jessie libstdc++-arm-none-eabi-newlib-4.8.3-9+4 works fine, though.
|
||||||
|
# Remove this line if Travis is upgraded to a different toolchain which does
|
||||||
|
# not pull in all C++ locale code whenever exceptions are used.
|
||||||
|
BOARD_INSUFFICIENT_RAM := stm32f0discovery spark-core nucleo-f334
|
||||||
|
|
||||||
# This has to be the absolute path to the RIOT base directory:
|
# This has to be the absolute path to the RIOT base directory:
|
||||||
RIOTBASE ?= $(CURDIR)/../..
|
RIOTBASE ?= $(CURDIR)/../..
|
||||||
|
|
||||||
# Comment this out to disable code in RIOT that does safety checking
|
# Comment this out to disable code in RIOT that does safety checking
|
||||||
# which is not needed in a production environment but helps in the
|
# which is not needed in a production environment but helps in the
|
||||||
# development process:
|
# development process:
|
||||||
CFLAGS += -DDEVELHELP -Wno-deprecated
|
CFLAGS += -DDEVELHELP
|
||||||
|
|
||||||
# Change this to 0 show compiler invocation lines by default:
|
# Change this to 0 show compiler invocation lines by default:
|
||||||
QUIET ?= 1
|
QUIET ?= 1
|
||||||
|
|
||||||
BOARD_WHITELIST := stm32f4discovery native
|
|
||||||
|
|
||||||
# If you want to add some extra flags when compile c++ files, add these flags
|
# If you want to add some extra flags when compile c++ files, add these flags
|
||||||
# to CXXEXFLAGS variable
|
# to CXXEXFLAGS variable
|
||||||
CXXEXFLAGS += -std=c++11 -g -O0 -Wno-deprecated
|
CXXEXFLAGS += -std=c++11
|
||||||
|
|
||||||
USEMODULE += cpp11-compat
|
USEMODULE += cpp11-compat
|
||||||
USEMODULE += vtimer
|
USEMODULE += vtimer
|
||||||
|
|||||||
@ -4,22 +4,28 @@ APPLICATION = cpp11_thread
|
|||||||
# If no BOARD is found in the environment, use this default:
|
# If no BOARD is found in the environment, use this default:
|
||||||
BOARD ?= native
|
BOARD ?= native
|
||||||
|
|
||||||
|
# ROM is overflowing for these boards when using
|
||||||
|
# gcc-arm-none-eabi-4.9.3.2015q2-1trusty1 from ppa:terry.guo/gcc-arm-embedded
|
||||||
|
# (Travis is using this PPA currently, 2015-06-23)
|
||||||
|
# Debian jessie libstdc++-arm-none-eabi-newlib-4.8.3-9+4 works fine, though.
|
||||||
|
# Remove this line if Travis is upgraded to a different toolchain which does
|
||||||
|
# not pull in all C++ locale code whenever exceptions are used.
|
||||||
|
BOARD_INSUFFICIENT_RAM := stm32f0discovery spark-core nucleo-f334
|
||||||
|
|
||||||
# This has to be the absolute path to the RIOT base directory:
|
# This has to be the absolute path to the RIOT base directory:
|
||||||
RIOTBASE ?= $(CURDIR)/../..
|
RIOTBASE ?= $(CURDIR)/../..
|
||||||
|
|
||||||
# Comment this out to disable code in RIOT that does safety checking
|
# Comment this out to disable code in RIOT that does safety checking
|
||||||
# which is not needed in a production environment but helps in the
|
# which is not needed in a production environment but helps in the
|
||||||
# development process:
|
# development process:
|
||||||
CFLAGS += -DDEVELHELP -Wno-deprecated
|
CFLAGS += -DDEVELHELP
|
||||||
|
|
||||||
# Change this to 0 show compiler invocation lines by default:
|
# Change this to 0 show compiler invocation lines by default:
|
||||||
QUIET ?= 1
|
QUIET ?= 1
|
||||||
|
|
||||||
BOARD_WHITELIST := stm32f4discovery native
|
|
||||||
|
|
||||||
# If you want to add some extra flags when compile c++ files, add these flags
|
# If you want to add some extra flags when compile c++ files, add these flags
|
||||||
# to CXXEXFLAGS variable
|
# to CXXEXFLAGS variable
|
||||||
CXXEXFLAGS += -std=c++11 -g -O0 -Wno-deprecated
|
CXXEXFLAGS += -std=c++11
|
||||||
|
|
||||||
USEMODULE += cpp11-compat
|
USEMODULE += cpp11-compat
|
||||||
USEMODULE += vtimer
|
USEMODULE += vtimer
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user