Index: spec/if/acfg/max-thread-local-storage-size.yml
===================================================================
--- spec/if/acfg/max-thread-local-storage-size.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/if/acfg/max-thread-local-storage-size.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -27,4 +27,8 @@
   than a non-zero value of this configuration option, then a fatal error will
   occur during system initialization.
+
+  Use ${../rtems/basedefs/align-up:/name} and
+  ${../rtems/tasks/storage-alignment:/name} to adjust the size to meet the
+  minimum alignment requirement of a thread-local storage area.
 text: ''
 type: interface
Index: spec/if/acfg/min-tasks-with-user-provided-storage.yml
===================================================================
--- spec/if/acfg/min-tasks-with-user-provided-storage.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
+++ spec/if/acfg/min-tasks-with-user-provided-storage.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+appl-config-option-type: integer
+constraints:
+  max: ${max-tasks:/name}
+  min: 0
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+default-value: 0
+description: |
+  The value of this configuration option defines the minimum count of Classic
+  API Tasks which are constructed by ${../rtems/tasks/construct:/name}.
+enabled-by: true
+index-entries: []
+interface-type: appl-config-option
+links:
+- role: appl-config-group-member
+  uid: group-classic
+name: CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
+notes: |
+  By default, the calculation for the required memory in the RTEMS Workspace
+  for tasks assumes that all Classic API Tasks are created by
+  ${../rtems/tasks/create:/name}.  This configuration option can be used to
+  reduce the required memory for the system-provided task storage areas since
+  tasks constructed by ${../rtems/tasks/construct:/name} use a user-provided
+  task storage area.
+text: ''
+type: interface
Index: ec/if/acfg/tasks-created-from-config.yml
===================================================================
--- spec/if/acfg/tasks-created-from-config.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ 	(revision )
@@ -1,27 +1,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-appl-config-option-type: integer
-constraints:
-  max: ${max-tasks:/name}
-  min: 0
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-default-value: 0
-description: |
-  The value of this configuration option defines the count of Classic API Tasks
-  which are created by ${../rtems/tasks/create-from-config:/name}.
-enabled-by: true
-index-entries: []
-interface-type: appl-config-option
-links:
-- role: appl-config-group-member
-  uid: group-classic
-name: CONFIGURE_TASKS_CREATED_FROM_CONFIG
-notes: |
-  By default, the calculation for the required memory in the RTEMS Workspace for
-  tasks assumes that all Classic API Tasks are created by
-  ${../rtems/tasks/create:/name}.  This configuration option can be used to
-  reduce the required memory for the system-provided task storage
-  areas since tasks created by ${../rtems/tasks/create-from-config:/name} use a
-  user-provided task storage area.
-text: ''
-type: interface
Index: spec/if/impl/cpu/heap-alignment.yml
===================================================================
--- spec/if/impl/cpu/heap-alignment.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
+++ spec/if/impl/cpu/heap-alignment.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+interface-type: unspecified-define
+links:
+- role: interface-placement
+  uid: header
+name: CPU_HEAP_ALIGNMENT
+reference: null
+type: interface
Index: ec/if/impl/cpu/stack-alignment.yml
===================================================================
--- spec/if/impl/cpu/stack-alignment.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ 	(revision )
@@ -1,11 +1,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-interface-type: unspecified-define
-links:
-- role: interface-placement
-  uid: header
-name: CPU_STACK_ALIGNMENT
-reference: null
-type: interface
Index: spec/if/rtems/basedefs/align-down.yml
===================================================================
--- spec/if/rtems/basedefs/align-down.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
+++ spec/if/rtems/basedefs/align-down.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: |
+  Returns the specified value aligned down to the specified alignment.
+copyrights:
+- Copyright (C) 2016 embedded brains GmbH (http://www.embedded-brains.de)
+definition:
+  default: |
+    ( ( ${.:/params[0]/name} ) & ~( ( ${.:/params[1]/name} ) - 1 ) )
+  variants: []
+description: null
+enabled-by: true
+interface-type: macro
+links:
+- role: interface-placement
+  uid: header
+- role: interface-ingroup
+  uid: group
+name: RTEMS_ALIGN_DOWN
+notes: null
+params:
+- description: |
+    is the value to align down.
+  dir: null
+  name: _value
+- description: |
+    is the desired alignment in bytes.  The alignment shall be a power of two,
+    otherwise the returned value is undefined.  The alignment parameter is
+    evaluated twice.
+  dir: null
+  name: _alignment
+return:
+  return: |
+    The specified value aligned down to the specified alignment is returned.
+  return-values: []
+type: interface
Index: spec/if/rtems/basedefs/align-up.yml
===================================================================
--- spec/if/rtems/basedefs/align-up.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
+++ spec/if/rtems/basedefs/align-up.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -0,0 +1,35 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: |
+  Returns the specified value aligned up to the specified alignment.
+copyrights:
+- Copyright (C) 2016 embedded brains GmbH (http://www.embedded-brains.de)
+definition:
+  default: |
+    ( ( ( ${.:/params[0]/name} ) + ( ${.:/params[1]/name} ) - 1 ) & ~( ( ${.:/params[1]/name} ) - 1 ) )
+  variants: []
+description: null
+enabled-by: true
+interface-type: macro
+links:
+- role: interface-placement
+  uid: header
+- role: interface-ingroup
+  uid: group
+name: RTEMS_ALIGN_UP
+notes: null
+params:
+- description: |
+    is the value to align up.
+  dir: null
+  name: _value
+- description: |
+    is the desired alignment in bytes.  The alignment shall be a power of two,
+    otherwise the returned value is undefined.  The alignment parameter is
+    evaluated twice.
+  dir: null
+  name: _alignment
+return:
+  return: |
+    The specified value aligned up to the specified alignment is returned.
+  return-values: []
+type: interface
Index: spec/if/rtems/tasks/config.yml
===================================================================
--- spec/if/rtems/tasks/config.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/if/rtems/tasks/config.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -1,7 +1,6 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 brief: |
-  This structure defines a task configuration used to build a task.  This
-  structure defines the configuration of a task created by
-  ${create-from-config:/name}.
+  This structure defines the configuration of a task constructed by
+  ${construct:/name}.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
@@ -32,7 +31,8 @@
       floating-point context.
 
-      There are no alignment requirements for the task storage area.  To avoid
-      memory waste, use the ${storage-alignment:/name} variable attribute to
-      enforce the recommended alignment of the task storage area.
+      The task storage area begin address and size should be aligned by
+      ${storage-alignment:/name}.  To avoid memory waste, use
+      ${../basedefs/aligned:/name} and ${storage-alignment:/name} to enforce
+      the recommended alignment of a statically allocated task storage area.
     kind: member
     name: storage_area
@@ -54,9 +54,13 @@
     definition: ${../../c/size_t:/name} ${.:name}
     description: |
+      Use ${../basedefs/align-up:/name} and ${storage-alignment:/name} to
+      adjust the size to meet the minimum alignment requirement of a
+      thread-local storage area used to construct a task.
+
       If the value is less than the actual thread-local storage size, then the
-      task creation by ${create-from-config:/name} fails.
+      task construction by ${construct:/name} fails.
 
-      If the is less than the task storage area size, then the task creation by
-      ${create-from-config:/name} fails.
+      If the is less than the task storage area size, then the task
+      construction by ${construct:/name} fails.
     kind: member
     name: maximum_thread_local_storage_size
@@ -67,8 +71,10 @@
     definition: void ( *${.:name} )( void * )
     description: |
-      It is called when the task creation aborts due to a failed task create
-      extension or the task is deleted.  It is called from task context under
+      It is called on exactly two mutually exclusive occasions.  Firstly, when
+      the task construction aborts due to a failed task create extension, or
+      secondly, when the task is deleted.  It is called from task context under
       protection of the object allocator lock.  It is allowed to call free() in
-      this handler.  The handler may be ${../../c/null:/name}.
+      this handler.  If handler is ${../../c/null:/name}, then no action will
+      be performed.
     kind: member
     name: storage_free
Index: spec/if/rtems/tasks/construct.yml
===================================================================
--- spec/if/rtems/tasks/construct.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
+++ spec/if/rtems/tasks/construct.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -0,0 +1,91 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: |
+  Creates a task from the specified the task configuration.
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+definition:
+  default:
+    body: null
+    params:
+    - const ${config:/name} *${.:/params[0]/name}
+    - ${../types/id:/name} *${.:/params[1]/name}
+    return: ${../status/code:/name}
+  variants: []
+description: null
+enabled-by: true
+interface-type: function
+links:
+- role: interface-placement
+  uid: header
+- role: interface-ingroup
+  uid: group
+name: rtems_task_construct
+notes: |
+  In contrast to tasks created by ${create:/name}, the tasks constructed by
+  this directive use a user-provided task storage area.  The task storage area
+  contains the task stack, the thread-local storage, and the floating-point
+  context on architectures with a separate floating-point context.
+
+  It is not recommended to mix ${create:/name} and ${.:/name} in an
+  application.  This directive is intended for applications which do not want
+  to use the RTEMS Workspace and instead statically allocate all operating
+  system resources.  The stack space estimate done by <rtems/confdefs.h>
+  assumes that all tasks are created by ${create:/name}.  The estimate can be
+  adjusted to take user-provided task storage areas into account through the
+  ${../../acfg/min-tasks-with-user-provided-storage:/name} application
+  configuration option.
+params:
+- description: is the task configuration.
+  dir: null
+  name: config
+- description: |
+    is the pointer to an object identifier variable.  The identifier of the
+    constructed task object will be stored in this variable, in case of a
+    successful operation.
+  dir: out
+  name: id
+return:
+  return: null
+  return-values:
+  - description: |
+      The requested operation was successful.
+    value: ${../status/successful:/name}
+  - description: |
+      The ${.:/params[1]/name} parameter was ${/if/c/null:/name}.
+    value: ${../status/invalid-address:/name}
+  - description: |
+      The task name was invalid.
+    value: ${../status/invalid-name:/name}
+  - description: |
+      The initial task priority was invalid.
+    value: ${../status/invalid-priority:/name}
+  - description: |
+      The thread-local storage size is greater than the maximum thread-local
+      storage size specified in the task configuration.  The thread-local
+      storage size is determined by the thread-local variables used by the
+      application and ${../../acfg/max-thread-local-storage-size:/name}.
+    value: ${../status/invalid-size:/name}
+  - description: |
+      The task storage area was too small to provide a task stack of the
+      configured minimum size, see ${../../acfg/min-task-stack-size:/name}.
+      The task storage area contains the task stack, the thread-local storage,
+      and the floating-point context on architectures with a separate
+      floating-point context.
+    value: ${../status/invalid-size:/name}
+  - description: |
+      There was no inactive task object available to construct a task.
+    value: ${../status/too-many:/name}
+  - description: |
+      In multiprocessing configurations, there was no inactive global object
+      available to construct a global task.
+    value: ${../status/too-many:/name}
+  - description: |
+      One of the task create extensions failed during the task construction.
+    value: ${../status/unsatisfied:/name}
+  - description: |
+      In SMP configurations, the non-preemption mode was not supported.
+    value: ${../status/unsatisfied:/name}
+  - description: |
+      In SMP configurations, the interrupt level mode was not supported.
+    value: ${../status/unsatisfied:/name}
+type: interface
Index: ec/if/rtems/tasks/create-from-config.yml
===================================================================
--- spec/if/rtems/tasks/create-from-config.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ 	(revision )
@@ -1,92 +1,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-brief: |
-  Creates a task from the specified the task configuration.
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-definition:
-  default:
-    body: null
-    params:
-    - const ${config:/name} *${.:/params[0]/name}
-    - ${../types/id:/name} *${.:/params[1]/name}
-    return: ${../status/code:/name}
-  variants: []
-description: null
-enabled-by: true
-interface-type: function
-links:
-- role: interface-placement
-  uid: header
-- role: interface-ingroup
-  uid: group
-name: rtems_task_create_from_config
-notes: |
-  In contrast to tasks created by ${create:/name}, the tasks created by this
-  directive use a user-provided task storage area.  The task storage area
-  contains the task stack, the thread-local storage, and the floating-point
-  context on architectures with a separate floating-point context.
-
-  It is not recommended to mix ${create:/name} and ${.:/name} in an
-  application.  This directive is intended for applications which do not want
-  to use the RTEMS Workspace and instead statically allocate all operating
-  system resources.  The stack space estimate done by <rtems/confdefs.h>
-  assumes that all tasks are created by ${create:/name}.  The estimate can be
-  adjusted to take user-provided task storage areas into account through the
-  ${../../acfg/tasks-created-from-config:/name} application configuration
-  option or a custom task stack allocator, see
-  ${../../acfg/task-stack-allocator:/name}.
-params:
-- description: is the task configuration.
-  dir: null
-  name: config
-- description: |
-    is the pointer to an object identifier variable.  The identifier of the
-    created task object will be stored in this variable, in case of a
-    successful operation.
-  dir: out
-  name: id
-return:
-  return: null
-  return-values:
-  - description: |
-      The requested operation was successful.
-    value: ${../status/successful:/name}
-  - description: |
-      The ${.:/params[1]/name} parameter was ${/if/c/null:/name}.
-    value: ${../status/invalid-address:/name}
-  - description: |
-      The task name was invalid.
-    value: ${../status/invalid-name:/name}
-  - description: |
-      The initial task priority was invalid.
-    value: ${../status/invalid-priority:/name}
-  - description: |
-      The thread-local storage size is greater than the maximum thread-local
-      storage size specified in the task configuration.  The thread-local
-      storage size is determined by the thread-local variables used by the
-      application and ${../../acfg/max-thread-local-storage-size:/name}.
-    value: ${../status/invalid-size:/name}
-  - description: |
-      The task storage area was too small to provide a task stack of the
-      configured minimum size, see ${../../acfg/min-task-stack-size:/name}.
-      The task storage area contains the task stack, the thread-local storage,
-      and the floating-point context on architectures with a separate
-      floating-point context.
-    value: ${../status/invalid-size:/name}
-  - description: |
-      There was no inactive task object available to create a task.
-    value: ${../status/too-many:/name}
-  - description: |
-      In multiprocessing configurations, there was no inactive global object
-      available to create a global task.
-    value: ${../status/too-many:/name}
-  - description: |
-      One of the task create extensions failed during the task creation.
-    value: ${../status/unsatisfied:/name}
-  - description: |
-      In SMP configurations, the non-preemption mode was not supported.
-    value: ${../status/unsatisfied:/name}
-  - description: |
-      In SMP configurations, the interrupt level mode was not supported.
-    value: ${../status/unsatisfied:/name}
-type: interface
Index: spec/if/rtems/tasks/storage-alignment.yml
===================================================================
--- spec/if/rtems/tasks/storage-alignment.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/if/rtems/tasks/storage-alignment.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -1,11 +1,10 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 brief: |
-  This variable attribute defines the recommended alignment of a task storage
-  area.
+  This constant defines the recommended alignment of a task storage area in
+  bytes.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 definition:
-  default: |
-    ${../basedefs/aligned:/name}( ${../../impl/cpu/stack-alignment:/name} )
+  default: ${../../impl/cpu/heap-alignment:/name}
   variants: []
 description: null
@@ -18,4 +17,6 @@
   uid: group
 name: RTEMS_TASK_STORAGE_ALIGNMENT
-notes: null
+notes: |
+  Use it with ${../basedefs/aligned:/name} to define the alignment of a
+  statically allocated task storage area.
 type: interface
Index: spec/req/rtems/event/send-receive.yml
===================================================================
--- spec/req/rtems/event/send-receive.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/req/rtems/event/send-receive.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -462,12 +462,12 @@
   brief: null
   code: |
-    static char  task_stack[ RTEMS_MINIMUM_STACK_SIZE ];
+    static char  task_storage[ RTEMS_MINIMUM_STACK_SIZE ];
     static const rtems_task_config task_config = {
       .name = rtems_build_name( 'W', 'O', 'R', 'K' ),
       .initial_priority = PRIO_LOW,
-      .stack_area = task_stack,
-      .stack_size = sizeof( task_stack ),
+      .storage_area = task_storage,
+      .storage_size = sizeof( task_storage ),
       .initial_modes = RTEMS_DEFAULT_MODES,
-      .attribute_set = RTEMS_DEFAULT_ATTRIBUTES
+      .attributes = RTEMS_DEFAULT_ATTRIBUTES
     };
 
Index: spec/req/rtems/tasks/construct-errors.yml
===================================================================
--- spec/req/rtems/tasks/construct-errors.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
+++ spec/req/rtems/tasks/construct-errors.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -0,0 +1,499 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+functional-type: action
+links:
+- role: interface-function
+  uid: /if/rtems/tasks/construct
+post-conditions:
+- name: Status
+  states:
+  - name: Ok
+    test-code: |
+      T_rsc_success( ctx->status );
+      T_eq_ptr( ctx->id, &ctx->id_value );
+      T_ne_u32( ctx->id_value, 0xffffffff );
+
+      sc = rtems_task_delete( ctx->id_value );
+      T_rsc_success( sc );
+    text: |
+      The status shall be RTEMS_SUCCESSFUL.  The value of the object identifier
+      referenced by the id parameter shall identify the constructed task.
+  - name: InvAddress
+    test-code: |
+      T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
+      T_null( ctx->id );
+      T_eq_u32( ctx->id_value, 0xffffffff );
+    text: |
+      The status shall be RTEMS_INVALID_ADDRESS.
+  - name: InvName
+    test-code: |
+      T_rsc( ctx->status, RTEMS_INVALID_NAME );
+      T_eq_u32( ctx->id_value, 0xffffffff );
+    text: |
+      The status shall be RTEMS_INVALID_NAME.  If the id parameter is not NULL,
+      then the value of the object identifier referenced by the id parameter
+      shall be unchanged.
+  - name: InvPrio
+    test-code: |
+      T_rsc( ctx->status, RTEMS_INVALID_PRIORITY );
+      T_eq_u32( ctx->id_value, 0xffffffff );
+    text: |
+      The status shall be RTEMS_INVALID_PRIORITY.  If the id parameter is not
+      NULL, then the value of the object identifier referenced by the id
+      parameter shall be unchanged.
+  - name: InvSize
+    test-code: |
+      T_rsc( ctx->status, RTEMS_INVALID_SIZE );
+      T_eq_u32( ctx->id_value, 0xffffffff );
+    text: |
+      The status shall be RTEMS_INVALID_SIZE.  If the id parameter is not NULL,
+      then the value of the object identifier referenced by the id parameter
+      shall be unchanged.
+  - name: TooMany
+    test-code: |
+      T_rsc( ctx->status, RTEMS_TOO_MANY );
+      T_eq_u32( ctx->id_value, 0xffffffff );
+    text: |
+      The status shall be RTEMS_TOO_MANY.  If the id parameter is not NULL,
+      then the value of the object identifier referenced by the id parameter
+      shall be unchanged.
+  - name: Unsatisfied
+    test-code: |
+      T_rsc( ctx->status, RTEMS_UNSATISFIED  );
+      T_eq_u32( ctx->id_value, 0xffffffff );
+    text: |
+      The status shall be RTEMS_UNSATISFIED.  If the id parameter is not NULL,
+      then the value of the object identifier referenced by the id parameter
+      shall be unchanged.
+  test-epilogue: null
+  test-prologue: |
+    rtems_status_code sc;
+pre-conditions:
+- name: Id
+  states:
+  - name: Id
+    test-code: |
+      ctx->id = &ctx->id_value;
+    text: |
+      The id parameter shall reference an object identifier value.
+  - name: 'Null'
+    test-code: |
+      ctx->id = NULL;
+    text: |
+      The id parameter shall be NULL.
+  test-epilogue: null
+  test-prologue: null
+- name: Name
+  states:
+  - name: Valid
+    test-code: |
+      ctx->config.name = rtems_build_name( 'N', 'A', 'M', 'E' );
+    text: |
+      The name of the task configuration shall be valid.
+  - name: Inv
+    test-code: |
+      ctx->config.name = 0;
+    text: |
+      The name of the task configuration shall be invalid.
+  test-epilogue: null
+  test-prologue: null
+- name: Prio
+  states:
+  - name: Valid
+    test-code: |
+      ctx->config.initial_priority = 254;
+    text: |
+      The initial priority of the task configuration shall be valid.
+  - name: Zero
+    test-code: |
+      ctx->config.initial_priority = 0;
+    text: |
+      The initial priority of the task configuration shall be zero.
+  - name: Inv
+    test-code: |
+      ctx->config.initial_priority = 0xffffffff;
+    text: |
+      The initial priority of the task configuration shall be invalid.
+  test-epilogue: null
+  test-prologue: null
+- name: Tasks
+  states:
+  - name: Avail
+    test-code: |
+      /* Nothing to do */
+    text: |
+      There shall be at least one inactive task object available.
+  - name: None
+    test-code: |
+      create_extension_status = ctx->create_extension_status;
+      ctx->create_extension_status = true;
+
+      while ( true ) {
+        rtems_status_code sc;
+        rtems_id id;
+
+        sc = rtems_task_construct( &valid_task_config, &id );
+
+        if ( sc == RTEMS_SUCCESSFUL ) {
+          Objects_Control           *obj;
+          const Objects_Information *info;
+
+          info = _Objects_Get_information_id( id );
+          T_quiet_assert_not_null( info );
+          obj = _Objects_Get_no_protection( id, info );
+          T_quiet_assert_not_null( obj );
+          _Chain_Append_unprotected( &ctx->tasks, &obj->Node );
+        } else {
+          T_quiet_rsc( sc, RTEMS_TOO_MANY );
+          break;
+        }
+      }
+
+      ctx->create_extension_status = create_extension_status;
+    text: |
+      There shall be no inactive task object available.
+  test-epilogue: null
+  test-prologue: |
+    bool create_extension_status;
+- name: TLS
+  states:
+  - name: Enough
+    test-code: |
+      ctx->config.maximum_thread_local_storage_size = MAX_TLS_SIZE;
+    text: |
+      The maximum thread-local storage size of the task configuration shall be
+      greater than or equal to the thread-local storage size.
+  - name: Small
+    test-code: |
+      ctx->config.maximum_thread_local_storage_size = 0;
+    text: |
+      The maximum thread-local storage size of the task configuration shall be
+      less than the thread-local storage size.
+  test-epilogue: null
+  test-prologue: null
+- name: Stack
+  states:
+  - name: Enough
+    test-code: |
+      ctx->stack_size = RTEMS_MINIMUM_STACK_SIZE;
+    text: |
+      The task stack size of the task configuration shall be greater than or
+      equal to the configured minimum size.
+  - name: Small
+    test-code: |
+      ctx->stack_size = 0;
+    text: |
+      The task stack size of the task configuration shall be less than to the
+      configured minimum size.
+  test-epilogue: null
+  test-prologue: null
+- name: Ext
+  states:
+  - name: Ok
+    test-code: |
+      ctx->create_extension_status = true;
+    text: |
+      None of the task create extensions shall fail.
+  - name: Err
+    test-code: |
+      ctx->create_extension_status = false;
+    text: |
+      At least one of the task create extensions shall fail.
+  test-epilogue: null
+  test-prologue: null
+- name: Preempt
+  states:
+  - name: 'Yes'
+    test-code: |
+      ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK;
+      ctx->config.initial_modes |= RTEMS_PREEMPT;
+    text: |
+      The preemptible mode in the initial modes of the task configuration shall
+      be set to preemptible.
+  - name: 'No'
+    test-code: |
+      ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK;
+      ctx->config.initial_modes |= RTEMS_NO_PREEMPT;
+    text: |
+      The preemptible mode in the initial modes of the task configuration shall
+      be set to non-preemptible.
+  test-epilogue: null
+  test-prologue: null
+rationale: null
+references: []
+requirement-type: functional
+skip-reasons: {}
+test-action: |
+  ctx->config.storage_size = RTEMS_TASK_STORAGE_SIZE(
+    ctx->config.maximum_thread_local_storage_size + ctx->stack_size,
+    ctx->config.attributes
+  );
+  ctx->status = rtems_task_construct( &ctx->config, ctx->id );
+test-brief: null
+test-cleanup: |
+  Chain_Node *node;
+
+  while ( ( node = _Chain_Get_unprotected( &ctx->tasks ) ) ) {
+    Objects_Control   *obj;
+    rtems_status_code  sc;
+
+    obj = (Objects_Control *) node;
+    sc = rtems_task_delete( obj->id );
+    T_quiet_rsc_success( sc );
+  }
+test-context:
+- brief: null
+  description: null
+  member: rtems_status_code status
+- brief: null
+  description: null
+  member: rtems_task_config config
+- brief: null
+  description: null
+  member: rtems_id *id
+- brief: null
+  description: null
+  member: rtems_id id_value
+- brief: null
+  description: null
+  member: bool create_extension_status
+- brief: null
+  description: null
+  member: size_t stack_size
+- brief: null
+  description: null
+  member: rtems_id extension_id
+- brief: null
+  description: null
+  member: Chain_Control tasks
+test-context-support: null
+test-description: null
+test-header: null
+test-includes:
+- rtems.h
+- rtems/score/chainimpl.h
+- rtems/score/objectimpl.h
+- string.h
+test-local-includes: []
+test-prepare: |
+  ctx->id_value = 0xffffffff;
+  memset( &ctx->config, 0, sizeof( ctx->config ) );
+test-setup:
+  brief: null
+  code: |
+    rtems_status_code sc;
+    int var;
+
+    var = tls_variable;
+    RTEMS_OBFUSCATE_VARIABLE( var );
+    tls_variable = var;
+
+    sc = rtems_extension_create(
+      rtems_build_name( 'T', 'C', 'F', 'C' ),
+      &extensions,
+      &ctx->extension_id
+    );
+    T_rsc_success( sc );
+
+    _Chain_Initialize_empty( &ctx->tasks );
+  description: null
+test-stop: null
+test-support: |
+  static _Thread_local int tls_variable;
+
+  #define MAX_TLS_SIZE RTEMS_ALIGN_UP( 128, RTEMS_TASK_STORAGE_ALIGNMENT )
+
+  RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char task_storage[
+    RTEMS_TASK_STORAGE_SIZE(
+      MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
+      RTEMS_FLOATING_POINT
+    )
+  ];
+
+  static const rtems_task_config valid_task_config = {
+    .name = rtems_build_name( 'T', 'A', 'S', 'K' ),
+    .initial_priority = 1,
+    .storage_area = task_storage,
+    .storage_size = sizeof( task_storage ),
+    .maximum_thread_local_storage_size = MAX_TLS_SIZE,
+    .initial_modes = RTEMS_DEFAULT_MODES,
+    .attributes = RTEMS_DEFAULT_MODES
+  };
+
+  static bool ThreadCreate( rtems_tcb *executing, rtems_tcb *created )
+  {
+    (void) executing;
+    (void) created;
+
+    return ReqRtemsTasksConstructErrors_Instance.create_extension_status;
+  }
+
+  static const rtems_extensions_table extensions = {
+    .thread_create = ThreadCreate
+  };
+test-target: testsuites/validation/tc-task-construct-errors.c
+test-teardown:
+  brief: null
+  code: |
+    rtems_status_code sc;
+
+    sc = rtems_extension_delete( ctx->extension_id );
+    T_rsc_success( sc );
+  description: null
+text: ${.:text-template}
+transition-map:
+- enabled-by: true
+  post-conditions:
+    Status: Ok
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Valid
+    Tasks:
+    - Avail
+    TLS:
+    - Enough
+    Stack:
+    - Enough
+    Ext:
+    - Ok
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: InvAddress
+  pre-conditions:
+    Id:
+    - 'Null'
+    Name: all
+    Prio: all
+    Tasks: all
+    TLS: all
+    Stack: all
+    Ext: all
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: InvName
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Inv
+    Prio: all
+    Tasks: all
+    TLS: all
+    Stack: all
+    Ext: all
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: InvPrio
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Zero
+    - Inv
+    Tasks: all
+    TLS: all
+    Stack: all
+    Ext: all
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: TooMany
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Valid
+    Tasks:
+    - None
+    TLS: all
+    Stack: all
+    Ext: all
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: InvSize
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Valid
+    Tasks:
+    - Avail
+    TLS:
+    - Small
+    Stack: all
+    Ext: all
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: InvSize
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Valid
+    Tasks:
+    - Avail
+    TLS:
+    - Enough
+    Stack:
+    - Small
+    Ext: all
+    Preempt: all
+- enabled-by: true
+  post-conditions:
+    Status: Unsatisfied
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Valid
+    Tasks:
+    - Avail
+    TLS:
+    - Enough
+    Stack:
+    - Enough
+    Ext:
+    - Err
+    Preempt: all
+- enabled-by: RTEMS_SMP
+  post-conditions:
+    Status: Unsatisfied
+  pre-conditions:
+    Id:
+    - Id
+    Name:
+    - Valid
+    Prio:
+    - Valid
+    Tasks:
+    - Avail
+    TLS:
+    - Enough
+    Stack:
+    - Enough
+    Ext:
+    - Ok
+    Preempt:
+    - 'No'
+type: requirement
Index: ec/req/rtems/tasks/create-from-config-errors.yml
===================================================================
--- spec/req/rtems/tasks/create-from-config-errors.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ 	(revision )
@@ -1,500 +1,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-functional-type: action
-links:
-- role: interface-function
-  uid: /if/rtems/tasks/create-from-config
-post-conditions:
-- name: Status
-  states:
-  - name: Ok
-    test-code: |
-      T_rsc_success( ctx->status );
-      T_eq_ptr( ctx->id, &ctx->id_value );
-      T_ne_u32( ctx->id_value, 0xffffffff );
-
-      sc = rtems_task_delete( ctx->id_value );
-      T_rsc_success( sc );
-    text: |
-      The status shall be RTEMS_SUCCESSFUL.  The value of the object identifier
-      referenced by the id parameter shall identify the created task.
-  - name: InvAddress
-    test-code: |
-      T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
-      T_null( ctx->id );
-      T_eq_u32( ctx->id_value, 0xffffffff );
-    text: |
-      The status shall be RTEMS_INVALID_ADDRESS.
-  - name: InvName
-    test-code: |
-      T_rsc( ctx->status, RTEMS_INVALID_NAME );
-      T_eq_u32( ctx->id_value, 0xffffffff );
-    text: |
-      The status shall be RTEMS_INVALID_NAME.  If the id parameter is not NULL,
-      then the value of the object identifier referenced by the id parameter
-      shall be unchanged.
-  - name: InvPrio
-    test-code: |
-      T_rsc( ctx->status, RTEMS_INVALID_PRIORITY );
-      T_eq_u32( ctx->id_value, 0xffffffff );
-    text: |
-      The status shall be RTEMS_INVALID_PRIORITY.  If the id parameter is not
-      NULL, then the value of the object identifier referenced by the id
-      parameter shall be unchanged.
-  - name: InvSize
-    test-code: |
-      T_rsc( ctx->status, RTEMS_INVALID_SIZE );
-      T_eq_u32( ctx->id_value, 0xffffffff );
-    text: |
-      The status shall be RTEMS_INVALID_SIZE.  If the id parameter is not NULL,
-      then the value of the object identifier referenced by the id parameter
-      shall be unchanged.
-  - name: TooMany
-    test-code: |
-      T_rsc( ctx->status, RTEMS_TOO_MANY );
-      T_eq_u32( ctx->id_value, 0xffffffff );
-    text: |
-      The status shall be RTEMS_TOO_MANY.  If the id parameter is not NULL,
-      then the value of the object identifier referenced by the id parameter
-      shall be unchanged.
-  - name: Unsatisfied
-    test-code: |
-      T_rsc( ctx->status, RTEMS_UNSATISFIED  );
-      T_eq_u32( ctx->id_value, 0xffffffff );
-    text: |
-      The status shall be RTEMS_UNSATISFIED.  If the id parameter is not NULL,
-      then the value of the object identifier referenced by the id parameter
-      shall be unchanged.
-  test-epilogue: null
-  test-prologue: |
-    rtems_status_code sc;
-pre-conditions:
-- name: Id
-  states:
-  - name: Id
-    test-code: |
-      ctx->id = &ctx->id_value;
-    text: |
-      The id parameter shall reference an object identifier value.
-  - name: 'Null'
-    test-code: |
-      ctx->id = NULL;
-    text: |
-      The id parameter shall be NULL.
-  test-epilogue: null
-  test-prologue: null
-- name: Name
-  states:
-  - name: Valid
-    test-code: |
-      ctx->config.name = rtems_build_name( 'N', 'A', 'M', 'E' );
-    text: |
-      The name of the task configuration shall be valid.
-  - name: Inv
-    test-code: |
-      ctx->config.name = 0;
-    text: |
-      The name of the task configuration shall be invalid.
-  test-epilogue: null
-  test-prologue: null
-- name: Prio
-  states:
-  - name: Valid
-    test-code: |
-      ctx->config.initial_priority = 254;
-    text: |
-      The initial priority of the task configuration shall be valid.
-  - name: Zero
-    test-code: |
-      ctx->config.initial_priority = 0;
-    text: |
-      The initial priority of the task configuration shall be zero.
-  - name: Inv
-    test-code: |
-      ctx->config.initial_priority = 0xffffffff;
-    text: |
-      The initial priority of the task configuration shall be invalid.
-  test-epilogue: null
-  test-prologue: null
-- name: Tasks
-  states:
-  - name: Avail
-    test-code: |
-      /* Nothing to do */
-    text: |
-      There shall be at least one inactive task object available.
-  - name: None
-    test-code: |
-      create_extension_status = ctx->create_extension_status;
-      ctx->create_extension_status = true;
-
-      while ( true ) {
-        rtems_status_code sc;
-        rtems_id id;
-
-        sc = rtems_task_create_from_config( &valid_task_config, &id );
-
-        if ( sc == RTEMS_SUCCESSFUL ) {
-          Objects_Control           *obj;
-          const Objects_Information *info;
-
-          info = _Objects_Get_information_id( id );
-          T_quiet_assert_not_null( info );
-          obj = _Objects_Get_no_protection( id, info );
-          T_quiet_assert_not_null( obj );
-          _Chain_Append_unprotected( &ctx->tasks, &obj->Node );
-        } else {
-          T_quiet_rsc( sc, RTEMS_TOO_MANY );
-          break;
-        }
-      }
-
-      ctx->create_extension_status = create_extension_status;
-    text: |
-      There shall be no inactive task object available.
-  test-epilogue: null
-  test-prologue: |
-    bool create_extension_status;
-- name: TLS
-  states:
-  - name: Enough
-    test-code: |
-      ctx->config.maximum_thread_local_storage_size = MAX_TLS_SIZE;
-    text: |
-      The maximum thread-local storage size of the task configuration shall be
-      greater than or equal to the thread-local storage size.
-  - name: Small
-    test-code: |
-      ctx->config.maximum_thread_local_storage_size = 0;
-    text: |
-      The maximum thread-local storage size of the task configuration shall be
-      less than the thread-local storage size.
-  test-epilogue: null
-  test-prologue: null
-- name: Stack
-  states:
-  - name: Enough
-    test-code: |
-      ctx->stack_size = RTEMS_MINIMUM_STACK_SIZE;
-    text: |
-      The task stack size of the task configuration shall be greater than or
-      equal to the configured minimum size.
-  - name: Small
-    test-code: |
-      ctx->stack_size = 0;
-    text: |
-      The task stack size of the task configuration shall be less than to the
-      configured minimum size.
-  test-epilogue: null
-  test-prologue: null
-- name: Ext
-  states:
-  - name: Ok
-    test-code: |
-      ctx->create_extension_status = true;
-    text: |
-      None of the task create extensions shall fail.
-  - name: Err
-    test-code: |
-      ctx->create_extension_status = false;
-    text: |
-      At least one of the task create extensions shall fail.
-  test-epilogue: null
-  test-prologue: null
-- name: Preempt
-  states:
-  - name: 'Yes'
-    test-code: |
-      ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK;
-      ctx->config.initial_modes |= RTEMS_PREEMPT;
-    text: |
-      The preemptible mode in the initial modes of the task configuration shall
-      be set to preemptible.
-  - name: 'No'
-    test-code: |
-      ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK;
-      ctx->config.initial_modes |= RTEMS_NO_PREEMPT;
-    text: |
-      The preemptible mode in the initial modes of the task configuration shall
-      be set to non-preemptible.
-  test-epilogue: null
-  test-prologue: null
-rationale: null
-references: []
-requirement-type: functional
-skip-reasons: {}
-test-action: |
-  ctx->config.storage_size = RTEMS_TASK_STORAGE_SIZE(
-    ctx->config.maximum_thread_local_storage_size + ctx->stack_size,
-    ctx->config.attributes
-  );
-  ctx->status = rtems_task_create_from_config( &ctx->config, ctx->id );
-test-brief: null
-test-cleanup: |
-  Chain_Node *node;
-
-  while ( ( node = _Chain_Get_unprotected( &ctx->tasks ) ) ) {
-    Objects_Control   *obj;
-    rtems_status_code  sc;
-
-    obj = (Objects_Control *) node;
-    sc = rtems_task_delete( obj->id );
-    T_quiet_rsc_success( sc );
-  }
-test-context:
-- brief: null
-  description: null
-  member: rtems_status_code status
-- brief: null
-  description: null
-  member: rtems_task_config config
-- brief: null
-  description: null
-  member: rtems_id *id
-- brief: null
-  description: null
-  member: rtems_id id_value
-- brief: null
-  description: null
-  member: bool create_extension_status
-- brief: null
-  description: null
-  member: size_t stack_size
-- brief: null
-  description: null
-  member: rtems_id extension_id
-- brief: null
-  description: null
-  member: Chain_Control tasks
-test-context-support: null
-test-description: null
-test-header: null
-test-includes:
-- rtems.h
-- rtems/score/chainimpl.h
-- rtems/score/objectimpl.h
-- string.h
-test-local-includes: []
-test-prepare: |
-  ctx->id_value = 0xffffffff;
-  memset( &ctx->config, 0, sizeof( ctx->config ) );
-test-setup:
-  brief: null
-  code: |
-    rtems_status_code sc;
-    int var;
-
-    var = tls_variable;
-    RTEMS_OBFUSCATE_VARIABLE( var );
-    tls_variable = var;
-
-    sc = rtems_extension_create(
-      rtems_build_name( 'T', 'C', 'F', 'C' ),
-      &extensions,
-      &ctx->extension_id
-    );
-    T_rsc_success( sc );
-
-    _Chain_Initialize_empty( &ctx->tasks );
-  description: null
-test-stop: null
-test-support: |
-  static _Thread_local int tls_variable;
-
-  #define MAX_TLS_SIZE 128
-
-  RTEMS_TASK_STORAGE_ALIGNMENT static char task_storage[
-    RTEMS_TASK_STORAGE_SIZE(
-      MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
-      RTEMS_FLOATING_POINT
-    )
-  ];
-
-  static const rtems_task_config valid_task_config = {
-    .name = rtems_build_name( 'T', 'A', 'S', 'K' ),
-    .initial_priority = 1,
-    .storage_area = task_storage,
-    .storage_size = sizeof( task_storage ),
-    .maximum_thread_local_storage_size = MAX_TLS_SIZE,
-    .initial_modes = RTEMS_DEFAULT_MODES,
-    .attributes = RTEMS_DEFAULT_MODES
-  };
-
-  static bool ThreadCreate( rtems_tcb *executing, rtems_tcb *created )
-  {
-    (void) executing;
-    (void) created;
-
-    return
-      ReqRtemsTasksCreateFromConfigErrors_Instance.create_extension_status;
-  }
-
-  static const rtems_extensions_table extensions = {
-    .thread_create = ThreadCreate
-  };
-test-target: testsuites/validation/tc-tasks-create-from-config-errors.c
-test-teardown:
-  brief: null
-  code: |
-    rtems_status_code sc;
-
-    sc = rtems_extension_delete( ctx->extension_id );
-    T_rsc_success( sc );
-  description: null
-text: ${.:text-template}
-transition-map:
-- enabled-by: true
-  post-conditions:
-    Status: Ok
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Valid
-    Tasks:
-    - Avail
-    TLS:
-    - Enough
-    Stack:
-    - Enough
-    Ext:
-    - Ok
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: InvAddress
-  pre-conditions:
-    Id:
-    - 'Null'
-    Name: all
-    Prio: all
-    Tasks: all
-    TLS: all
-    Stack: all
-    Ext: all
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: InvName
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Inv
-    Prio: all
-    Tasks: all
-    TLS: all
-    Stack: all
-    Ext: all
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: InvPrio
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Zero
-    - Inv
-    Tasks: all
-    TLS: all
-    Stack: all
-    Ext: all
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: TooMany
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Valid
-    Tasks:
-    - None
-    TLS: all
-    Stack: all
-    Ext: all
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: InvSize
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Valid
-    Tasks:
-    - Avail
-    TLS:
-    - Small
-    Stack: all
-    Ext: all
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: InvSize
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Valid
-    Tasks:
-    - Avail
-    TLS:
-    - Enough
-    Stack:
-    - Small
-    Ext: all
-    Preempt: all
-- enabled-by: true
-  post-conditions:
-    Status: Unsatisfied
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Valid
-    Tasks:
-    - Avail
-    TLS:
-    - Enough
-    Stack:
-    - Enough
-    Ext:
-    - Err
-    Preempt: all
-- enabled-by: RTEMS_SMP
-  post-conditions:
-    Status: Unsatisfied
-  pre-conditions:
-    Id:
-    - Id
-    Name:
-    - Valid
-    Prio:
-    - Valid
-    Tasks:
-    - Avail
-    TLS:
-    - Enough
-    Stack:
-    - Enough
-    Ext:
-    - Ok
-    Preempt:
-    - 'No'
-type: requirement
Index: spec/req/rtems/tasks/ident.yml
===================================================================
--- spec/req/rtems/tasks/ident.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/req/rtems/tasks/ident.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -85,8 +85,8 @@
       .name = ClassicObjectIdentName,
       .initial_priority = 1,
-      .stack_area = task_storage,
-      .stack_size = sizeof( task_storage ),
+      .storage_area = task_storage,
+      .storage_size = sizeof( task_storage ),
       .initial_modes = RTEMS_DEFAULT_MODES,
-      .attribute_set = RTEMS_DEFAULT_ATTRIBUTES
+      .attributes = RTEMS_DEFAULT_ATTRIBUTES
     };
     rtems_status_code sc;
Index: spec/testsuites/validation-0.yml
===================================================================
--- spec/testsuites/validation-0.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/testsuites/validation-0.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -55,8 +55,10 @@
   }
 
