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.
11 lines
264 B
Text
11 lines
264 B
Text
/* This is only included if CONFIG_COMPILER_CXX_RTTI is not set, to
|
|
* move RTTI sections of libstdc++ to an unused non-loadable memory region.
|
|
*/
|
|
|
|
SECTIONS
|
|
{
|
|
.rodata.discard-rtti (NOLOAD):
|
|
{
|
|
*libstdc++.a:(.rodata._ZTI* .rodata._ZTS*)
|
|
} > discard_seg
|
|
}
|