diff --git a/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt b/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
index 91d3e9b..9052885 100644
--- a/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
+++ b/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
@@ -31,6 +31,11 @@
     $<$<C_COMPILER_ID:GNU>:${PLATFORM_DIR}/ext/common/gcc/tfm_common_s.ld>
 )
 
+target_sources(tfm_s
+    PRIVATE
+        startup.c
+)
+
 if(NS)
     target_add_scatter_file(tfm_ns
         $<$<C_COMPILER_ID:GNU>:${PLATFORM_DIR}/ext/common/gcc/tfm_common_ns.ld>
@@ -39,6 +44,10 @@
         INTERFACE
             CMSIS_5_RTX_V8MMN
     )
+    target_sources(tfm_ns
+        PRIVATE
+            $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/startup.c>
+    )
 endif()
 
 if(BL2)
@@ -162,6 +171,10 @@
             ${HAL_NORDIC_PATH}/nrfx/drivers/src/nrfx_nvmc.c
             nrfx_glue.c
     )
+    target_sources(bl2
+        PRIVATE
+            $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/startup.c>
+    )
 
     target_include_directories(platform_bl2
         PUBLIC
diff --git a/platform/ext/target/nordic_nrf/common/core/startup.c b/platform/ext/target/nordic_nrf/common/core/startup.c
new file mode 100644
index 0000000..e51400d
--- /dev/null
+++ b/platform/ext/target/nordic_nrf/common/core/startup.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+#include "cmsis.h"
+
+#ifdef NRF_HW_INIT_RESET_ON_BOOT
+#include "hw_init.h"
+#endif
+
+#include "startup.h"
+
+/*----------------------------------------------------------------------------
+  Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+void Reset_Handler(void)
+{
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+    __disable_irq();
+#ifdef NRF_HW_INIT_RESET_ON_BOOT
+    /* Reset CONTROL register */
+    __set_CONTROL(0);
+
+    /* Allow the MSP and PSP stacks to descend to address 0,
+     * effectively disabling stack overflow protection.
+     */
+    __set_MSPLIM(0);
+    __set_PSPLIM(0);
+
+    /* Disable MPU */
+    ARM_MPU_Disable();
+#endif /* NRF_HW_INIT_RESET_ON_BOOT */
+
+    SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]);
+
+#ifdef NRF_HW_INIT_RESET_ON_BOOT
+    /* Initialize core architecture registers and system blocks */
+    hw_init_reset_on_boot();
+#endif /* NRF_HW_INIT_RESET_ON_BOOT */
+#endif
+
+    __set_PSP((uint32_t)(&__INITIAL_SP));
+
+    __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
+    __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+    __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
+#endif
+
+    SystemInit();                             /* CMSIS System Initialization */
+    __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
+}
diff --git a/platform/ext/target/nordic_nrf/common/core/startup.h b/platform/ext/target/nordic_nrf/common/core/startup.h
new file mode 100644
index 0000000..d117847
--- /dev/null
+++ b/platform/ext/target/nordic_nrf/common/core/startup.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/*
+ * This file has declarations needed by startup.c and
+ * startup_<platform>.c.
+ */
+
+#ifndef __STARTUP_H__
+#define __STARTUP_H__
+
+extern uint32_t __INITIAL_SP;
+extern uint32_t __STACK_LIMIT;
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+extern uint64_t __STACK_SEAL;
+#endif
+
+typedef void(*VECTOR_TABLE_Type)(void);
+
+void __PROGRAM_START(void) __NO_RETURN;
+
+#define DEFAULT_IRQ_HANDLER(handler_name)  \
+void __WEAK handler_name(void) __NO_RETURN; \
+void handler_name(void) { \
+    while(1); \
+}
+
+__NO_RETURN void Reset_Handler(void);
+
+extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
+
+#endif /* __STARTUP_H__ */
diff --git a/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c b/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c
index 6c5d227..34dd99c 100644
--- a/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c
+++ b/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c
@@ -26,35 +26,8 @@
 #ifdef NRF_HW_INIT_RESET_ON_BOOT
 #include "hw_init.h"
 #endif
+#include "startup.h"
 
