[PATCH 4/5] score: Optimize Workspace Handler initialization

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Nov 29 10:29:25 UTC 2021


The BSPs provide memory for the workspace initialization via
_Memory_Get().  Most BSPs provide exactly one memory area.  Only two
BSPs provide more than one memory area (arm/altera-cyclone-v and
bsps/powerpc/mpc55xxevb).  Only if more than one memory area is
provided, there is a need to use _Heap_Extend().  Provide two
implementations to initialize the workspace handler and let the BSP
select one of the implementations based on the number of provided memory
areas.  This gets rid of a dependency on _Heap_Extend().  It also avoids
dead code sections for most BSPs.
---
 bsps/shared/start/wkspaceinitmany.c           |  46 +++++++
 bsps/shared/start/wkspaceinitone.c            |  46 +++++++
 cpukit/include/rtems/score/wkspace.h          |  12 +-
 cpukit/include/rtems/score/wkspaceinitmany.h  | 129 ++++++++++++++++++
 cpukit/include/rtems/score/wkspaceinitone.h   | 113 +++++++++++++++
 cpukit/score/src/wkspace.c                    |  85 +-----------
 .../altera-cyclone-v/bspalteracyclonev.yml    |   1 +
 spec/build/bsps/i386/pc386/obj.yml            |   1 +
 spec/build/bsps/objmem.yml                    |   1 +
 spec/build/bsps/powerpc/mpc55xxevb/obj.yml    |   1 +
 spec/build/bsps/powerpc/objmem.yml            |   1 +
 spec/build/bsps/powerpc/tqm8xx/obj.yml        |   1 +
 spec/build/bsps/sparc/objmem.yml              |   1 +
 13 files changed, 347 insertions(+), 91 deletions(-)
 create mode 100644 bsps/shared/start/wkspaceinitmany.c
 create mode 100644 bsps/shared/start/wkspaceinitone.c
 create mode 100644 cpukit/include/rtems/score/wkspaceinitmany.h
 create mode 100644 cpukit/include/rtems/score/wkspaceinitone.h

diff --git a/bsps/shared/start/wkspaceinitmany.c b/bsps/shared/start/wkspaceinitmany.c
new file mode 100644
index 0000000000..30335d63c9
--- /dev/null
+++ b/bsps/shared/start/wkspaceinitmany.c
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreWorkspace
+ *
+ * @brief This source file contains the _Workspace_Handler_initialization()
+ *   implementation which supports more than one memory area.
+ */
+
+/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/wkspaceinitmany.h>
+
+void _Workspace_Handler_initialization( void )
+{
+  _Workspace_Initialize_for_many_areas();
+}
diff --git a/bsps/shared/start/wkspaceinitone.c b/bsps/shared/start/wkspaceinitone.c
new file mode 100644
index 0000000000..91d007d100
--- /dev/null
+++ b/bsps/shared/start/wkspaceinitone.c
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreWorkspace
+ *
+ * @brief This source file contains the _Workspace_Handler_initialization()
+ *   implementation which supports exactly one memory area.
+ */
+
+/*
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/wkspaceinitone.h>
+
+void _Workspace_Handler_initialization( void )
+{
+  _Workspace_Initialize_for_one_area();
+}
diff --git a/cpukit/include/rtems/score/wkspace.h b/cpukit/include/rtems/score/wkspace.h
index a3af86e878..75660980a1 100644
--- a/cpukit/include/rtems/score/wkspace.h
+++ b/cpukit/include/rtems/score/wkspace.h
@@ -20,8 +20,6 @@
 #define _RTEMS_SCORE_WKSPACE_H
 
 #include <rtems/score/heap.h>
-#include <rtems/score/interr.h>
-#include <rtems/score/memory.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -42,17 +40,11 @@ extern "C" {
 extern Heap_Control _Workspace_Area;
 
 /**
- * @brief Initilizes the workspace handler.
+ * @brief Initializes the workspace handler.
  *
  * This routine performs the initialization necessary for this handler.
- *
- * @param mem The memory information
- * @param extend The extension handler for the new workspace.
  */
