diff --git a/CMakeLists.txt b/CMakeLists.txt index 64d222f45ab7f..d058637a92b95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -516,6 +516,20 @@ if(EXISTS ${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/cmake/elf.cmake) include(${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/cmake/elf.cmake) endif() +# The default registers each static object's destructor with __cxa_atexit(dtor, +# obj, &__dso_handle), and __dso_handle comes from crtbegin, which a module does +# not link. Turning it off also puts the destructors in .fini_array, which is +# where the loader looks for them when the module is unloaded. +# +# GCC and Clang alone take the option, which is why the architectures built by +# another compiler do not carry it in their Toolchain.defs either. ARMClang +# reports ARMClang, so it keeps it. The generator expression keeps the option +# off the C compiles, which it is not valid for. + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + nuttx_elf_compile_options($<$:-fno-use-cxa-atexit>) +endif() + include(platform) if(CONFIG_ARCH_TOOLCHAIN_TASKING) diff --git a/arch/arm/src/common/Toolchain.defs b/arch/arm/src/common/Toolchain.defs index 734762fbb30fc..155ef3f3d7ce3 100644 --- a/arch/arm/src/common/Toolchain.defs +++ b/arch/arm/src/common/Toolchain.defs @@ -633,6 +633,10 @@ CELFFLAGS = $(filter-out --fixed-r9,$(CFLAGS)) -fvisibility=hidden \ CXXELFFLAGS = $(filter-out --fixed-r9,$(CXXFLAGS)) -fvisibility=hidden \ -mlong-calls +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + ifeq ($(CONFIG_PIC),y) # ARCHCFLAGS, not CFLAGS: board Make.defs reassign CFLAGS with ':=' # after including this file, which would discard the flag. diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs index c01ce0d74864a..3fc5950552a7f 100644 --- a/arch/arm64/src/Toolchain.defs +++ b/arch/arm64/src/Toolchain.defs @@ -292,6 +292,10 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start ifneq ($(CONFIG_BUILD_KERNEL),y) # Flat build and protected elf entry point use crt0, diff --git a/arch/avr/src/avr/Toolchain.defs b/arch/avr/src/avr/Toolchain.defs index fc74397c170b9..62adab911497a 100644 --- a/arch/avr/src/avr/Toolchain.defs +++ b/arch/avr/src/avr/Toolchain.defs @@ -219,5 +219,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/avr/src/avr32/Toolchain.defs b/arch/avr/src/avr32/Toolchain.defs index de75445721b1b..a6c219453c128 100644 --- a/arch/avr/src/avr32/Toolchain.defs +++ b/arch/avr/src/avr32/Toolchain.defs @@ -115,5 +115,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/mips/src/mips32/Toolchain.defs b/arch/mips/src/mips32/Toolchain.defs index 5b09c374a1e45..4c1f0e325d7e2 100644 --- a/arch/mips/src/mips32/Toolchain.defs +++ b/arch/mips/src/mips32/Toolchain.defs @@ -332,5 +332,9 @@ LDMODULEFLAGS = -EL -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/misoc/src/lm32/Toolchain.defs b/arch/misoc/src/lm32/Toolchain.defs index a0d5b368cd3e1..431f901444e69 100644 --- a/arch/misoc/src/lm32/Toolchain.defs +++ b/arch/misoc/src/lm32/Toolchain.defs @@ -146,5 +146,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/misoc/src/minerva/Toolchain.defs b/arch/misoc/src/minerva/Toolchain.defs index b4daf29b33067..12d2e3afc4af6 100644 --- a/arch/misoc/src/minerva/Toolchain.defs +++ b/arch/misoc/src/minerva/Toolchain.defs @@ -94,5 +94,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/or1k/src/mor1kx/Toolchain.defs b/arch/or1k/src/mor1kx/Toolchain.defs index ee5d116e2bf68..c03d3234662fc 100644 --- a/arch/or1k/src/mor1kx/Toolchain.defs +++ b/arch/or1k/src/mor1kx/Toolchain.defs @@ -132,5 +132,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs index 084bb3275822c..f1262238e1176 100644 --- a/arch/risc-v/src/common/Toolchain.defs +++ b/arch/risc-v/src/common/Toolchain.defs @@ -449,6 +449,10 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -e _start ifeq ($(CONFIG_BINFMT_ELF_RELOCATABLE),y) diff --git a/arch/sparc/src/sparc_v8/Toolchain.defs b/arch/sparc/src/sparc_v8/Toolchain.defs index 9ec5766024247..03bf6d8e0c649 100644 --- a/arch/sparc/src/sparc_v8/Toolchain.defs +++ b/arch/sparc/src/sparc_v8/Toolchain.defs @@ -137,5 +137,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/x86/src/common/Toolchain.defs b/arch/x86/src/common/Toolchain.defs index 92d31c0066229..0c6bf27dde618 100644 --- a/arch/x86/src/common/Toolchain.defs +++ b/arch/x86/src/common/Toolchain.defs @@ -106,5 +106,9 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/arch/x86_64/src/common/Toolchain.defs b/arch/x86_64/src/common/Toolchain.defs index 2cff921aab593..d82500482ee3b 100644 --- a/arch/x86_64/src/common/Toolchain.defs +++ b/arch/x86_64/src/common/Toolchain.defs @@ -286,6 +286,10 @@ endif CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start ifneq ($(CONFIG_BUILD_KERNEL),y) # Flat build and protected elf entry point use crt0, diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs index c00c80633ddb0..d0f290e47f764 100644 --- a/arch/xtensa/src/lx6/Toolchain.defs +++ b/arch/xtensa/src/lx6/Toolchain.defs @@ -236,6 +236,10 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) ifneq ($(CONFIG_BUILD_KERNEL),y) diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs index cd4e593230cff..8561a5a883bd3 100644 --- a/arch/xtensa/src/lx7/Toolchain.defs +++ b/arch/xtensa/src/lx7/Toolchain.defs @@ -240,6 +240,10 @@ LDMODULEFLAGS = -r -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -fvisibility=hidden -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e _start LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)elf$(DELIM)gnu-elf.ld) ifneq ($(CONFIG_BUILD_KERNEL),y) diff --git a/boards/arm/sama5/sama5d3-xplained/scripts/Make.defs b/boards/arm/sama5/sama5d3-xplained/scripts/Make.defs index 26c92eb5b26de..fa6c2c2ca83bc 100644 --- a/boards/arm/sama5/sama5d3-xplained/scripts/Make.defs +++ b/boards/arm/sama5/sama5d3-xplained/scripts/Make.defs @@ -50,5 +50,9 @@ LDNXFLATFLAGS = -e main -s 2048 CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) diff --git a/boards/arm/stm32h7/devebox-stm32h743/scripts/Make.defs b/boards/arm/stm32h7/devebox-stm32h743/scripts/Make.defs index e91c28ac69d1a..3bce721393ac1 100644 --- a/boards/arm/stm32h7/devebox-stm32h743/scripts/Make.defs +++ b/boards/arm/stm32h7/devebox-stm32h743/scripts/Make.defs @@ -44,5 +44,9 @@ LDNXFLATFLAGS = -e main -s 2048 CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/arm/stm32h7/linum-stm32h753bi/scripts/Make.defs b/boards/arm/stm32h7/linum-stm32h753bi/scripts/Make.defs index a0239ec01e382..af4c5bd255ddc 100644 --- a/boards/arm/stm32h7/linum-stm32h753bi/scripts/Make.defs +++ b/boards/arm/stm32h7/linum-stm32h753bi/scripts/Make.defs @@ -42,5 +42,9 @@ LDNXFLATFLAGS = -e main -s 2048 CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/arm/stm32h7/openh743i/scripts/Make.defs b/boards/arm/stm32h7/openh743i/scripts/Make.defs index f58a9766be6c9..3d99a02ddc8c9 100644 --- a/boards/arm/stm32h7/openh743i/scripts/Make.defs +++ b/boards/arm/stm32h7/openh743i/scripts/Make.defs @@ -42,5 +42,9 @@ LDNXFLATFLAGS = -e main -s 2048 CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/arm/stm32h7/weact-stm32h743/scripts/Make.defs b/boards/arm/stm32h7/weact-stm32h743/scripts/Make.defs index 443bb0322b930..26eb471ffb4e4 100644 --- a/boards/arm/stm32h7/weact-stm32h743/scripts/Make.defs +++ b/boards/arm/stm32h7/weact-stm32h743/scripts/Make.defs @@ -42,5 +42,9 @@ LDNXFLATFLAGS = -e main -s 2048 CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/arm/stm32h7/weact-stm32h750/scripts/Make.defs b/boards/arm/stm32h7/weact-stm32h750/scripts/Make.defs index ccfcc38f166fa..2e7f4db1770bd 100644 --- a/boards/arm/stm32h7/weact-stm32h750/scripts/Make.defs +++ b/boards/arm/stm32h7/weact-stm32h750/scripts/Make.defs @@ -42,5 +42,9 @@ LDNXFLATFLAGS = -e main -s 2048 CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/risc-v/esp32c6/esp32c6-devkitc/scripts/Make.defs b/boards/risc-v/esp32c6/esp32c6-devkitc/scripts/Make.defs index d2af1cb4ca344..d910987ee16da 100644 --- a/boards/risc-v/esp32c6/esp32c6-devkitc/scripts/Make.defs +++ b/boards/risc-v/esp32c6/esp32c6-devkitc/scripts/Make.defs @@ -63,5 +63,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) CXXELFFLAGS = $(CXXFLAGS) +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -melf32lriscv -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/risc-v/esp32c6/esp32c6-xiao/scripts/Make.defs b/boards/risc-v/esp32c6/esp32c6-xiao/scripts/Make.defs index 55a42752727c8..10324fc4ca1e1 100644 --- a/boards/risc-v/esp32c6/esp32c6-xiao/scripts/Make.defs +++ b/boards/risc-v/esp32c6/esp32c6-xiao/scripts/Make.defs @@ -63,5 +63,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) CXXELFFLAGS = $(CXXFLAGS) +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -melf32lriscv -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/sim/sim/sim/scripts/Make.defs b/boards/sim/sim/sim/scripts/Make.defs index f3667253196e5..5f2ed0436e436 100644 --- a/boards/sim/sim/sim/scripts/Make.defs +++ b/boards/sim/sim/sim/scripts/Make.defs @@ -287,6 +287,11 @@ endif CELFFLAGS = $(CFLAGS) -fvisibility=hidden CXXELFFLAGS = $(CXXFLAGS) -fvisibility=hidden + +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + # -fno-pic to avoid GOT relocations CELFFLAGS += -fno-pic CXXELFFLAGS += -fno-pic diff --git a/boards/xtensa/esp32/esp32-2432S028/scripts/Make.defs b/boards/xtensa/esp32/esp32-2432S028/scripts/Make.defs index 3ee9a7c5f309e..dc5f12d4cdf48 100644 --- a/boards/xtensa/esp32/esp32-2432S028/scripts/Make.defs +++ b/boards/xtensa/esp32/esp32-2432S028/scripts/Make.defs @@ -67,5 +67,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)binfmt$(DELIM)elf$(DELIM)gnu-elf.ld) diff --git a/boards/xtensa/esp32s3/esp32s3-korvo-2/scripts/Make.defs b/boards/xtensa/esp32s3/esp32s3-korvo-2/scripts/Make.defs index 430701deaa92a..b815da4c62321 100644 --- a/boards/xtensa/esp32s3/esp32s3-korvo-2/scripts/Make.defs +++ b/boards/xtensa/esp32s3/esp32s3-korvo-2/scripts/Make.defs @@ -67,5 +67,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/xtensa/esp32s3/esp32s3-lhcbit/scripts/Make.defs b/boards/xtensa/esp32s3/esp32s3-lhcbit/scripts/Make.defs index 37aa9f31b0e2f..c0ec5bb42d38b 100644 --- a/boards/xtensa/esp32s3/esp32s3-lhcbit/scripts/Make.defs +++ b/boards/xtensa/esp32s3/esp32s3-lhcbit/scripts/Make.defs @@ -67,5 +67,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/xtensa/esp32s3/esp32s3-touch-lcd7/scripts/Make.defs b/boards/xtensa/esp32s3/esp32s3-touch-lcd7/scripts/Make.defs index 3ee8f4a3852b0..05e764cd55da4 100644 --- a/boards/xtensa/esp32s3/esp32s3-touch-lcd7/scripts/Make.defs +++ b/boards/xtensa/esp32s3/esp32s3-touch-lcd7/scripts/Make.defs @@ -67,5 +67,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/elf/gnu-elf.ld) diff --git a/boards/xtensa/esp32s3/esp32s3-xiao/scripts/Make.defs b/boards/xtensa/esp32s3/esp32s3-xiao/scripts/Make.defs index 5e591d98e673e..c7b0e5c52891b 100644 --- a/boards/xtensa/esp32s3/esp32s3-xiao/scripts/Make.defs +++ b/boards/xtensa/esp32s3/esp32s3-xiao/scripts/Make.defs @@ -67,5 +67,9 @@ LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld) CELFFLAGS = $(CFLAGS) -mtext-section-literals CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals +# __dso_handle comes from crtbegin, which a module does not link + +CXXELFFLAGS += -fno-use-cxa-atexit + LDELFFLAGS = -r -e main LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/libelf/gnu-elf.ld)