-/*----------------------------------------------------------------------------
-  External References
- *----------------------------------------------------------------------------*/
-extern uint32_t __INITIAL_SP;
-extern uint32_t __STACK_LIMIT;
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-extern uint64_t __STACK_SEAL;
-#endif
-
-typedef void(*VECTOR_TABLE_Type)(void);
-
-extern void __PROGRAM_START(void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
-  Internal References
- *----------------------------------------------------------------------------*/
-void Reset_Handler  (void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
-  Exception / Interrupt Handler
- *----------------------------------------------------------------------------*/
-#define DEFAULT_IRQ_HANDLER(handler_name)  \
-void __WEAK handler_name(void) __NO_RETURN; \
-void handler_name(void) { \
-    while(1); \
-}
-
-/* Exceptions */
 DEFAULT_IRQ_HANDLER(NMI_Handler)
 DEFAULT_IRQ_HANDLER(HardFault_Handler)
 DEFAULT_IRQ_HANDLER(MemManage_Handler)
@@ -108,17 +81,12 @@
 DEFAULT_IRQ_HANDLER(KMU_IRQHandler)
 DEFAULT_IRQ_HANDLER(CRYPTOCELL_IRQHandler)
 
-/*----------------------------------------------------------------------------
-  Exception / Interrupt Vector table
- *----------------------------------------------------------------------------*/
-
 #if defined ( __GNUC__ )
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
 #endif
 
-extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
-       const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
+const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
   (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
   Reset_Handler,               /* Reset Handler */
   NMI_Handler,                 /* NMI Handler */
@@ -211,45 +179,3 @@
 #if defined ( __GNUC__ )
 #pragma GCC diagnostic pop
 #endif
-
-/*----------------------------------------------------------------------------
-  Reset Handler called on controller reset
- *----------------------------------------------------------------------------*/
-void Reset_Handler(void)
-{
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-    __disable_irq();
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
-    /* Reset CONTROL register */
-    __set_CONTROL(0);
-
-    /* Allow the MSP and PSP stacks to descend to address 0,
-     * effectively disabling stack overflow protection.
-     */
-    __set_MSPLIM(0);
-    __set_PSPLIM(0);
-
-    /* Disable MPU */
-    ARM_MPU_Disable();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-
-    SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]);
-
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
-    /* Initialize core architecture registers and system blocks */
-    hw_init_reset_on_boot();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-#endif
-
-    __set_PSP((uint32_t)(&__INITIAL_SP));
-
-    __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
-    __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
-
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-    __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
-#endif
-
-    SystemInit();                             /* CMSIS System Initialization */
-    __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
-}
diff --git a/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c b/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c
index 1f2f33a..32be195 100644
--- a/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c
+++ b/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c
@@ -23,35 +23,8 @@
 
 #include "cmsis.h"
 #include "hw_init.h"
+#include "startup.h"
 
-/*----------------------------------------------------------------------------
-  External References
- *----------------------------------------------------------------------------*/
-extern uint32_t __INITIAL_SP;
-extern uint32_t __STACK_LIMIT;
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-extern uint64_t __STACK_SEAL;
-#endif
-
-typedef void(*VECTOR_TABLE_Type)(void);
-
-extern void __PROGRAM_START(void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
-  Internal References
- *----------------------------------------------------------------------------*/
-void Reset_Handler  (void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
-  Exception / Interrupt Handler
- *----------------------------------------------------------------------------*/
-#define DEFAULT_IRQ_HANDLER(handler_name)  \
-void __WEAK handler_name(void) __NO_RETURN; \
-void handler_name(void) { \
-    while(1); \
-}
-
-/* Exceptions */
 DEFAULT_IRQ_HANDLER(NMI_Handler)
 DEFAULT_IRQ_HANDLER(HardFault_Handler)
 DEFAULT_IRQ_HANDLER(MemManage_Handler)
@@ -95,17 +68,12 @@
 DEFAULT_IRQ_HANDLER(KMU_IRQHandler)
 DEFAULT_IRQ_HANDLER(CRYPTOCELL_IRQHandler)
 
-/*----------------------------------------------------------------------------
-  Exception / Interrupt Vector table
- *----------------------------------------------------------------------------*/
-
 #if defined ( __GNUC__ )
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
 #endif
 
-extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
-       const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
+const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
   (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
   Reset_Handler,               /* Reset Handler */
   NMI_Handler,                 /* NMI Handler */
@@ -194,45 +162,3 @@
 #if defined ( __GNUC__ )
 #pragma GCC diagnostic pop
 #endif
-
-/*----------------------------------------------------------------------------
-  Reset Handler called on controller reset
- *----------------------------------------------------------------------------*/
-void Reset_Handler(void)
-{
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-    __disable_irq();
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
-    /* Reset CONTROL register */
-    __set_CONTROL(0);
-
-    /* Allow the MSP and PSP stacks to descend to address 0,
-     * effectively disabling stack overflow protection.
-     */
-    __set_MSPLIM(0);
-    __set_PSPLIM(0);
-
-    /* Disable MPU */
-    ARM_MPU_Disable();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-
-    SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]);
-
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
-    /* Initialize core architecture registers and system blocks */
-    hw_init_reset_on_boot();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-#endif
-
-    __set_PSP((uint32_t)(&__INITIAL_SP));
-
-    __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
-    __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
-
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-    __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
-#endif
-
-    SystemInit();                             /* CMSIS System Initialization */
-    __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
-}
