Heap addendum to handle changes in NON-OS SDK 3.0.x by mhightower83 · Pull Request #8746 · esp8266/Arduino (original) (raw)

Changes to better support new SDKs v3.0.0-v3.0.5

WPA2 Enterprise connections

References - merged PRs:

The NON-OS SDK 3.0.x has breaking changes to the pvPortMalloc function. They added a new bool argument for selecting a heap.

void *pvPortMalloc (size_t sz, const char *, unsigned, bool);

To avoid breaking the build, I added a new thin wrapper function sdk3_pvPortMalloc to heap.cpp.
Edited new SDK LIBs to call pvPortMalloc's replacement sdk3_pvPortMalloc.

They also added pvPortZallocIram and pvPortCallocIram, which are not a problem to support. Support added to heap.cpp.

Issues with WPA2 Enterprise in new SDKs:

Updated wpa2_eap_patch.cpp and binary patch scripts to handle v3.0.0 through v3.0.5.
Patched SDKs v3.0.0 through v3.0.5

Duplicate Non-32-bit exception handler

Issue: At v3.0.0 and above libmain.a supplies a built-in exception handler (load_non_32_wide_handler) for non-32-bit access. Our non-32-bit access handler (non32xfer_exception_handler) overrides it.

Solution: Add "weak" attribute to symbol load_non_32_wide_handler. Adjust the build to default to the SDK's built-in non-32-bit handler. If there is a need to use our non-32-bit handler, make the selection from the Arduino IDE Tools menu Non-32-Bit Access: "Byte/Word access to IRAM/PROGMEM (very slow)".

With SDKs v3.0.0 and above a "non-32-bit exception handler" is always present.

Edited to describe the current contents of the PR.