Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Large stack usage in core and MDNS libraries #7398

Open
earlephilhower opened this issue Jun 22, 2020 · 6 comments
Open

Large stack usage in core and MDNS libraries #7398

earlephilhower opened this issue Jun 22, 2020 · 6 comments

Comments

@earlephilhower
Copy link
Collaborator

I've been playing locally with GCC10 and the -Wstack-usage= option which emits a compile-time warning when stacks are larger than the size given. There's only 4K total stack to play with so I set the warning limit to 300 bytes.

This isn't an exhaustive list (need to do a local CI and aggregate warnings), but I'm seeing very high use in the flash_hal and MDNS:

Flash_write() has a 512 byte buffer allocated on the stack in the case of an unaligned write, which seems pretty massive and ripe for reduction:

C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\flash_hal.cpp: In function 'int32_t flash_hal_write(uint32_t, uint32_t, const uint8_t*)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\flash_hal.cpp:102:9: warning: stack usage is 576 bytes [-Wstack-usage=]
  102 | int32_t flash_hal_write(uint32_t addr, uint32_t size, const uint8_t *src) {
      |         ^~~~~~~~~~~~~~~

MDNS (old and new) have stack usages up to almost 700 bytes which might explain some issues seen at runtime.

C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp: In member function 'uint8_t esp8266::MDNSImplementation::MDNSResponder::_ZNK7esp826618MDNSImplementation13MDNSResponder17_replyMaskForHostERKNS1_16stcMDNS_RRHeaderEPb$part$0(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRHeader&, bool*) const':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp:1991:9: warning: stack usage is 304 bytes [-Wstack-usage=]
 1991 | uint8_t MDNSResponder::_replyMaskForHost(const MDNSResponder::stcMDNS_RRHeader& p_RRHeader,
      |         ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp: In member function 'uint8_t esp8266::MDNSImplementation::MDNSResponder::_ZNK7esp826618MDNSImplementation13MDNSResponder20_replyMaskForServiceERKNS1_16stcMDNS_RRHeaderERKNS1_14stcMDNSServiceEPb$part$0(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRHeader&, const esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, bool*) const':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp:2069:9: warning: stack usage is 576 bytes [-Wstack-usage=]
 2069 | uint8_t MDNSResponder::_replyMaskForService(const MDNSResponder::stcMDNS_RRHeader& p_RRHeader,
      |         ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_parseQuery(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_MsgHeader&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp:179:6: warning: stack usage is 608 bytes [-Wstack-usage=]
  179 | bool MDNSResponder::_parseQuery(const MDNSResponder::stcMDNS_MsgHeader& p_MsgHeader)
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_ZN7esp826618MDNSImplementation13MDNSResponder15_processAnswersEPKNS1_16stcMDNS_RRAnswerE$part$0(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRAnswer*)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp:749:6: warning: stack usage is 320 bytes [-Wstack-usage=]
  749 | bool MDNSResponder::_processAnswers(const MDNSResponder::stcMDNS_RRAnswer* p_pAnswers)
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_parseResponse(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_MsgHeader&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Control.cpp:628:6: warning: stack usage is 320 bytes [-Wstack-usage=]
  628 | bool MDNSResponder::_parseResponse(const MDNSResponder::stcMDNS_MsgHeader& p_MsgHeader)
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\ESP8266mDNS_Legacy.cpp: In member function 'void Legacy_MDNSResponder::MDNSResponder::_parsePacket()':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\ESP8266mDNS_Legacy.cpp:567:6: warning: stack usage is 688 bytes [-Wstack-usage=]
  567 | void MDNSResponder::_parsePacket()
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSHostDomain(const char*, bool, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp:1367:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1367 | bool MDNSResponder::_writeMDNSHostDomain(const char* p_pcHostname,
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSServiceDomain(const esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, bool, bool, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp:1410:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1410 | bool MDNSResponder::_writeMDNSServiceDomain(const MDNSResponder::stcMDNSService& p_Service,
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSAnswer_PTR_IP4(IPAddress, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp:1517:6: warning: stack usage is 560 bytes [-Wstack-usage=]
 1517 | bool MDNSResponder::_writeMDNSAnswer_PTR_IP4(IPAddress p_IPAddress,
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSAnswer_PTR_TYPE(esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp:1550:6: warning: stack usage is 544 bytes [-Wstack-usage=]
 1550 | bool MDNSResponder::_writeMDNSAnswer_PTR_TYPE(MDNSResponder::stcMDNSService& p_rService,
      |      ^~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSAnswer_SRV(esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266mDNS\src\LEAmDNS_Transfer.cpp:1725:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1725 | bool MDNSResponder::_writeMDNSAnswer_SRV(MDNSResponder::stcMDNSService& p_rService,
      |      ^~~~~~~~~~~~~

Crypto.c has some large stacks (which might be unavoidable given the algorithm, but we may want to consider moving it to heap or refactoring the code:

C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Crypto.cpp: In function 'void* {anonymous}::createBearsslHmac(const br_hash_class*, const void*, size_t, const void*, size_t, void*, size_t)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Crypto.cpp:67:7: warning: stack usage is 432 bytes [-Wstack-usage=]
   67 | void *createBearsslHmac(const br_hash_class *hashType, const void *data, const size_t dataLength, const void *hashKey, const size_t hashKeyLength, void *resultArray, const size_t outputLength)
      |       ^~~~~~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Crypto.cpp: In function 'void* {anonymous}::createBearsslHmacCT(const br_hash_class*, const void*, size_t, const void*, size_t, void*, size_t)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Crypto.cpp:110:7: warning: stack usage is 464 bytes [-Wstack-usage=]
  110 | void *createBearsslHmacCT(const br_hash_class *hashType, const void *data, const size_t dataLength, const void *hashKey, const size_t hashKeyLength, void *resultArray, const size_t outputLength)
      |       ^~~~~~~~~~~~~~~~~~~
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Crypto.cpp: In function 'void experimental::crypto::chacha20Poly1305Kernel(int, void*, size_t, const void*, const void*, size_t, const void*, void*, const void*, size_t)':
C:\Users\earle\Documents\Arduino\hardware\esp8266com\esp8266\cores\esp8266\Crypto.cpp:507:6: warning: stack usage is 464 bytes [-Wstack-usage=]
  507 | void chacha20Poly1305Kernel(const int encrypt, void *data, const size_t dataLength, const void *key, const void *keySalt, const size_t keySaltLength,
      |      ^~~~~~~~~~~~~~~~~~~~~~
@TD-er
Copy link
Contributor

TD-er commented Jun 22, 2020

That's a really nice feature.
Just tested it here and I do indeed see some warnings in my own code too (gosh, surprise...)

I just wonder, what does the parameter exactly state, as I cannot find the documentation on it right now.
It looks like it describes "stack usage". (and not stack free)

Most of the warnings I get are these:

warning: stack usage might be unbounded [-Wstack-usage=]

Is it right to interpret these as the stack increase when entering the function?
After all, the compiler cannot predict the total stack usage at run time, or at least not for all code (e.g. recursive calls or array sizes determined at runtime)

@earlephilhower
Copy link
Collaborator Author

earlephilhower commented Jun 22, 2020

Those could be where you have an explicit alloca() in the code, but I think it's more commonly something like:

void fn(int bufsize) {
   char buf[bufSize];
   ....
}

There are other warning options (stack-frame size) which I think ignore this kind of setup and only look for static size assignments, but I did not dig into it.

@TD-er
Copy link
Contributor

TD-er commented Jun 22, 2020

Well I've been playing a bit more with this flag and I think it is a very good tool for the problems I'm seeing.
So thanks for mentioning it :)

This has been a good month.

  • Working PVS studio
  • Having a working stack decoder (in the serial monitor)

And now the compiler telling me where I may run into stack overflows.

I can only dream of what can be next...

@d-a-v
Copy link
Collaborator

d-a-v commented Jun 22, 2020

What stack decoder are you using ?

@TD-er
Copy link
Contributor

TD-er commented Jun 22, 2020

@d-a-v
In the PlatformIO environment I use this:

monitor_filters           = esp8266_exception_decoder

For this you need to have platform = espressif8266@2.5.2

@earlephilhower
Copy link
Collaborator Author

Latest master report:

In file included from /home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/ESP8266WebServer.h:306,
                 from /home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/examples/FSBrowser/FSBrowser.ino:42:
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/Parsing-impl.h: In member function 'bool esp8266webserver::ESP8266WebServerTemplate<ServerType>::_parseForm(esp8266webserver::ESP8266WebServerTemplate<ServerType>::ClientType&, const String&, uint32_t) [with ServerType = WiFiServer]':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WebServer/src/Parsing-impl.h:361:6: warning: stack usage might be unbounded [-Wstack-usage=]
  361 | bool ESP8266WebServerTemplate<ServerType>::_parseForm(ClientType& client, const String& boundary, uint32_t len){
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp: In member function 'bool ESP8266WiFiAPClass::softAP(const char*, const char*, int, int, int)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp:94:6: warning: stack usage is 304 bytes [-Wstack-usage=]
   94 | bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection) {
      |      ^~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp: In member function 'wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp:278:13: warning: stack usage might be unbounded [-Wstack-usage=]
  278 | wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
      |             ^~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp: In function 'bool BearSSL::SigningVerifier_verify(BearSSL::PublicKey*, UpdaterHashClass*, const void*, uint32_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/BearSSLHelpers.cpp:877:17: warning: stack usage might be unbounded [-Wstack-usage=]
  877 | extern "C" bool SigningVerifier_verify(PublicKey *_pubKey, UpdaterHashClass *hash, const void *signature, uint32_t signatureLen) {
      |                 ^~~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp: In function 'void BearSSL::br_ssl_client_base_init(br_ssl_client_context*, const uint16_t*, int)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp:918:15: warning: stack usage might be unbounded [-Wstack-usage=]
  918 |   static void br_ssl_client_base_init(br_ssl_client_context *cc, const uint16_t *cipher_list, int cipher_cnt) {
      |               ^~~~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp: In function 'void BearSSL::br_ssl_server_base_init(br_ssl_server_context*, const uint16_t*, int)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp:944:15: warning: stack usage might be unbounded [-Wstack-usage=]
  944 |   static void br_ssl_server_base_init(br_ssl_server_context *cc, const uint16_t *cipher_list, int cipher_cnt) {
      |               ^~~~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp: In member function 'size_t BearSSL::WiFiClientSecure::write(Stream&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp:309:8: warning: stack usage is 320 bytes [-Wstack-usage=]
  309 | size_t WiFiClientSecure::write(Stream& stream) {
      |        ^~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_readRRAnswer(esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRAnswer*&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp:459:6: warning: stack usage is 320 bytes [-Wstack-usage=]
  459 | bool MDNSResponder::_readRRAnswer(MDNSResponder::stcMDNS_RRAnswer*& p_rpRRAnswer)
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSHostDomain(const char*, bool, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp:1376:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1376 | bool MDNSResponder::_writeMDNSHostDomain(const char* p_pcHostname,
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSServiceDomain(const esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, bool, bool, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp:1419:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1419 | bool MDNSResponder::_writeMDNSServiceDomain(const MDNSResponder::stcMDNSService& p_Service,
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp: In member function 'uint8_t esp8266::MDNSImplementation::MDNSResponder::_ZNK7esp826618MDNSImplementation13MDNSResponder17_replyMaskForHostERKNS1_16stcMDNS_RRHeaderEPb$part$0(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRHeader&, bool*) const':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp:1983:9: warning: stack usage is 320 bytes [-Wstack-usage=]
 1983 | uint8_t MDNSResponder::_replyMaskForHost(const MDNSResponder::stcMDNS_RRHeader& p_RRHeader,
      |         ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSAnswer_PTR_IP4(IPAddress, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp:1526:6: warning: stack usage is 576 bytes [-Wstack-usage=]
 1526 | bool MDNSResponder::_writeMDNSAnswer_PTR_IP4(IPAddress p_IPAddress,
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp: In member function 'uint8_t esp8266::MDNSImplementation::MDNSResponder::_ZNK7esp826618MDNSImplementation13MDNSResponder20_replyMaskForServiceERKNS1_16stcMDNS_RRHeaderERKNS1_14stcMDNSServiceEPb$part$0(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRHeader&, const esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, bool*) const':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp:2067:9: warning: stack usage is 576 bytes [-Wstack-usage=]
 2067 | uint8_t MDNSResponder::_replyMaskForService(const MDNSResponder::stcMDNS_RRHeader& p_RRHeader,
      |         ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSAnswer_PTR_TYPE(esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp:1559:6: warning: stack usage is 560 bytes [-Wstack-usage=]
 1559 | bool MDNSResponder::_writeMDNSAnswer_PTR_TYPE(MDNSResponder::stcMDNSService& p_rService,
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_readRRAnswer(esp8266::experimental::clsLEAMDNSHost::clsRRAnswer*&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:699:6: warning: stack usage is 320 bytes [-Wstack-usage=]
  699 | bool clsLEAMDNSHost::_readRRAnswer(clsLEAMDNSHost::clsRRAnswer*& p_rpRRAnswer)
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp: In member function 'uint32_t esp8266::experimental::clsLEAMDNSHost::_ZNK7esp826612experimental14clsLEAMDNSHost17_replyMaskForHostEP5netifRKNS1_11clsRRHeaderEPb$part$0(netif*, const esp8266::experimental::clsLEAMDNSHost::clsRRHeader&, bool*) const':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp:2071:10: warning: stack usage is 336 bytes [-Wstack-usage=]
 2071 | uint32_t clsLEAMDNSHost::_replyMaskForHost(netif* pNetIf,
      |          ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_writeMDNSAnswer_SRV(esp8266::MDNSImplementation::MDNSResponder::stcMDNSService&, esp8266::MDNSImplementation::MDNSResponder::stcMDNSSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Transfer.cpp:1734:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1734 | bool MDNSResponder::_writeMDNSAnswer_SRV(MDNSResponder::stcMDNSService& p_rService,
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp: In member function 'uint32_t esp8266::experimental::clsLEAMDNSHost::_ZN7esp826612experimental14clsLEAMDNSHost20_replyMaskForServiceERKNS1_11clsRRHeaderERNS1_10clsServiceEPb$part$0(const esp8266::experimental::clsLEAMDNSHost::clsRRHeader&, esp8266::experimental::clsLEAMDNSHost::clsService&, bool*)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp:2155:10: warning: stack usage is 592 bytes [-Wstack-usage=]
 2155 | uint32_t clsLEAMDNSHost::_replyMaskForService(const clsLEAMDNSHost::clsRRHeader& p_RRHeader,
      |          ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_writeMDNSHostDomain(const char*, bool, uint16_t, esp8266::experimental::clsLEAMDNSHost::clsSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:1650:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1650 | bool clsLEAMDNSHost::_writeMDNSHostDomain(const char* p_pcHostName,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_writeMDNSServiceDomain(const esp8266::experimental::clsLEAMDNSHost::clsService&, bool, bool, uint16_t, esp8266::experimental::clsLEAMDNSHost::clsSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:1690:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 1690 | bool clsLEAMDNSHost::_writeMDNSServiceDomain(const clsLEAMDNSHost::clsService& p_Service,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_writeMDNSAnswer_PTR_IPv4(IPAddress, esp8266::experimental::clsLEAMDNSHost::clsSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:1811:6: warning: stack usage is 576 bytes [-Wstack-usage=]
 1811 | bool clsLEAMDNSHost::_writeMDNSAnswer_PTR_IPv4(IPAddress p_IPAddress,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_writeMDNSAnswer_PTR_TYPE(esp8266::experimental::clsLEAMDNSHost::clsService&, esp8266::experimental::clsLEAMDNSHost::clsSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:1856:6: warning: stack usage is 576 bytes [-Wstack-usage=]
 1856 | bool clsLEAMDNSHost::_writeMDNSAnswer_PTR_TYPE(clsLEAMDNSHost::clsService& p_rService,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_ZN7esp826612experimental14clsLEAMDNSHost15_processAnswersEP5netifPKNS1_11clsRRAnswerE$part$0(netif*, const esp8266::experimental::clsLEAMDNSHost::clsRRAnswer*)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp:730:6: warning: stack usage is 352 bytes [-Wstack-usage=]
  730 | bool clsLEAMDNSHost::_processAnswers(netif* pNetIf, const clsLEAMDNSHost::clsRRAnswer* p_pAnswers)
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_parseResponse(netif*, const esp8266::experimental::clsLEAMDNSHost::clsMsgHeader&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp:612:6: warning: stack usage is 336 bytes [-Wstack-usage=]
  612 | bool clsLEAMDNSHost::_parseResponse(netif* pNetIf, const clsLEAMDNSHost::clsMsgHeader& p_MsgHeader)
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_writeMDNSAnswer_SRV(esp8266::experimental::clsLEAMDNSHost::clsService&, esp8266::experimental::clsLEAMDNSHost::clsSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:2110:6: warning: stack usage is 320 bytes [-Wstack-usage=]
 2110 | bool clsLEAMDNSHost::_writeMDNSAnswer_SRV(clsLEAMDNSHost::clsService& p_rService,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_parseQuery(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_MsgHeader&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp:175:6: warning: stack usage is 624 bytes [-Wstack-usage=]
  175 | bool MDNSResponder::_parseQuery(const MDNSResponder::stcMDNS_MsgHeader& p_MsgHeader)
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_writeMDNSAnswer_NSEC_PTR_IPv4(IPAddress, esp8266::experimental::clsLEAMDNSHost::clsSendParameter&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Transfer.cpp:2291:6: warning: stack usage is 336 bytes [-Wstack-usage=]
 2291 | bool clsLEAMDNSHost::_writeMDNSAnswer_NSEC_PTR_IPv4(IPAddress p_IPAddress,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_ZN7esp826618MDNSImplementation13MDNSResponder15_processAnswersEPKNS1_16stcMDNS_RRAnswerE$part$0(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_RRAnswer*)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp:743:6: warning: stack usage is 320 bytes [-Wstack-usage=]
  743 | bool MDNSResponder::_processAnswers(const MDNSResponder::stcMDNS_RRAnswer* p_pAnswers)
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp: In member function 'bool esp8266::MDNSImplementation::MDNSResponder::_parseResponse(const esp8266::MDNSImplementation::MDNSResponder::stcMDNS_MsgHeader&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS_Control.cpp:622:6: warning: stack usage is 336 bytes [-Wstack-usage=]
  622 | bool MDNSResponder::_parseResponse(const MDNSResponder::stcMDNS_MsgHeader& p_MsgHeader)
      |      ^~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp: In member function 'bool esp8266::experimental::clsLEAMDNSHost::_parseQuery(netif*, const esp8266::experimental::clsLEAMDNSHost::clsMsgHeader&)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host_Control.cpp:123:6: warning: stack usage is 656 bytes [-Wstack-usage=]
  123 | bool clsLEAMDNSHost::_parseQuery(netif* pNetIf,
      |      ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host.cpp: In member function 'esp8266::experimental::clsLEAMDNSHost::clsQuery* esp8266::experimental::clsLEAMDNSHost::installHostQuery(const char*, esp8266::experimental::clsLEAMDNSHost::clsQuery::QueryCallbackAnswerFn)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host.cpp:677:27: warning: stack usage is 304 bytes [-Wstack-usage=]
  677 | clsLEAMDNSHost::clsQuery* clsLEAMDNSHost::installHostQuery(const char* p_pcHostName,
      |                           ^~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host.cpp: In member function 'esp8266::experimental::clsLEAMDNSHost::clsQuery* esp8266::experimental::clsLEAMDNSHost::installHostQuery(const char*, esp8266::experimental::clsLEAMDNSHost::clsQuery::QueryCallbackAccessorFn)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/ESP8266mDNS/src/LEAmDNS2Host.cpp:697:27: warning: stack usage is 304 bytes [-Wstack-usage=]
  697 | clsLEAMDNSHost::clsQuery* clsLEAMDNSHost::installHostQuery(const char* p_pcHostName,
      |                           ^~~~~~~~~~~~~~
In file included from /home/earle/Arduino/hardware/esp8266com/esp8266/libraries/LittleFS/src/LittleFS.cpp:27:
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/LittleFS/src/LittleFS.h: In member function 'uint32_t littlefs_impl::LittleFSDirImpl::_getAttr4(char)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/LittleFS/src/LittleFS.h:602:14: warning: stack usage might be unbounded [-Wstack-usage=]
  602 |     uint32_t _getAttr4(char attr) {
      |              ^~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/LittleFS/src/LittleFS.h: In member function 'virtual fs::FileImplPtr littlefs_impl::LittleFSDirImpl::openFile(fs::OpenMode, fs::AccessMode)':
/home/earle/Arduino/hardware/esp8266com/esp8266/libraries/LittleFS/src/LittleFS.h:531:17: warning: stack usage might be unbounded [-Wstack-usage=]
  531 |     FileImplPtr openFile(OpenMode openMode, AccessMode accessMode) override {
      |                 ^~~~~~~~
In file included from /home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/umm_malloc/umm_malloc.cpp:138:
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/umm_malloc/umm_local.c: In function 'int umm_info_safe_printf_P(const char*, ...)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/umm_malloc/umm_local.c:203:23: warning: stack usage might be unbounded [-Wstack-usage=]
  203 | int ICACHE_FLASH_ATTR umm_info_safe_printf_P(const char *fmt, ...) {
      |                       ^~~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_main.cpp: In function 'void app_entry_redefinable()':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/core_esp8266_main.cpp:307:17: warning: stack usage is 4160 bytes [-Wstack-usage=]
  307 | extern "C" void app_entry_redefinable(void)
      |                 ^~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp: In function 'void* {anonymous}::createBearsslHmac(const br_hash_class*, const void*, size_t, const void*, size_t, void*, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp:67:7: warning: stack usage is 464 bytes [-Wstack-usage=]
   67 | void *createBearsslHmac(const br_hash_class *hashType, const void *data, const size_t dataLength, const void *hashKey, const size_t hashKeyLength, void *resultArray, const size_t outputLength)
      |       ^~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp: In function 'void* {anonymous}::createBearsslHmacCT(const br_hash_class*, const void*, size_t, const void*, size_t, void*, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp:111:7: warning: stack usage is 480 bytes [-Wstack-usage=]
  111 | void *createBearsslHmacCT(const br_hash_class *hashType, const void *data, const size_t dataLength, const void *hashKey, const size_t hashKeyLength, void *resultArray, const size_t outputLength)
      |       ^~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp: In function 'String {anonymous}::createBearsslHmac(const br_hash_class*, uint8_t, const String&, const void*, size_t, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp:101:8: warning: stack usage might be unbounded [-Wstack-usage=]
  101 | String createBearsslHmac(const br_hash_class *hashType, const uint8_t hashTypeNaturalLength, const String &message, const void *hashKey, const size_t hashKeyLength, const size_t hmacLength)
      |        ^~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp: In function 'String {anonymous}::createBearsslHmacCT(const br_hash_class*, uint8_t, const String&, const void*, size_t, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp:154:8: warning: stack usage might be unbounded [-Wstack-usage=]
  154 | String createBearsslHmacCT(const br_hash_class *hashType, const uint8_t hashTypeNaturalLength, const String &message, const void *hashKey, const size_t hashKeyLength, const size_t hmacLength)
      |        ^~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/FS.cpp: In member function 'virtual String fs::File::readString()':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/FS.cpp:168:8: warning: stack usage is 304 bytes [-Wstack-usage=]
  168 | String File::readString()
      |        ^~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Esp.cpp: In member function 'size_t EspClass::flashWriteUnalignedMemory(uint32_t, const uint8_t*, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Esp.cpp:744:8: warning: stack usage is 304 bytes [-Wstack-usage=]
  744 | size_t EspClass::flashWriteUnalignedMemory(uint32_t address, const uint8_t *data, size_t size) {
      |        ^~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Esp.cpp: In member function 'bool EspClass::flashRead(uint32_t, uint8_t*, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Esp.cpp:899:6: warning: stack usage is 304 bytes [-Wstack-usage=]
  899 | bool EspClass::flashRead(uint32_t address, uint8_t *data, size_t size) {
      |      ^~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp: In function 'void experimental::crypto::chacha20Poly1305Kernel(int, void*, size_t, const void*, const void*, size_t, const void*, void*, const void*, size_t)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Crypto.cpp:509:6: warning: stack usage is 464 bytes [-Wstack-usage=]
  509 | void chacha20Poly1305Kernel(const int encrypt, void *data, const size_t dataLength, const void *key, const void *keySalt, const size_t keySaltLength,
      |      ^~~~~~~~~~~~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Updater.cpp: In member function 'bool UpdaterClass::end(bool)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/Updater.cpp:197:6: warning: stack usage is 320 bytes [-Wstack-usage=]
  197 | bool UpdaterClass::end(bool evenIfRemaining){
      |      ^~~~~~~~~~~~
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/time.cpp: In function 'void setTZ(const char*)':
/home/earle/Arduino/hardware/esp8266com/esp8266/cores/esp8266/time.cpp:187:6: warning: stack usage might be unbounded [-Wstack-usage=]
  187 | void setTZ(const char* tz){
      |      ^~~~~

@d-a-v d-a-v modified the milestones: 3.0.0, 3.0.1 Mar 31, 2021
@d-a-v d-a-v modified the milestones: 3.0.1, 3.1 Jun 16, 2021
@d-a-v d-a-v modified the milestones: 3.1, 4.0.0 Jan 5, 2023
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

3 participants