diff --git a/cores/esp8266/Arduino.h b/cores/esp8266/Arduino.h index d962923de8..359be24c56 100644 --- a/cores/esp8266/Arduino.h +++ b/cores/esp8266/Arduino.h @@ -33,6 +33,33 @@ extern "C" { #include #include +#if defined(__cplusplus) \ + && !defined(__cpp_exceptions) \ + && !defined(_NEWHACK) \ + && !defined(CORE_MOCK) +// this is a hack working with gcc4.8 +// Overload operator new so it can return nullptr instead of throwing an +// exception without (std::nothrow)` +// Requirements: (or the constructor is called even on nullptr) +// - "noexcept" is needed +// - "#include " must not be done *before* these definitions +#define _NEWHACK +#if defined(_NEW) && !defined(_ARDUINO_HIDE_NEWHACK_WARNING) +#warning Arduino.h must be included before other c++ include files +#endif +#include +extern "C" void* _malloc4newabi (size_t size); +extern "C++" inline void* operator new (std::size_t size) noexcept +{ + return _malloc4newabi(size); +} +extern "C++" inline void* operator new [] (std::size_t size) noexcept +{ + return _malloc4newabi(size); +} +#include +#endif // _NEWHACK + #include "stdlib_noniso.h" #include "binary.h" #include "esp8266_peri.h" diff --git a/cores/esp8266/FS.cpp b/cores/esp8266/FS.cpp index 7006a8afaf..e9b874a645 100644 --- a/cores/esp8266/FS.cpp +++ b/cores/esp8266/FS.cpp @@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "Arduino.h" #include "FS.h" #include "FSImpl.h" diff --git a/cores/esp8266/FunctionalInterrupt.cpp b/cores/esp8266/FunctionalInterrupt.cpp index 665d8043b3..df4d87c208 100644 --- a/cores/esp8266/FunctionalInterrupt.cpp +++ b/cores/esp8266/FunctionalInterrupt.cpp @@ -1,6 +1,6 @@ +#include #include #include -#include "Arduino.h" // Duplicate typedefs from core_esp8266_wiring_digital_c typedef void (*voidFuncPtr)(void); diff --git a/cores/esp8266/Schedule.cpp b/cores/esp8266/Schedule.cpp index ed39736e55..750de81c04 100644 --- a/cores/esp8266/Schedule.cpp +++ b/cores/esp8266/Schedule.cpp @@ -1,6 +1,7 @@ #include +#include "Arduino.h" #include "Schedule.h" #include "PolledTimeout.h" #include "interrupts.h" diff --git a/cores/esp8266/Schedule.h b/cores/esp8266/Schedule.h index 50fc88fc8b..e6a0577483 100644 --- a/cores/esp8266/Schedule.h +++ b/cores/esp8266/Schedule.h @@ -1,6 +1,7 @@ #ifndef ESP_SCHEDULE_H #define ESP_SCHEDULE_H +#include #include #define SCHEDULED_FN_MAX_COUNT 32 diff --git a/cores/esp8266/abi.cpp b/cores/esp8266/abi.cpp index 71967e63e5..47ff15c4b0 100644 --- a/cores/esp8266/abi.cpp +++ b/cores/esp8266/abi.cpp @@ -68,5 +68,19 @@ extern "C" void __cxa_guard_abort(__guard* pg) xt_wsr_ps(reinterpret_cast(pg)->ps); } +// Debugging helper, last allocation which returned NULL +extern void *umm_last_fail_alloc_addr; +extern int umm_last_fail_alloc_size; + +void* _malloc4newabi (size_t size) +{ + void* ret = malloc(size); + if (0 != size && 0 == ret) { + umm_last_fail_alloc_addr = __builtin_return_address(0); + umm_last_fail_alloc_size = size; + } + return ret; +} + // TODO: rebuild windows toolchain to make this unnecessary: void* __dso_handle; diff --git a/cores/esp8266/spiffs_api.cpp b/cores/esp8266/spiffs_api.cpp index 833dd3edb0..21e66d698a 100644 --- a/cores/esp8266/spiffs_api.cpp +++ b/cores/esp8266/spiffs_api.cpp @@ -21,6 +21,7 @@ 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 "Arduino.h" #include "spiffs_api.h" using namespace fs; diff --git a/libraries/ArduinoOTA/ArduinoOTA.cpp b/libraries/ArduinoOTA/ArduinoOTA.cpp index 9429518d3f..9d8ae0feaf 100644 --- a/libraries/ArduinoOTA/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/ArduinoOTA.cpp @@ -1,6 +1,7 @@ #ifndef LWIP_OPEN_SRC #define LWIP_OPEN_SRC #endif +#include #include #include #include "ArduinoOTA.h" diff --git a/libraries/ESP8266LLMNR/ESP8266LLMNR.cpp b/libraries/ESP8266LLMNR/ESP8266LLMNR.cpp index ac8582c579..76e3a937b9 100644 --- a/libraries/ESP8266LLMNR/ESP8266LLMNR.cpp +++ b/libraries/ESP8266LLMNR/ESP8266LLMNR.cpp @@ -36,8 +36,8 @@ */ #include -#include #include +#include #include extern "C" { diff --git a/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp b/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp index 6dcf0b384d..8cc3d76b82 100644 --- a/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp +++ b/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp @@ -20,13 +20,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + #include #include #include #include #include #include -#include #include #include "BearSSLHelpers.h" diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.h b/libraries/ESP8266WiFi/src/ESP8266WiFi.h index d26e1db6bd..2874f5584e 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.h @@ -22,6 +22,8 @@ #ifndef WiFi_h #define WiFi_h +#include + #include extern "C" { diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp index 692b214fad..382f7b6b12 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp @@ -22,6 +22,7 @@ */ +#include #include "ESP8266WiFi.h" #include "ESP8266WiFiGeneric.h" #include "ESP8266WiFiAP.h" diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp index 31daf370a0..8769158b09 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp @@ -22,6 +22,8 @@ */ +#include + #include #include #include "ESP8266WiFi.h" diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA-WPS.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA-WPS.cpp index c7a92765be..00e3256191 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA-WPS.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA-WPS.cpp @@ -22,6 +22,7 @@ */ +#include #include "ESP8266WiFi.h" #include "ESP8266WiFiGeneric.h" diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 2d7b5ac46e..a27a278414 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -22,6 +22,8 @@ #define LWIP_INTERNAL +#include + extern "C" { #include "include/wl_definitions.h" diff --git a/libraries/ESP8266WiFi/src/WiFiClient.h b/libraries/ESP8266WiFi/src/WiFiClient.h index 31f6d105a7..15b655c5f1 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.h +++ b/libraries/ESP8266WiFi/src/WiFiClient.h @@ -21,8 +21,8 @@ #ifndef wificlient_h #define wificlient_h -#include #include "Arduino.h" +#include #include "Print.h" #include "Client.h" #include "IPAddress.h" diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp index 62b7f0ab8c..0375f3da3c 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp @@ -22,6 +22,8 @@ #define LWIP_INTERNAL +#include + #include "debug.h" #include "ESP8266WiFi.h" #include "WiFiClientSecure.h" diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp index 5691f1cf5d..4376600b3a 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp @@ -22,6 +22,8 @@ #define LWIP_INTERNAL +#include + #include #include #include diff --git a/libraries/ESP8266WiFi/src/WiFiServer.cpp b/libraries/ESP8266WiFi/src/WiFiServer.cpp index d9d47657df..b229db524a 100644 --- a/libraries/ESP8266WiFi/src/WiFiServer.cpp +++ b/libraries/ESP8266WiFi/src/WiFiServer.cpp @@ -28,6 +28,8 @@ extern "C" { #include "ets_sys.h" } +#include + #include "debug.h" #include "ESP8266WiFi.h" #include "WiFiClient.h" diff --git a/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp index 087c90b4e8..7c42043929 100644 --- a/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp +++ b/libraries/ESP8266WiFi/src/WiFiServerSecureBearSSL.cpp @@ -26,6 +26,8 @@ extern "C" { #include "ets_sys.h" } +#include + #include #include "debug.h" #include "ESP8266WiFi.h" diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.cpp b/libraries/ESP8266WiFi/src/WiFiUdp.cpp index a0a5c1d4e4..c895ba596e 100644 --- a/libraries/ESP8266WiFi/src/WiFiUdp.cpp +++ b/libraries/ESP8266WiFi/src/WiFiUdp.cpp @@ -21,6 +21,8 @@ */ #define LWIP_INTERNAL + +#include #include extern "C" diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.h b/libraries/ESP8266WiFi/src/WiFiUdp.h index a1cf42be10..b07c7fd476 100644 --- a/libraries/ESP8266WiFi/src/WiFiUdp.h +++ b/libraries/ESP8266WiFi/src/WiFiUdp.h @@ -22,9 +22,14 @@ #ifndef WIFIUDP_H #define WIFIUDP_H +#include + +#include + #include #include + #define UDP_TX_PACKET_MAX_SIZE 8192 class UdpContext; diff --git a/libraries/ESP8266mDNS/src/LEAmDNS.h b/libraries/ESP8266mDNS/src/LEAmDNS.h index 3bf16eb10a..dccda3e164 100644 --- a/libraries/ESP8266mDNS/src/LEAmDNS.h +++ b/libraries/ESP8266mDNS/src/LEAmDNS.h @@ -102,7 +102,6 @@ #ifndef MDNS_H #define MDNS_H -#include // for UdpContext.h #include "WiFiUdp.h" #include "lwip/udp.h" #include "debug.h"