-void _Workspace_Handler_initialization(
-  const Memory_Information              *mem,
-  Heap_Initialization_or_extend_handler  extend
-);
+void _Workspace_Handler_initialization( void );
 
 /**
  * @brief Allocates a memory block of the specified size from the workspace.
diff --git a/cpukit/include/rtems/score/wkspaceinitmany.h b/cpukit/include/rtems/score/wkspaceinitmany.h
new file mode 100644
index 0000000000..0277c6ee1e
--- /dev/null
+++ b/cpukit/include/rtems/score/wkspaceinitmany.h
@@ -0,0 +1,129 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreWorkspace
+ *
+ * @brief This header file provides the implementation of
+ *   _Workspace_Initialize_for_many_areas().
+ */
+
+/*
+ * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RTEMS_SCORE_WKSPACEINITMANY_H
+#define _RTEMS_SCORE_WKSPACEINITMANY_H
+
+#include <rtems/score/wkspace.h>
+#include <rtems/score/heapimpl.h>
+#include <rtems/score/interr.h>
+#include <rtems/score/memory.h>
+#include <rtems/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @ingroup RTEMSScoreWorkspace
+ *
+ * @brief Initializes the RTEMS Workspace with support for exactly one memory
+ *   area.
+ *
+ * This implementation should be used by BSPs which provide more than one
+ * memory area via _Memory_Get() to implement
+ * _Workspace_Handler_initialization().
+ */
+RTEMS_INLINE_ROUTINE void _Workspace_Initialize_for_many_areas( void )
+{
+  const Memory_Information             *mem;
+  Heap_Initialization_or_extend_handler init_or_extend;
+  uintptr_t                             remaining;
+  bool                                  unified;
+  uintptr_t                             page_size;
+  uintptr_t                             overhead;
+  size_t                                i;
+
+  mem = _Memory_Get();
+  page_size = CPU_HEAP_ALIGNMENT;
+  remaining = rtems_configuration_get_work_space_size();
+  init_or_extend = _Heap_Initialize;
+  unified = rtems_configuration_get_unified_work_area();
+  overhead = _Heap_Area_overhead( page_size );
+
+  for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
+    Memory_Area *area;
+    uintptr_t    free_size;
+
+    area = _Memory_Get_area( mem, i );
+    free_size = _Memory_Get_free_size( area );
+
+    if ( free_size > overhead ) {
+      uintptr_t space_available;
+      uintptr_t size;
+
+      if ( unified ) {
+        size = free_size;
+      } else {
+        if ( remaining > 0 ) {
+          size = remaining < free_size - overhead ?
+            remaining + overhead : free_size;
+        } else {
+          size = 0;
+        }
+      }
+
+      space_available = ( *init_or_extend )(
+        &_Workspace_Area,
+        _Memory_Get_free_begin( area ),
+        size,
+        page_size
+      );
+
+      _Memory_Consume( area, size );
+
+      if ( space_available < remaining ) {
+        remaining -= space_available;
+      } else {
+        remaining = 0;
+      }
+
+      init_or_extend = _Heap_Extend;
+    }
+  }
+
+  if ( remaining > 0 ) {
+    _Internal_error( INTERNAL_ERROR_TOO_LITTLE_WORKSPACE );
+  }
+
+  _Heap_Protection_set_delayed_free_fraction( &_Workspace_Area, 1 );
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTEMS_SCORE_WKSPACEINITMANY_H */
diff --git a/cpukit/include/rtems/score/wkspaceinitone.h b/cpukit/include/rtems/score/wkspaceinitone.h
new file mode 100644
index 0000000000..c68e1b5db1
--- /dev/null
+++ b/cpukit/include/rtems/score/wkspaceinitone.h
@@ -0,0 +1,113 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreWorkspace
+ *
+ * @brief This header file provides the implementation of
+ *   _Workspace_Initialize_for_one_area().
+ */
+
+/*
+ * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RTEMS_SCORE_WKSPACEINITONE_H
+#define _RTEMS_SCORE_WKSPACEINITONE_H
+
+#include <rtems/score/wkspace.h>
+#include <rtems/score/assert.h>
+#include <rtems/score/heapimpl.h>
+#include <rtems/score/interr.h>
+#include <rtems/score/memory.h>
+#include <rtems/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @ingroup RTEMSScoreWorkspace
+ *
+ * @brief Initializes the RTEMS Workspace with support for exactly one memory
+ *   area.
+ *
+ * This implementation should be used by BSPs which provide exactly one memory
+ * area via _Memory_Get() to implement _Workspace_Handler_initialization().
+ */
+RTEMS_INLINE_ROUTINE void _Workspace_Initialize_for_one_area( void )
+{
+  uintptr_t page_size;
+  uintptr_t wkspace_size;
+  uintptr_t wkspace_size_with_overhead;
+  uintptr_t available_size;
+
+  page_size = CPU_HEAP_ALIGNMENT;
+  wkspace_size = rtems_configuration_get_work_space_size();
+  wkspace_size_with_overhead = wkspace_size + _Heap_Area_overhead( page_size );
+
+  if ( wkspace_size < wkspace_size_with_overhead ) {
+    const Memory_Information *mem;
+    Memory_Area              *area;
+    uintptr_t                 free_size;
+    uintptr_t                 size;
+
+    mem = _Memory_Get();
+    _Assert( _Memory_Get_count( mem ) == 1 );
+
+    area = _Memory_Get_area( mem, 0 );
+    free_size = _Memory_Get_free_size( area );
+
+    if ( rtems_configuration_get_unified_work_area() ) {
+      size = free_size;
+    } else {
+      size = wkspace_size_with_overhead;
+    }
+
+    available_size = _Heap_Initialize(
+      &_Workspace_Area,
+      _Memory_Get_free_begin( area ),
+      size,
+      page_size
+    );
+
+    _Memory_Consume( area, size );
+  } else {
+    /* An unsigned integer overflow happened */
+    available_size = 0;
+  }
+
+  if ( wkspace_size > available_size ) {
+    _Internal_error( INTERNAL_ERROR_TOO_LITTLE_WORKSPACE );
+  }
+
+  _Heap_Protection_set_delayed_free_fraction( &_Workspace_Area, 1 );
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTEMS_SCORE_WKSPACEINITONE_H */
diff --git a/cpukit/score/src/wkspace.c b/cpukit/score/src/wkspace.c
index 7930a1fdc1..5b8c980384 100644
--- a/cpukit/score/src/wkspace.c
+++ b/cpukit/score/src/wkspace.c
@@ -5,14 +5,12 @@
  *
  * @ingroup RTEMSScoreWorkspace
  *
- * @brief This source file contains the definition of ::_Workspace_Area, the
- *   implementation of _Workspace_Handler_initialization(),
- *   _Workspace_Allocate(), and _Workspace_Free(), and the Workspace Handler
- *   system initialization.
+ * @brief This source file contains the definition of ::_Workspace_Area and the
+ *   Workspace Handler system initialization.
  */
 
 /*
- * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -41,87 +39,12 @@
 #endif
 
 #include <rtems/score/wkspace.h>
-#include <rtems/score/assert.h>
-#include <rtems/score/heapimpl.h>
-#include <rtems/score/interr.h>
-#include <rtems/config.h>
 #include <rtems/sysinit.h>
 
 Heap_Control _Workspace_Area;
 
-static void _Workspace_Initialize( void )
-{
-  _Workspace_Handler_initialization( _Memory_Get(), _Heap_Extend );
-}
-
 RTEMS_SYSINIT_ITEM(
-  _Workspace_Initialize,
+  _Workspace_Handler_initialization,
   RTEMS_SYSINIT_WORKSPACE,
   RTEMS_SYSINIT_ORDER_MIDDLE
 );
-
-void _Workspace_Handler_initialization(
-  const Memory_Information              *mem,
-  Heap_Initialization_or_extend_handler  extend
-)
-{
-  Heap_Initialization_or_extend_handler init_or_extend;
-  uintptr_t                             remaining;
-  bool                                  unified;
-  uintptr_t                             page_size;
-  uintptr_t                             overhead;
-  size_t                                i;
-
-  page_size = CPU_HEAP_ALIGNMENT;
-  remaining = rtems_configuration_get_work_space_size();
-  init_or_extend = _Heap_Initialize;
-  unified = rtems_configuration_get_unified_work_area();
-  overhead = _Heap_Area_overhead( page_size );
-
-  for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
-    Memory_Area *area;
-    uintptr_t    free_size;
-
-    area = _Memory_Get_area( mem, i );
-    free_size = _Memory_Get_free_size( area );
-
-    if ( free_size > overhead ) {
-      uintptr_t space_available;
-      uintptr_t size;
-
-      if ( unified ) {
-        size = free_size;
-      } else {
-        if ( remaining > 0 ) {
-          size = remaining < free_size - overhead ?
-            remaining + overhead : free_size;
-        } else {
-          size = 0;
-        }
-      }
-
-      space_available = ( *init_or_extend )(
-        &_Workspace_Area,
-        _Memory_Get_free_begin( area ),
-        size,
-        page_size
-      );
-
-      _Memory_Consume( area, size );
-
-      if ( space_available < remaining ) {
-        remaining -= space_available;
-      } else {
-        remaining = 0;
-      }
-
-      init_or_extend = extend;
-    }
-  }
-
-  if ( remaining > 0 ) {
-    _Internal_error( INTERNAL_ERROR_TOO_LITTLE_WORKSPACE );
-  }
-
-  _Heap_Protection_set_delayed_free_fraction( &_Workspace_Area, 1 );
-}
diff --git a/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml b/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml
index 99117573de..7fe74074f2 100644
--- a/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml
+++ b/spec/build/bsps/arm/altera-cyclone-v/bspalteracyclonev.yml
@@ -141,4 +141,5 @@ source:
 - bsps/shared/start/gettargethash-default.c
 - bsps/shared/start/sbrk.c
 - bsps/shared/start/stackalloc.c
+- bsps/shared/start/wkspaceinitmany.c
 type: build
diff --git a/spec/build/bsps/i386/pc386/obj.yml b/spec/build/bsps/i386/pc386/obj.yml
index 0bf5a22046..692e2df1cc 100644
--- a/spec/build/bsps/i386/pc386/obj.yml
+++ b/spec/build/bsps/i386/pc386/obj.yml
@@ -81,4 +81,5 @@ source:
 - bsps/shared/start/bspfatal-default.c
 - bsps/shared/start/gettargethash-default.c
 - bsps/shared/start/sbrk.c
+- bsps/shared/start/wkspaceinitone.c
 type: build
diff --git a/spec/build/bsps/objmem.yml b/spec/build/bsps/objmem.yml
index af4d3051ba..6c72bc3f65 100644
--- a/spec/build/bsps/objmem.yml
+++ b/spec/build/bsps/objmem.yml
@@ -11,4 +11,5 @@ install: []
 links: []
 source:
 - bsps/shared/start/bspgetworkarea-default.c
+- bsps/shared/start/wkspaceinitone.c
 type: build
diff --git a/spec/build/bsps/powerpc/mpc55xxevb/obj.yml b/spec/build/bsps/powerpc/mpc55xxevb/obj.yml
index 07d73a41ba..0eadb0e28d 100644
--- a/spec/build/bsps/powerpc/mpc55xxevb/obj.yml
+++ b/spec/build/bsps/powerpc/mpc55xxevb/obj.yml
@@ -95,4 +95,5 @@ source:
 - bsps/shared/start/bspfatal-default.c
 - bsps/shared/start/gettargethash-default.c
 - bsps/shared/start/stackalloc.c
+- bsps/shared/start/wkspaceinitmany.c
 type: build
diff --git a/spec/build/bsps/powerpc/objmem.yml b/spec/build/bsps/powerpc/objmem.yml
index 9e5ae758ad..1fbb8b4fb0 100644
--- a/spec/build/bsps/powerpc/objmem.yml
+++ b/spec/build/bsps/powerpc/objmem.yml
@@ -11,4 +11,5 @@ install: []
 links: []
 source:
 - bsps/powerpc/shared/start/bspgetworkarea.c
+- bsps/shared/start/wkspaceinitone.c
 type: build
diff --git a/spec/build/bsps/powerpc/tqm8xx/obj.yml b/spec/build/bsps/powerpc/tqm8xx/obj.yml
index 4dff6f07da..7aec916350 100644
--- a/spec/build/bsps/powerpc/tqm8xx/obj.yml
+++ b/spec/build/bsps/powerpc/tqm8xx/obj.yml
@@ -47,4 +47,5 @@ source:
 - bsps/shared/start/bspreset-empty.c
 - bsps/shared/start/gettargethash-default.c
 - bsps/shared/start/sbrk.c
+- bsps/shared/start/wkspaceinitone.c
 type: build
diff --git a/spec/build/bsps/sparc/objmem.yml b/spec/build/bsps/sparc/objmem.yml
index 8ca61bf4b6..d4ded7b226 100644
--- a/spec/build/bsps/sparc/objmem.yml
+++ b/spec/build/bsps/sparc/objmem.yml
@@ -10,5 +10,6 @@ includes: []
 install: []
 links: []
 source:
+- bsps/shared/start/wkspaceinitone.c
 - bsps/sparc/shared/start/bspgetworkarea.c
 type: build
-- 
2.31.1



More information about the devel mailing list