SmingHub / Sming

Sming - powerful open source framework simplifying the creation of embedded C++ applications.
https://sming.readthedocs.io
GNU Lesser General Public License v3.0
1.47k stars 348 forks source link

Add sanitizer build options for host #2842

Closed mikee47 closed 3 months ago

mikee47 commented 3 months ago

This PR adds a couple of build variables so host builds can be compiled with the available address sanitisers.

I spent way too much time today trying to track down some odd behaviour with the graphics library virtual screen in MacOS. Since valgrind isn't available, I tried enabling some address sanitisers which I've not used before. Actually seems more effective than valgrind and is supported on both GCC and CLANG (and MacOS). Found the issue immediately.

There are a lot of possible sanitizer options so I've picked some which look most helpful. Also added stack checking. All of this obviously affects build size and runtime speed.

To try this out:

export ENABLE_SANITIZERS=1
make clean components-clean
make flash run

That's it. make list-config | grep SANITIZER will show applicable options.

NB. GCC requires the libasan and libubsan packages.

Bug in MacOS getHostAppDir

Bad len value causes memory corruption, very difficult to track down without valgrind/santizers.

Fix graphics virtual display handling with 64-bit host

Small fix found whilst hunting the above bug, affects all 64-bit builds not just MacOS.