]> granicus.if.org Git - esp-idf/commit
C++: add provisions for optional RTTI support
authorIvan Grokhotkov <ivan@espressif.com>
Thu, 6 Jun 2019 08:53:26 +0000 (16:53 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Sun, 13 Oct 2019 12:46:44 +0000 (14:46 +0200)
commit499d087c91141834bc41a282a592ba1d61f7b2c8
tree50f115fff24d9b390b515ebc0c56ff09922eddf0
parent25c55405d410791d013d7da7fab29ea4c0db54f0
C++: add provisions for optional RTTI support

Ref. https://github.com/espressif/esp-idf/issues/1684

This change allows RTTI to be enabled in menuconfig. For full RTTI
support, libstdc++.a in the toolchain should be built without
-fno-rtti, as it is done now.

Generally if libstdc++.a is built with RTTI, applications which do not
use RTTI (and build with -fno-rtti) could still include typeinfo
structures referenced from STL classes’ vtables. This change works
around this, by moving all typeinfo structures from libstdc++.a into
a non-loadable section, placed into a non-existent memory region
starting at address 0. This can be done because when the application
is compiled with -fno-rtti, typeinfo structures are not used at run
time. This way, typeinfo structures do not contribute to the
application binary size.

If the application is build with RTTI support, typeinfo structures are
linked into the application .rodata section as usual.

Note that this commit does not actually enable RTTI support.
The respective Kconfig option is hidden, and will be made visible when
the toolchain is updated.
CMakeLists.txt
Kconfig
components/esp32/CMakeLists.txt
components/esp32/component.mk
components/esp32/ld/esp32.discard-rtti.ld [new file with mode: 0644]
components/esp32/ld/esp32.ld
make/project.mk
tools/cmake/build.cmake