diff --git a/components/cxx/CMakeLists.txt b/components/cxx/CMakeLists.txt index ff2d0e4389..852c4c884d 100644 --- a/components/cxx/CMakeLists.txt +++ b/components/cxx/CMakeLists.txt @@ -15,3 +15,7 @@ target_link_libraries(${COMPONENT_LIB} PUBLIC stdcpp_pthread) if(NOT CONFIG_COMPILER_CXX_EXCEPTIONS) target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __cxx_fatal_exception") endif() + +if(NOT CONFIG_COMPILER_CXX_RTTI) + target_link_libraries(${COMPONENT_LIB} PUBLIC -fno-rtti) +endif() diff --git a/components/esp32/CMakeLists.txt b/components/esp32/CMakeLists.txt index 605a687e6f..67418c7d12 100644 --- a/components/esp32/CMakeLists.txt +++ b/components/esp32/CMakeLists.txt @@ -62,11 +62,6 @@ else() target_linker_script(${COMPONENT_LIB} INTERFACE "ld/esp32.extram.bss.ld") endif() - if(NOT CONFIG_COMPILER_CXX_RTTI) - # This has to be linked before esp32.project.ld - target_linker_script(${COMPONENT_LIB} INTERFACE "ld/esp32.discard-rtti.ld") - endif() - # Process the template file through the linker script generation mechanism, and use the output for linking the # final binary target_linker_script(${COMPONENT_LIB} INTERFACE "${CMAKE_CURRENT_LIST_DIR}/ld/esp32.project.ld.in" diff --git a/components/esp32/component.mk b/components/esp32/component.mk index 836f242e20..8f999b26d6 100644 --- a/components/esp32/component.mk +++ b/components/esp32/component.mk @@ -5,23 +5,18 @@ COMPONENT_SRCDIRS := . ifdef CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY - # This linker script must come before esp32.project.ld - LINKER_SCRIPTS += esp32.extram.bss.ld + # This linker script must come before esp32.project.ld + LINKER_SCRIPTS += esp32.extram.bss.ld endif -ifndef CONFIG_COMPILER_CXX_RTTI - # This linker script must come before esp32.project.ld - LINKER_SCRIPTS += esp32.discard-rtti.ld -endif - -# Linker scripts used to link the final application. -# Warning: These linker scripts are only used when the normal app is compiled; the bootloader -# specifies its own scripts. +#Linker scripts used to link the final application. +#Warning: These linker scripts are only used when the normal app is compiled; the bootloader +#specifies its own scripts. LINKER_SCRIPTS += $(COMPONENT_BUILD_DIR)/esp32.project.ld esp32.peripherals.ld -# ld_include_panic_highint_hdl is added as an undefined symbol because otherwise the -# linker will ignore panic_highint_hdl.S as it has no other files depending on any -# symbols in it. +#ld_include_panic_highint_hdl is added as an undefined symbol because otherwise the +#linker will ignore panic_highint_hdl.S as it has no other files depending on any +#symbols in it. COMPONENT_ADD_LDFLAGS += -L $(COMPONENT_PATH)/ld \ -T esp32_out.ld \ -u ld_include_panic_highint_hdl \ diff --git a/components/esp32/ld/esp32.discard-rtti.ld b/components/esp32/ld/esp32.discard-rtti.ld deleted file mode 100644 index f9fdff9947..0000000000 --- a/components/esp32/ld/esp32.discard-rtti.ld +++ /dev/null @@ -1,11 +0,0 @@ -/* 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 -} diff --git a/components/esp32/ld/esp32.ld b/components/esp32/ld/esp32.ld index 167404ed3c..7ecc948303 100644 --- a/components/esp32/ld/esp32.ld +++ b/components/esp32/ld/esp32.ld @@ -100,11 +100,6 @@ MEMORY /* external memory ,including data and text */ extern_ram_seg(RWX) : org = 0x3F800000, len = 0x400000 - - /* This is not a memory range which can really be accessed; we use it as a "bitbucket" - where non-loadable sections, which aren't used at run time, can be discarded. - */ - discard_seg (R) : org = 0x00000000, len = 0x10000000 } #if defined(CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE) diff --git a/make/project.mk b/make/project.mk index 61e80ac068..93ed7a38fd 100644 --- a/make/project.mk +++ b/make/project.mk @@ -484,6 +484,7 @@ ifdef CONFIG_COMPILER_CXX_RTTI CXXFLAGS += -frtti else CXXFLAGS += -fno-rtti +LDFLAGS += -fno-rtti endif ARFLAGS := cru