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:
- Fix double-free when connecting to WPA2-Enterprise networks #8529
- Patch eap.o memory leak #8566 - these occurred with connect/disconnect with WPA-Enterprise
- Added NONOS SDK 3.0.0 ~ 3.0.5 (again) #8736 (comment)
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:
- v3.0.0 and v3.0.1 - have the same memory leak and duplicate free bugs from before
- v3.0.2 through v3.0.5 - have the same memory leak; however, no duplicate free crash.
- memory leak can be seen by cycling through setup, connect, disconnect, and clear setup - repeatedly.
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.