-  #define MAX_TLS_SIZE 64
+  #define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
+
   #define ATTRIBUTES RTEMS_FLOATING_POINT
 
-  RTEMS_TASK_STORAGE_ALIGNMENT static char runner_task_storage[
+  RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT )
+  static char runner_task_storage[
     RTEMS_TASK_STORAGE_SIZE(
       MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
@@ -80,5 +82,5 @@
     rtems_status_code sc;
 
-    sc = rtems_task_create_from_config( &runner_task_config, &id );
+    sc = rtems_task_construct( &runner_task_config, &id );
     if ( sc != RTEMS_SUCCESSFUL ) {
       rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, 1 );
@@ -112,4 +114,7 @@
 
   #define CONFIGURE_MAXIMUM_TASKS 3
+
+  #define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE \
+    CONFIGURE_MAXIMUM_TASKS
 
   #define CONFIGURE_MAXIMUM_TIMERS 3
Index: spec/testsuites/validation/profile.yml
===================================================================
--- spec/testsuites/validation/profile.yml	(revision 51f9a65fce42a4d1cbed71738840d29f3a1257f6)
+++ spec/testsuites/validation/profile.yml	(revision 724df1c5ef711c9399cd8c33b23aee40304d0332)
@@ -36,5 +36,5 @@
   }
 
-  static char init_task_stack[RTEMS_MINIMUM_STACK_SIZE];
+  static char init_task_storage[RTEMS_MINIMUM_STACK_SIZE];
 
   static char buffer[512];
@@ -76,8 +76,8 @@
       .name = NAME,
       .initial_priority = 1,
-      .stack_area = init_task_stack,
-      .stack_size = sizeof(init_task_stack),
+      .storage_area = init_task_storage,
+      .storage_size = sizeof(init_task_storage),
       .initial_modes = RTEMS_DEFAULT_MODES,
-      .attribute_set = RTEMS_DEFAULT_ATTRIBUTES
+      .attributes = RTEMS_DEFAULT_ATTRIBUTES
     };
     rtems_id id;
