From 0862d949cd9f92528424e705796153b6f34b84a5 Mon Sep 17 00:00:00 2001 From: Torsten Rasmussen Date: Tue, 7 Oct 2025 11:15:32 +0200 Subject: [PATCH] [nrf fromtree] cmake: define linker argument for undefined symbol Specifying undefined symbol on linker invocation requests the linker to search and include the symbol. This ensures the symbol will be present in final output. Signed-off-by: Torsten Rasmussen (cherry picked from commit 428279ef412c095070b4c426661b33eb06eba7b2) --- arch/common/CMakeLists.txt | 3 +++ cmake/linker/arcmwdt/linker_flags.cmake | 2 ++ cmake/linker/armlink/linker_flags.cmake | 5 +++++ cmake/linker/iar/linker_flags.cmake | 1 + cmake/linker/ld/linker_flags.cmake | 2 ++ cmake/linker/xt-ld/linker_flags.cmake | 6 ++++-- 6 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 cmake/linker/armlink/linker_flags.cmake diff --git a/arch/common/CMakeLists.txt b/arch/common/CMakeLists.txt index d817afa3d7f..a764235130e 100644 --- a/arch/common/CMakeLists.txt +++ b/arch/common/CMakeLists.txt @@ -109,6 +109,9 @@ if (CONFIG_GEN_ISR_TABLES) add_dependencies(isr_tables zephyr_generated_headers) target_link_libraries(isr_tables zephyr_interface) zephyr_library_link_libraries(isr_tables) + + zephyr_link_libraries($_sw_isr_table) + zephyr_link_libraries($_irq_vector_table) endif() if(CONFIG_COVERAGE) diff --git a/cmake/linker/arcmwdt/linker_flags.cmake b/cmake/linker/arcmwdt/linker_flags.cmake index 32c6cb9dd66..e2984268d9d 100644 --- a/cmake/linker/arcmwdt/linker_flags.cmake +++ b/cmake/linker/arcmwdt/linker_flags.cmake @@ -41,6 +41,8 @@ check_set_linker_property(TARGET linker PROPERTY orphan_error ${LINKERFLAGPREFIX},--orphan-handling=error ) +check_set_linker_property(TARGET linker PROPERTY undefined ${LINKERFLAGPREFIX},-u) + set_property(TARGET linker PROPERTY partial_linking "-r") # Extra warnings options for twister run diff --git a/cmake/linker/armlink/linker_flags.cmake b/cmake/linker/armlink/linker_flags.cmake new file mode 100644 index 00000000000..207f83246a8 --- /dev/null +++ b/cmake/linker/armlink/linker_flags.cmake @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Nordic Semiconductor +# +# SPDX-License-Identifier: Apache-2.0 + +set_property(TARGET linker PROPERTY undefined --undefined=) diff --git a/cmake/linker/iar/linker_flags.cmake b/cmake/linker/iar/linker_flags.cmake index 12d44ca24cd..cdfc3a8e9a5 100644 --- a/cmake/linker/iar/linker_flags.cmake +++ b/cmake/linker/iar/linker_flags.cmake @@ -23,6 +23,7 @@ set_property(TARGET linker PROPERTY optimization_speed --entry_list_in_address_o set_property(TARGET linker PROPERTY optimization_size --entry_list_in_address_order) set_property(TARGET linker PROPERTY optimization_size_aggressive --entry_list_in_address_order) +set_linker_property(TARGET linker PROPERTY undefined "--keep=") string(APPEND CMAKE_C_LINK_FLAGS --no-wrap-diagnostics) diff --git a/cmake/linker/ld/linker_flags.cmake b/cmake/linker/ld/linker_flags.cmake index 885a1844cc5..33e5cd59322 100644 --- a/cmake/linker/ld/linker_flags.cmake +++ b/cmake/linker/ld/linker_flags.cmake @@ -22,6 +22,8 @@ check_set_linker_property(TARGET linker PROPERTY orphan_error ${LINKERFLAGPREFIX},--orphan-handling=error ) +set_property(TARGET linker PROPERTY undefined ${LINKERFLAGPREFIX},--undefined=) + check_set_linker_property(TARGET linker PROPERTY memusage "${LINKERFLAGPREFIX},--print-memory-usage") check_set_linker_property(TARGET linker PROPERTY sanitizer_undefined -fsanitize=undefined) diff --git a/cmake/linker/xt-ld/linker_flags.cmake b/cmake/linker/xt-ld/linker_flags.cmake index ab66461e452..535d76ecf65 100644 --- a/cmake/linker/xt-ld/linker_flags.cmake +++ b/cmake/linker/xt-ld/linker_flags.cmake @@ -19,11 +19,11 @@ check_set_linker_property(TARGET linker PROPERTY baremetal ) check_set_linker_property(TARGET linker PROPERTY orphan_warning - ${LINKERFLAGPREFIX},--orphan-handling=warn + ${LINKERFLAGPREFIX},--orphan-handling=warn ) check_set_linker_property(TARGET linker PROPERTY orphan_error - ${LINKERFLAGPREFIX},--orphan-handling=error + ${LINKERFLAGPREFIX},--orphan-handling=error ) set_property(TARGET linker PROPERTY partial_linking "-r") @@ -34,3 +34,5 @@ check_set_linker_property(TARGET linker PROPERTY sort_alignment ${LINKERFLAGPREFIX},--sort-common=descending ${LINKERFLAGPREFIX},--sort-section=alignment ) + +set_property(TARGET linker PROPERTY undefined ${LINKERFLAGPREFIX},--undefined=)