Re: [PATCH 2/3] score: Add CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Sebastian Huber

Hello Chris,

On 22/11/2020 23:22, Chris Johns wrote:

On 20/11/20 7:31 pm, Sebastian Huber wrote:

In order to better support applications which use the new
rtems_task_construct() directive add the
CONFIGURE_INIT_TASK_STORAGE_SIZE configuration option.  If this option
is specified, then the Classic API initialization task is constructed
with rtems_task_construct().

The name CONFIGURE_INIT_TASK_STORAGE_SIZE does not reflect the role described
here and is a little ambiguous unless you know the implementation detail.

CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE ?
I am not sure. The storage size is a property of the task. How this 
property is achieved is a detail and may change.


--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: [PATCH] rtems: Delete rtems_object_id_api_maximum_class()

2020-11-23 Thread Sebastian Huber


On 20/11/2020 19:45, Sebastian Huber wrote:

On 20/11/2020 18:56, Joel Sherrill wrote:


It should be implemented. File a ticket if you don't want to do it now.

But don't delete it. It should be there for completeness. I would 
have thought there was code that iterated over all the APIs and 
classes and used it. What is being used instead?


This function was added by

commit 6c06288f6452da96fa630f1482aeaaba5d217531
Author: Joel Sherrill 
Date:   Tue Jan 29 21:52:21 2008 +

    2008-01-29  Joel Sherrill 

    * itron/src/exd_tsk.c, itron/src/task.c, 
libmisc/capture/capture.c,

    libmisc/monitor/mon-config.c, libmisc/monitor/mon-driver.c,
    libmisc/monitor/mon-itask.c, libmisc/monitor/mon-monitor.c,
    libmisc/monitor/mon-mpci.c, libmisc/monitor/mon-object.c,
    libmisc/monitor/mon-symbols.c, posix/src/cancelrun.c,
    posix/src/pthreadexit.c, rtems/Makefile.am, 
rtems/preinstall.am,

    rtems/include/rtems.h, rtems/include/rtems/rtems/support.h,
    rtems/inline/rtems/rtems/tasks.inl, rtems/src/eventmp.c,
    rtems/src/msgmp.c, rtems/src/partmp.c, rtems/src/regionmp.c,
    rtems/src/rtemsobjectgetname.c, rtems/src/semmp.c,
    rtems/src/signalmp.c, rtems/src/taskdelete.c, 
rtems/src/taskmp.c,

    rtems/src/timerserver.c, score/Makefile.am,
    score/include/rtems/score/object.h,
    score/inline/rtems/score/object.inl, score/src/Unlimited.txt,
    score/src/objectgetnameasstring.c,
    score/src/threadqextractwithproxy.c: Add new Object Services
    collection. This changed the name of a few previously 
public but

    undocumented services and added a some new services.
    * rtems/include/rtems/rtems/object.h, 
rtems/src/rtemsbuildid.c,
    rtems/src/rtemsbuildname.c, 
rtems/src/rtemsobjectapimaximumclass.c,

    rtems/src/rtemsobjectapiminimumclass.c,
    rtems/src/rtemsobjectgetapiclassname.c,
    rtems/src/rtemsobjectgetapiname.c,
    rtems/src/rtemsobjectgetclassicname.c,
    rtems/src/rtemsobjectgetclassinfo.c,
    rtems/src/rtemsobjectidapimaximum.c,
    rtems/src/rtemsobjectidapiminimum.c, 
rtems/src/rtemsobjectidgetapi.c,
    rtems/src/rtemsobjectidgetclass.c, 
rtems/src/rtemsobjectidgetindex.c,
    rtems/src/rtemsobjectidgetnode.c, 
rtems/src/rtemsobjectsetname.c,

    score/src/objectapimaximumclass.c, score/src/objectgetinfo.c,
    score/src/objectgetinfoid.c, score/src/objectsetname.c: 
New files.

    * rtems/src/rtemsidtoname.c: Removed.

Nobody noticed that this function is missing in the last twelve years. 
What is the differences to:


/**
 * @brief Get Highest Valid Class Value
 *
 * This method returns the highest valid value Class for the
 * specified @a api. Each API supports a different number
 * of object classes.
 *
 * @param[in] api is the API to obtain the maximum class of
 *
 * @retval This method returns the greatet valid value for
 * class number for the specified @a api.
 */
int rtems_object_api_maximum_class(
  int api
);

To me the removed function looks like some fragment left over from 
development.


We have also this patch which changes the similar 
rtems_object_id_api_minimum_class() in rtems_object_api_minimum_class():


commit fdc57ca4b6794dc17c7b7d94ae557da21e314d6a
Author: Joel Sherrill 
Date:   Mon Nov 23 14:53:04 2009 +

    2009-11-23  Joel Sherrill 

    PR 1460/cpukit
    * rtems/include/rtems/rtems/object.h,
    rtems/src/rtemsobjectapimaximumclass.c,
    rtems/src/rtemsobjectgetapiclassname.c,
    rtems/src/rtemsobjectgetapiname.c,
    rtems/src/rtemsobjectgetclassinfo.c,
    rtems/src/rtemsobjectidapimaximum.c,
    rtems/src/rtemsobjectidapiminimum.c, 
rtems/src/rtemsobjectidgetapi.c,
    rtems/src/rtemsobjectidgetclass.c, 
rtems/src/rtemsobjectidgetindex.c,

    rtems/src/rtemsobjectidgetnode.c: Change return type on methods
    accessing portions of RTEMS Ids to int. This allows -1 to 
be return

    on error.

diff --git a/cpukit/rtems/include/rtems/rtems/object.h 
b/cpukit/rtems/include/rtems/rtems/object.h

index d419a3b095..5a6e97189a 100644
--- a/cpukit/rtems/include/rtems/rtems/object.h
+++ b/cpukit/rtems/include/rtems/rtems/object.h
@@ -249,15 +249,32 @@ rtems_status_code rtems_object_set_name(
  *  specified @a api.  Each API supports a different number
  *  of object classes.
  *
- *  @param[in] api is the API to obtain the maximum class of
+ *  @param[in] api is the API to obtain the minimum class of
  *
  *  @return This method returns the least valid value for
  *  class number for the specified @a api.
  */
-uint32_t rtems_object_id_api_minimum_class(
-  uint32_t api
+int rtems_object_api_minimum_class(
+  int api
+);

We have a rtems_object_api_maximum

Re: Proposal for hardware configuration dependent performance limits

2020-11-23 Thread Sebastian Huber

On 22/11/2020 22:45, Chris Johns wrote:


My point is that we need a key reported by the BSP and then some performance
limits which can be found by arch/bsp/key to check if there are performance
regressions.

I am missing the place where the performance limits are held. Do the tests
report timing values and the checks against the limits happen on a host?

Yes, this is what I proposed.

Thanks and sorry for not picking up on this before now. It makes sense to do it
this way.


I chimed in on the idea of not using a hash, because of the opaqueness
of the specification and difficulty to derive what should be
reasonable performance based on small configuration changes from a
standard set. In that case, we do punt some responsibility to the end
user to start from a configuration with a known hash and performance
bounds before defining their own. Otherwise, the best they can do is
like what we do: run it, record the measurements, and use those as the
bounds moving forward.

When a user sends us a report saying my configuration
a/lwjeVQ:H#TIHFOAH doesn't match the performance of
z./hleg.khEHWIWEHFWHFE then we can have this conversation again. :)

If the user is basing their figures on a set of results we publish would
providing a description in the YAML be sufficient? This moves the burden of
maintenance from being internal to RTEMS to outside. And I am fine if there are
mandatory informational fields.


In the proposal the performance limits are optional in the 
specification. The specifications only enables you to check limits in 
test runs. We should probably not integrate limits for custom hardware 
in the RTEMS Project. We could add performance limits for some 
evaluation boards or simulators which we use for regular test runs to 
notice performance regressions. The configuration hashes included in the 
RTEMS Project need to be documented (in the BSP build item) to have a 
reverse mapping, e.g. XrY7u+Ae7tCTyyK7j1rNww== is board X revision Y 
running at 123MHz with SMP enabled, etc. Users which want to monitor 
performance requirements have to use also this approach:


1. You select a board to use for long term performance tests.

2. You define a set of configurations you want to test.

3. You do an initial run of the test suite for each configuration. The 
RTEMS Tester provides you with a machine readable output (test data) of 
the test run with the raw test output per test executable and some meta 
information (TODO).


4. A tool reads the  test data and the RTEMS specification and updates 
the specification with the performance limits obtained from the test run 
(maybe with some simple transformation, for example increase maximum by 
10% and round to microseconds).


5. You review the performance limits and then commit them to your 
private branch.


6. Later you run the tests with a new RTEMS commit, get the performance 
values, compare them against the limits stored in the specification, and 
generate a report.


Maybe a configuration option for the RTEMS Tester should be added which 
allows you to set the performance hash and ignore the hash provided by 
the test output. This could be used to compare a custom board with 
values obtain from an evaluation board.


--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

[PATCH] libtest: Fix undefined setjmp() behaviour

2020-11-23 Thread Sebastian Huber
Bug was introduced by 78baeb757957fa0807c30e6c4d21ae99c9639e6a.

Update #3199.
---
 cpukit/include/rtems/test.h |   3 +-
 cpukit/libtest/t-test.c | 110 +++-
 2 files changed, 60 insertions(+), 53 deletions(-)

diff --git a/cpukit/include/rtems/test.h b/cpukit/include/rtems/test.h
index 573f7b93c9..f96a5a6892 100644
--- a/cpukit/include/rtems/test.h
+++ b/cpukit/include/rtems/test.h
@@ -2270,6 +2270,7 @@ typedef enum {
T_EVENT_CASE_BEGIN,
T_EVENT_CASE_END,
T_EVENT_CASE_LATE,
+   T_EVENT_CASE_STOP,
T_EVENT_RUN_FINALIZE_EARLY,
T_EVENT_RUN_FINALIZE_LATE
 } T_event;
@@ -2306,7 +2307,7 @@ void T_run_all(void);
 
 void T_run_by_name(const char *);
 
-bool T_case_begin(const char *, const T_fixture *);
+void T_case_begin(const char *, const T_fixture *);
 
 void T_case_end(void);
 
diff --git a/cpukit/libtest/t-test.c b/cpukit/libtest/t-test.c
index ca91d1592f..26521728f4 100644
--- a/cpukit/libtest/t-test.c
+++ b/cpukit/libtest/t-test.c
@@ -67,6 +67,7 @@ typedef struct {
atomic_uint planned_steps;
atomic_uint steps;
atomic_uint failures;
+   bool case_begin_context_valid;
jmp_buf case_begin_context;
unsigned int fixture_steps;
unsigned int overall_cases;
@@ -507,6 +508,37 @@ T_add_failure(T_context *ctx)
memory_order_relaxed);
 }
 
+static void
+T_actions_forward(const T_config *config, T_event event, const char *name)
+{
+   const T_action *actions;
+   size_t n;
+   size_t i;
+
+   actions = config->actions;
+   n = config->action_count;
+
+   for (i = 0; i < n; ++i) {
+   (*actions[i])(event, name);
+   }
+}
+
+static void
+T_actions_backward(const T_config *config, T_event event,
+const char *name)
+{
+   const T_action *actions;
+   size_t n;
+   size_t i;
+
+   actions = config->actions;
+   n = config->action_count;
+
+   for (i = 0; i < n; ++i) {
+   (*actions[n - i - 1])(event, name);
+   }
+}
+
 T_NO_RETURN static void
 T_do_stop(T_context *ctx)
 {
@@ -516,17 +548,26 @@ T_do_stop(T_context *ctx)
 
while (node != NULL) {
const T_fixture *fixture;
+   void *node_context;
 
fixture = node->fixture;
+   node_context = node->context;
+   node = node->next;
 
if (fixture != NULL && fixture->stop != NULL) {
-   (*fixture->stop)(node->context);
+   (*fixture->stop)(node_context);
}
-
-   node = node->next;
}
 
-   longjmp(ctx->case_begin_context, 1);
+   if (T_do_is_runner(ctx) && ctx->case_begin_context_valid) {
+   longjmp(ctx->case_begin_context, 1);
+   } else {
+   T_actions_backward(ctx->config, T_EVENT_CASE_STOP,
+   T_case_name());
+#ifdef __GNUC__
+   __builtin_unreachable();
+#endif
+   }
 }
 
 T_NO_RETURN void
@@ -878,37 +919,6 @@ T_call_destructors(const T_context *ctx)
 #endif
 }
 
-static void
-T_actions_forward(const T_config *config, T_event event, const char *name)
-{
-   const T_action *actions;
-   size_t n;
-   size_t i;
-
-   actions = config->actions;
-   n = config->action_count;
-
-   for (i = 0; i < n; ++i) {
-   (*actions[i])(event, name);
-   }
-}
-
-static void
-T_actions_backward(const T_config *config, T_event event,
-const char *name)
-{
-   const T_action *actions;
-   size_t n;
-   size_t i;
-
-   actions = config->actions;
-   n = config->action_count;
-
-   for (i = 0; i < n; ++i) {
-   (*actions[n - i - 1])(event, name);
-   }
-}
-
 static T_context *
 T_do_run_initialize(const T_config *config)
 {
@@ -948,7 +958,7 @@ T_do_run_initialize(const T_config *config)
return ctx;
 }
 
-static bool
+static void
 T_do_case_begin(T_context *ctx, const T_case_context *tc)
 {
const T_config *config;
@@ -969,23 +979,16 @@ T_do_case_begin(T_context *ctx, const T_case_context *tc)
T_actions_forward(config, T_EVENT_CASE_EARLY, tc->name);
T_do_log(ctx, T_NORMAL, "B:%s\n", tc->name);
ctx->case_begin_time = (*config->now)();
+   T_actions_forward(config, T_EVENT_CASE_BEGIN, tc->name);
 
-   if (setjmp(ctx->case_begin_context) == 0) {
-   T_actions_forward(config, T_EVENT_CASE_BEGIN, tc->name);
-
-   if (fixture != NULL) {
-   ctx->case_fixture.fixture = fixture;
-   ctx->case_fixture.context = fixture->initial_context;
+   if (fixture != NULL) {
+   ctx->case_fixture.fixture = fixture;
+   ctx->case_fixture.context = fixture->initial_context;
 
-   if (fixture->setup != NULL) {
-   (*fixture->setup)(ctx->case_fixture.context);
-   }
+   if (

Re: [PATCH 5/8] libtest: Allow assert checks during test begin

2020-11-23 Thread Sebastian Huber

On 21/11/2020 01:47, Kinsey Moore wrote:


-Original Message-
From: devel  On Behalf Of Sebastian Huber
Sent: Friday, November 13, 2020 04:08
To:devel@rtems.org
Subject: [PATCH 5/8] libtest: Allow assert checks during test begin


Allow assert checks in test begin actions and setup fixture methods.
---
  cpukit/include/rtems/test.h |  2 +-
  cpukit/libtest/t-test.c | 29 +
  2 files changed, 18 insertions(+), 13 deletions(-)

This patch appears to have broken ttest01.exe for arm/xilinx-zynq as well as 
aarch64 targets. I suspect it has also broken other arm targets. I tried 
looking into the failure, but I'm unfamiliar with the test framework in use.


Thanks for the report. I managed to implement a completely undefined 
setjmp()/longjmp() behaviour. I fixed it like this:


https://lists.rtems.org/pipermail/devel/2020-November/063424.html

--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

[PATCH v2 5/6] rtems: Move _Partition_Initialize()

2020-11-23 Thread Sebastian Huber
It is only used by rtems_partition_create().  Fix integer types.
---
 cpukit/include/rtems/rtems/partimpl.h | 25 -
 cpukit/rtems/src/partcreate.c | 25 +
 2 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/cpukit/include/rtems/rtems/partimpl.h 
b/cpukit/include/rtems/rtems/partimpl.h
index dcffe757c7..ab0bdc76f7 100644
--- a/cpukit/include/rtems/rtems/partimpl.h
+++ b/cpukit/include/rtems/rtems/partimpl.h
@@ -19,7 +19,6 @@
 #define _RTEMS_RTEMS_PARTIMPL_H
 
 #include 
-#include 
 #include 
 
 #ifdef __cplusplus
@@ -46,30 +45,6 @@ RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate 
( void )
   return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
 }
 
-RTEMS_INLINE_ROUTINE void _Partition_Initialize(
-  Partition_Control *the_partition,
-  void  *starting_address,
-  uint32_t   length,
-  uint32_t   buffer_size,
-  rtems_attributeattribute_set
-)
-{
-  the_partition->starting_address  = starting_address;
-  the_partition->length= length;
-  the_partition->buffer_size   = buffer_size;
-  the_partition->attribute_set = attribute_set;
-  the_partition->number_of_used_blocks = 0;
-
-  _Chain_Initialize(
-&the_partition->Memory,
-starting_address,
-length / buffer_size,
-buffer_size
-  );
-
-  _ISR_lock_Initialize( &the_partition->Lock, "Partition" );
-}
-
 /**
  * @brief Calls _Objects_Get() using the ::_Partition_Information.
  *
diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index 743405439c..1ac08d6bc0 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -23,9 +23,34 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
+static void _Partition_Initialize(
+  Partition_Control *the_partition,
+  void  *starting_address,
+  uintptr_t  length,
+  size_t buffer_size,
+  rtems_attributeattribute_set
+)
+{
+  the_partition->starting_address  = starting_address;
+  the_partition->length= length;
+  the_partition->buffer_size   = buffer_size;
+  the_partition->attribute_set = attribute_set;
+  the_partition->number_of_used_blocks = 0;
+
+  _Chain_Initialize(
+&the_partition->Memory,
+starting_address,
+length / buffer_size,
+buffer_size
+  );
+
+  _ISR_lock_Initialize( &the_partition->Lock, "Partition" );
+}
+
 rtems_status_code rtems_partition_create(
   rtems_name   name,
   void*starting_address,
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 0/6] Move inline functions of Partition Manager

2020-11-23 Thread Sebastian Huber
Sebastian Huber (6):
  rtems: Move _Partition_Is_buffer_valid()
  rtems: Move _Partition_Is_buffer_on_boundary()
  rtems: Move _Partition_Is_buffer_size_aligned()
  rtems: Move _Partition_Is_buffer_area_aligned()
  rtems: Move _Partition_Initialize()
  rtems: Move _Partition_Allocate()

 cpukit/include/rtems/rtems/partimpl.h | 96 ---
 cpukit/rtems/src/partcreate.c | 44 +++-
 cpukit/rtems/src/partreturnbuffer.c   | 33 -
 3 files changed, 74 insertions(+), 99 deletions(-)

-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 1/6] rtems: Move _Partition_Is_buffer_valid()

2020-11-23 Thread Sebastian Huber
It is used only in one place.  Make the PTCB the first parameter.
Rename it to _Partition_Is_address_a_buffer_begin().
---
 cpukit/include/rtems/rtems/partimpl.h | 23 ---
 cpukit/rtems/src/partreturnbuffer.c   | 18 +-
 2 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/cpukit/include/rtems/rtems/partimpl.h 
b/cpukit/include/rtems/rtems/partimpl.h
index fc17311803..23d5422bec 100644
--- a/cpukit/include/rtems/rtems/partimpl.h
+++ b/cpukit/include/rtems/rtems/partimpl.h
@@ -56,29 +56,6 @@ RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_on_boundary (
   return ((offset % the_partition->buffer_size) == 0);
 }
 
-/**
- *  @brief Checks whether the_buffer is a valid buffer from the_partition.
- *
- *  This function returns TRUE if the_buffer is a valid buffer from
- *  the_partition, otherwise FALSE is returned.
- */
-RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_valid (
-   Chain_Node*the_buffer,
-   Partition_Control *the_partition
-)
-{
-  void *starting;
-  void *ending;
-
-  starting = the_partition->starting_address;
-  ending   = _Addresses_Add_offset( starting, the_partition->length );
-
-  return (
-_Addresses_Is_in_range( the_buffer, starting, ending ) &&
-_Partition_Is_buffer_on_boundary( the_buffer, the_partition )
-  );
-}
-
 RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_size_aligned(
   uint32_t buffer_size
 )
diff --git a/cpukit/rtems/src/partreturnbuffer.c 
b/cpukit/rtems/src/partreturnbuffer.c
index 9afda8f85e..08cbf9ecee 100644
--- a/cpukit/rtems/src/partreturnbuffer.c
+++ b/cpukit/rtems/src/partreturnbuffer.c
@@ -21,8 +21,24 @@
 #endif
 
 #include 
+#include 
 #include 
 
+static bool _Partition_Is_address_a_buffer_begin(
+   const Partition_Control *the_partition,
+   const void  *the_buffer
+)
+{
+  void *starting;
+  void *ending;
+
+  starting = the_partition->starting_address;
+  ending   = _Addresses_Add_offset( starting, the_partition->length );
+
+  return _Addresses_Is_in_range( the_buffer, starting, ending )
+&& _Partition_Is_buffer_on_boundary( the_buffer, the_partition );
+}
+
 static void _Partition_Free_buffer(
   Partition_Control *the_partition,
   void  *the_buffer
@@ -51,7 +67,7 @@ rtems_status_code rtems_partition_return_buffer(
 
   _Partition_Acquire_critical( the_partition, &lock_context );
 
-  if ( !_Partition_Is_buffer_valid( buffer, the_partition ) ) {
+  if ( !_Partition_Is_address_a_buffer_begin( the_partition, buffer ) ) {
 _Partition_Release( the_partition, &lock_context );
 return RTEMS_INVALID_ADDRESS;
   }
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 4/6] rtems: Move _Partition_Is_buffer_area_aligned()

2020-11-23 Thread Sebastian Huber
It is only used by rtems_partition_create().  Move code directly to the
directive which called the inline function.  Add a comment.
---
 cpukit/include/rtems/rtems/partimpl.h | 7 ---
 cpukit/rtems/src/partcreate.c | 7 ++-
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/cpukit/include/rtems/rtems/partimpl.h 
b/cpukit/include/rtems/rtems/partimpl.h
index b9d57ae3c3..dcffe757c7 100644
--- a/cpukit/include/rtems/rtems/partimpl.h
+++ b/cpukit/include/rtems/rtems/partimpl.h
@@ -34,13 +34,6 @@ extern "C" {
  * @{
  */
 
-RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_area_aligned(
-  const void *starting_address
-)
-{
-  return (((uintptr_t) starting_address) % CPU_SIZEOF_POINTER) == 0;
-}
-
 /**
  *  @brief Allocates a partition control block from the
  *  inactive chain of free partition control blocks.
diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index 1e471d3c0a..743405439c 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -69,8 +69,13 @@ rtems_status_code rtems_partition_create(
   if ( buffer_size < sizeof( Chain_Node ) )
 return RTEMS_INVALID_SIZE;
 
-  if ( !_Partition_Is_buffer_area_aligned( starting_address ) )
+  /*
+   * Ensure that the buffer area starting address is aligned on a pointer
+   * boundary so that each buffer begin meets the chain node alignment.
+   */
+  if ( (uintptr_t) starting_address % CPU_SIZEOF_POINTER != 0 ) {
 return RTEMS_INVALID_ADDRESS;
+  }
 
 #if defined(RTEMS_MULTIPROCESSING)
   if ( !_System_state_Is_multiprocessing ) {
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 2/6] rtems: Move _Partition_Is_buffer_on_boundary()

2020-11-23 Thread Sebastian Huber
It is used only by rtems_partition_return_buffer().Make the PTCB the
first parameter.  Rename to _Partition_Is_address_on_buffer_boundary().
---
 cpukit/include/rtems/rtems/partimpl.h | 22 --
 cpukit/rtems/src/partreturnbuffer.c   | 17 -
 2 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/cpukit/include/rtems/rtems/partimpl.h 
b/cpukit/include/rtems/rtems/partimpl.h
index 23d5422bec..0d15d1e991 100644
--- a/cpukit/include/rtems/rtems/partimpl.h
+++ b/cpukit/include/rtems/rtems/partimpl.h
@@ -19,7 +19,6 @@
 #define _RTEMS_RTEMS_PARTIMPL_H
 
 #include 
-#include 
 #include 
 #include 
 
@@ -35,27 +34,6 @@ extern "C" {
  * @{
  */
 
-/**
- *  @brief Checks whether is on a valid buffer boundary for the_partition.
- *
- *  This function returns TRUE if the_buffer is on a valid buffer
- *  boundary for the_partition, and FALSE otherwise.
- */
-RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_on_boundary (
-  void  *the_buffer,
-  Partition_Control *the_partition
-)
-{
-  intptr_t offset;
-
-  offset = _Addresses_Subtract(
-the_buffer,
-the_partition->starting_address
-  );
-
-  return ((offset % the_partition->buffer_size) == 0);
-}
-
 RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_size_aligned(
   uint32_t buffer_size
 )
diff --git a/cpukit/rtems/src/partreturnbuffer.c 
b/cpukit/rtems/src/partreturnbuffer.c
index 08cbf9ecee..6d7b71a7e5 100644
--- a/cpukit/rtems/src/partreturnbuffer.c
+++ b/cpukit/rtems/src/partreturnbuffer.c
@@ -24,6 +24,21 @@
 #include 
 #include 
 
+static bool _Partition_Is_address_on_buffer_boundary(
+  const Partition_Control *the_partition,
+  const void  *the_buffer
+)
+{
+  intptr_t offset;
+
+  offset = _Addresses_Subtract(
+the_buffer,
+the_partition->starting_address
+  );
+
+  return ( offset % the_partition->buffer_size ) == 0;
+}
+
 static bool _Partition_Is_address_a_buffer_begin(
const Partition_Control *the_partition,
const void  *the_buffer
@@ -36,7 +51,7 @@ static bool _Partition_Is_address_a_buffer_begin(
   ending   = _Addresses_Add_offset( starting, the_partition->length );
 
   return _Addresses_Is_in_range( the_buffer, starting, ending )
-&& _Partition_Is_buffer_on_boundary( the_buffer, the_partition );
+&& _Partition_Is_address_on_buffer_boundary( the_partition, the_buffer );
 }
 
 static void _Partition_Free_buffer(
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 3/6] rtems: Move _Partition_Is_buffer_size_aligned()

2020-11-23 Thread Sebastian Huber
It is only used by rtems_partition_create().  Move code directly into
the directive which called the inline function.
---
 cpukit/include/rtems/rtems/partimpl.h | 7 ---
 cpukit/rtems/src/partcreate.c | 7 ++-
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/cpukit/include/rtems/rtems/partimpl.h 
b/cpukit/include/rtems/rtems/partimpl.h
index 0d15d1e991..b9d57ae3c3 100644
--- a/cpukit/include/rtems/rtems/partimpl.h
+++ b/cpukit/include/rtems/rtems/partimpl.h
@@ -34,13 +34,6 @@ extern "C" {
  * @{
  */
 
-RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_size_aligned(
-  uint32_t buffer_size
-)
-{
-  return (buffer_size % CPU_SIZEOF_POINTER) == 0;
-}
-
 RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_area_aligned(
   const void *starting_address
 )
diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index 9d4c7df283..1e471d3c0a 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -58,8 +58,13 @@ rtems_status_code rtems_partition_create(
   if ( length < buffer_size )
 return RTEMS_INVALID_SIZE;
 
-  if ( !_Partition_Is_buffer_size_aligned( buffer_size ) )
+  /*
+   * Ensure that the buffer size is an integral multiple of the pointer size so
+   * that each buffer begin meets the chain node alignment.
+   */
+  if ( buffer_size % CPU_SIZEOF_POINTER != 0 ) {
 return RTEMS_INVALID_SIZE;
+  }
 
   if ( buffer_size < sizeof( Chain_Node ) )
 return RTEMS_INVALID_SIZE;
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 6/6] rtems: Move _Partition_Allocate()

2020-11-23 Thread Sebastian Huber
It is only used by rtems_partition_create().
---
 cpukit/include/rtems/rtems/partimpl.h | 12 
 cpukit/rtems/src/partcreate.c |  5 +
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/cpukit/include/rtems/rtems/partimpl.h 
b/cpukit/include/rtems/rtems/partimpl.h
index ab0bdc76f7..e2325bf8b5 100644
--- a/cpukit/include/rtems/rtems/partimpl.h
+++ b/cpukit/include/rtems/rtems/partimpl.h
@@ -33,18 +33,6 @@ extern "C" {
  * @{
  */
 
-/**
- *  @brief Allocates a partition control block from the
- *  inactive chain of free partition control blocks.
- *
- *  This function allocates a partition control block from
- *  the inactive chain of free partition control blocks.
- */
-RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void )
-{
-  return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
-}
-
 /**
  * @brief Calls _Objects_Get() using the ::_Partition_Information.
  *
diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index 1ac08d6bc0..7eea6b3bcf 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -27,6 +27,11 @@
 #include 
 #include 
 
+static Partition_Control *_Partition_Allocate( void )
+{
+  return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
+}
+
 static void _Partition_Initialize(
   Partition_Control *the_partition,
   void  *starting_address,
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Spike Hung for Almost Two Days

2020-11-23 Thread Joel Sherrill
Hi

I started my Monday by checking in on a build sweep and noticed that a test
was hung and still running from Saturday. This is on CentOS. Anyone else
ever see this from Spike?

0 R joel 24992 24151 99  80   0 - 529380 - Nov21 ?
 1-22:33:37 spike --isa=RV64IMAFD
./riscv-rtems6/c/rv64imafd_medany/testsuites/libtests/dl10.exe

--joel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: libdl: How to debug dl object with GDB

2020-11-23 Thread Hesham Almatary
Thanks, Chris for the detailed reply.

On Thu, 19 Nov 2020 at 22:56, Chris Johns  wrote:
>
> On 19/11/20 5:33 pm, Hesham Almatary wrote:
> > Thanks for the info, Chris.
> >
> > On Wed, 18 Nov 2020 at 02:43, Chris Johns  wrote:
> >> On 17/11/20 10:43 pm, Hesham Almatary wrote:
> >>> Hello,
> >>>
> >>> I am trying to debug a dynamically loaded ELF object with GDB: My setup 
> >>> is:
> >>> rtems-riscv64:
> >>> GDB: GNU gdb (GDB) 10.0.50.20200904-git (build with RSB/rtems6)
> >>> Host: Ubuntu 20.04.1 LTS
> >>>
> >>> GDB doesn't seem to notice when I dlopen an object (which gets loaded,
> >>> linked and run fine).
> >>
> >> libdl has the NetBSD type support built in for debugging. A function is 
> >> called
> >> when a module is loaded and there is a table of modules GDB reads and then 
> >> loads
> >> the object file.
> >>
> > Is that expected to work on Linux with recent GDB versions?
>
> We need a patch for GDB to add the support needed for RTEMS.
>
Right, that's what I thought too.

> > GDB
> > doesn't seem to detect when "_rtld_debug_state" is called from dlopen,
> > and consequently isn't aware of the list of objects. Does that need
> > GDB to be modified with solib-rtems* or something?
>
> A patch was created as part the 2013 RTL GSoC project (an excellent year for
> students :)). The repo is https://github.com/MrVan/gdb/commits/rtems-gdb. The
> only problem is GDB has moved to C++ since then and I am not sure what effect
> that has had on the patch.
>
That's really helpful. It would have been great if that got merged,
still, it's a good reference now for someone who might add back RTEMS
support.

> >>> Any instructions or idea how to troubleshoot that further?
> >>
> >> At this point the simplest path is to get the load address(es) and load the
> >> symbols with the VMA.
> >>
> > I can use "add-symbol-file" filename for each object and give it the
> > text_base address. This only allows me to break on functions within
> > loaded objects. If that's not what you mean, how can I load the
> > symbols with the VMA?
>
> I think using a command is always going to be a bit of a hack. The patch Peng
> created allowed you to set breakpoints in code that was not loaded and it 
> would
> break when loaded _and_ executed.
>

> Chris



-- 
Hesham
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


RE: [PATCH] libtest: Fix undefined setjmp() behaviour

2020-11-23 Thread Kinsey Moore
-Original Message-
From: devel  On Behalf Of Sebastian Huber
Sent: Monday, November 23, 2020 03:19
To: devel@rtems.org
Subject: [PATCH] libtest: Fix undefined setjmp() behaviour

> Bug was introduced by 78baeb757957fa0807c30e6c4d21ae99c9639e6a.
>
> Update #3199.
> ---
>  cpukit/include/rtems/test.h |   3 +-
>  cpukit/libtest/t-test.c | 110 +++-
>  2 files changed, 60 insertions(+), 53 deletions(-)

This fixes the bug for me, thanks!

Kinsey
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: Spike Hung for Almost Two Days

2020-11-23 Thread Joel Sherrill
On Mon, Nov 23, 2020, 8:10 AM Joel Sherrill  wrote:

> Hi
>
> I started my Monday by checking in on a build sweep and noticed that a
> test was hung and still running from Saturday. This is on CentOS. Anyone
> else ever see this from Spike?
>
> 0 R joel 24992 24151 99  80   0 - 529380 - Nov21 ?
>  1-22:33:37 spike --isa=RV64IMAFD
> ./riscv-rtems6/c/rv64imafd_medany/testsuites/libtests/dl10.exe
>

After sending that, it occurred to me that the RTEMS tester should have
killed it :(

>
> --joel
>
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

[PATCH] rtems: Improve rtems_interrupt_server_create()

2020-11-23 Thread Sebastian Huber
Also start interrupt server tasks on processors which do not have a
scheduler.  Applications may dynamically manage processors using
rtems_scheduler_remove_processor() and rtems_scheduler_add_processor().
---
 bsps/shared/irq/irq-server.c | 30 +++--
 testsuites/smptests/smpirqs01/init.c | 65 +++-
 2 files changed, 80 insertions(+), 15 deletions(-)

diff --git a/bsps/shared/irq/irq-server.c b/bsps/shared/irq/irq-server.c
index 19d03dc33f..2c8df4952c 100644
--- a/bsps/shared/irq/irq-server.c
+++ b/bsps/shared/irq/irq-server.c
@@ -506,9 +506,6 @@ static rtems_status_code bsp_interrupt_server_create(
   cpu_set_t cpu;
 #endif
 
-  rtems_interrupt_lock_initialize(&s->lock, "Interrupt Server");
-  rtems_chain_initialize_empty(&s->entries);
-
   sc = rtems_task_create(
 rtems_build_name('I', 'R', 'Q', 'S'),
 priority,
@@ -518,23 +515,30 @@ static rtems_status_code bsp_interrupt_server_create(
 &s->server
   );
   if (sc != RTEMS_SUCCESSFUL) {
+(*s->destroy)(s);
 return sc;
   }
 
+  rtems_interrupt_lock_initialize(&s->lock, "Interrupt Server");
+  rtems_chain_initialize_empty(&s->entries);
+
 #if defined(RTEMS_SMP)
   sc = rtems_scheduler_ident_by_processor(cpu_index, &scheduler);
-  if (sc != RTEMS_SUCCESSFUL) {
-/* Do not start an interrupt server on a processor without a scheduler */
-return RTEMS_SUCCESSFUL;
-  }
 
-  sc = rtems_task_set_scheduler(s->server, scheduler, priority);
-  _Assert(sc == RTEMS_SUCCESSFUL);
+  /*
+   * If a scheduler exists for the processor, then move it to this scheduler
+   * and try to set the affinity to the processor, otherwise keep the scheduler
+   * of the executing thread.
+   */
+  if (sc == RTEMS_SUCCESSFUL) {
+sc = rtems_task_set_scheduler(s->server, scheduler, priority);
+_Assert(sc == RTEMS_SUCCESSFUL);
 
-  /* Set the task to processor affinity on a best-effort basis */
-  CPU_ZERO(&cpu);
-  CPU_SET(cpu_index, &cpu);
-  (void) rtems_task_set_affinity(s->server, sizeof(cpu), &cpu);
+/* Set the task to processor affinity on a best-effort basis */
+CPU_ZERO(&cpu);
+CPU_SET(cpu_index, &cpu);
+(void) rtems_task_set_affinity(s->server, sizeof(cpu), &cpu);
+  }
 #else
   (void) cpu_index;
 #endif
diff --git a/testsuites/smptests/smpirqs01/init.c 
b/testsuites/smptests/smpirqs01/init.c
index 4350647ca5..03238227fd 100644
--- a/testsuites/smptests/smpirqs01/init.c
+++ b/testsuites/smptests/smpirqs01/init.c
@@ -64,11 +64,10 @@ static void ensure_server_termination(void)
   T_rsc_success(sc);
 }
 
-T_TEST_CASE(InterruptServerSMPInitializeDestroy)
+T_TEST_CASE(InterruptServerSMPInitializeIncorrectState)
 {
   rtems_status_code sc;
   uint32_t server_count;
-  void *greedy;
 
   T_assert_eq_u32(rtems_scheduler_get_processor_maximum(), 2);
 
@@ -104,6 +103,14 @@ T_TEST_CASE(InterruptServerSMPInitializeDestroy)
   sc = rtems_interrupt_server_delete(1);
   T_rsc_success(sc);
   ensure_server_termination();
+}
+
+T_TEST_CASE(InterruptServerSMPInitializeInvalidPriority)
+{
+  rtems_status_code sc;
+  uint32_t server_count;
+
+  T_assert_eq_u32(rtems_scheduler_get_processor_maximum(), 2);
 
   server_count = 456;
   sc = rtems_interrupt_server_initialize(
@@ -134,6 +141,15 @@ T_TEST_CASE(InterruptServerSMPInitializeDestroy)
   sc = rtems_interrupt_server_delete(1);
   T_rsc_success(sc);
   ensure_server_termination();
+}
+
+T_TEST_CASE(InterruptServerSMPInitializeNoMemory)
+{
+  rtems_status_code sc;
+  uint32_t server_count;
+  void *greedy;
+
+  T_assert_eq_u32(rtems_scheduler_get_processor_maximum(), 2);
 
   greedy = rtems_heap_greedy_allocate(NULL, 0);
 
@@ -158,6 +174,51 @@ T_TEST_CASE(InterruptServerSMPInitializeDestroy)
   T_rsc(sc, RTEMS_INVALID_ID);
 }
 
+T_TEST_CASE(InterruptServerSMPInitializeNoScheduler)
+{
+  rtems_status_code sc;
+  uint32_t server_count;
+  rtems_id scheduler_id;
+  rtems_task_priority prio;
+
+  T_assert_eq_u32(rtems_scheduler_get_processor_maximum(), 2);
+
+  scheduler_id = 0;
+  sc = rtems_scheduler_ident_by_processor(1, &scheduler_id);
+  T_rsc_success(sc);
+  T_ne_u32(scheduler_id, 0);
+
+  sc = rtems_scheduler_remove_processor(scheduler_id, 1);
+  T_rsc_success(sc);
+
+  server_count = 456;
+  sc = rtems_interrupt_server_initialize(
+123,
+RTEMS_MINIMUM_STACK_SIZE,
+RTEMS_DEFAULT_MODES,
+RTEMS_DEFAULT_ATTRIBUTES,
+&server_count
+  );
+  T_rsc_success(sc);
+  T_eq_u32(server_count, 2);
+
+  sc = rtems_interrupt_server_delete(0);
+  T_rsc_success(sc);
+
+  sc = rtems_interrupt_server_delete(1);
+  T_rsc_success(sc);
+
+  prio = 0;
+  sc = rtems_task_set_priority(RTEMS_SELF, 124, &prio);
+  T_rsc_success(sc);
+
+  sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
+  T_rsc_success(sc);
+
+  sc = rtems_scheduler_add_processor(scheduler_id, 1);
+  T_rsc_success(sc);
+}
+
 const char rtems_test_name[] = "SMPIRQS 1";
 
 static void Init(rtems_task_argument argument)
-- 
2.26.2

___
devel mailing lis

Re: [PATCH v2 3/6] rtems: Move _Partition_Is_buffer_size_aligned()

2020-11-23 Thread Gedare Bloom
Thanks

On Mon, Nov 23, 2020 at 3:36 AM Sebastian Huber
 wrote:
>
> It is only used by rtems_partition_create().  Move code directly into
> the directive which called the inline function.
> ---
>  cpukit/include/rtems/rtems/partimpl.h | 7 ---
>  cpukit/rtems/src/partcreate.c | 7 ++-
>  2 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/cpukit/include/rtems/rtems/partimpl.h 
> b/cpukit/include/rtems/rtems/partimpl.h
> index 0d15d1e991..b9d57ae3c3 100644
> --- a/cpukit/include/rtems/rtems/partimpl.h
> +++ b/cpukit/include/rtems/rtems/partimpl.h
> @@ -34,13 +34,6 @@ extern "C" {
>   * @{
>   */
>
> -RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_size_aligned(
> -  uint32_t buffer_size
> -)
> -{
> -  return (buffer_size % CPU_SIZEOF_POINTER) == 0;
> -}
> -
>  RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_area_aligned(
>const void *starting_address
>  )
> diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
> index 9d4c7df283..1e471d3c0a 100644
> --- a/cpukit/rtems/src/partcreate.c
> +++ b/cpukit/rtems/src/partcreate.c
> @@ -58,8 +58,13 @@ rtems_status_code rtems_partition_create(
>if ( length < buffer_size )
>  return RTEMS_INVALID_SIZE;
>
> -  if ( !_Partition_Is_buffer_size_aligned( buffer_size ) )
> +  /*
> +   * Ensure that the buffer size is an integral multiple of the pointer size 
> so
> +   * that each buffer begin meets the chain node alignment.
> +   */
> +  if ( buffer_size % CPU_SIZEOF_POINTER != 0 ) {
>  return RTEMS_INVALID_SIZE;
> +  }
>
>if ( buffer_size < sizeof( Chain_Node ) )
>  return RTEMS_INVALID_SIZE;
> --
> 2.26.2
>
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH] wscript: Apply test state expectations correctly

2020-11-23 Thread Kinsey Moore
The variety of expected test states are not currently applied to tests
with names containing '-' correctly due to a failure to replace '-' with
'_' before adding the CPPFLAGS to the environment for that test. This
ensures that all additions of CPPFLAGS have that replacement performed
so that the CPPFLAGS are applied properly during compilation.
---
 wscript | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/wscript b/wscript
index 5ad93de453..f5b7629b3b 100755
--- a/wscript
+++ b/wscript
@@ -723,7 +723,7 @@ class OptionItem(Item):
 print("{} = {}".format(self.data["name"], value))
 
 def _do_append_test_cppflags(self, conf, name, state):
-conf.env.append_value("TEST_" + name.upper() + "_CPPFLAGS", state)
+conf.env.append_value("TEST_" + name.upper().replace("-", "_") + 
"_CPPFLAGS", state)
 
 def _append_test_cppflags(self, conf, cic, value, arg):
 self._do_append_test_cppflags(conf, arg, value)
-- 
2.20.1

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH] score/aarch64: Resolve warning in exception dump

2020-11-23 Thread Kinsey Moore
This resolves a warning in the exception frame dump for AArch64 relating
to a missized printf format specifier.
---
 cpukit/score/cpu/aarch64/aarch64-exception-frame-print.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cpukit/score/cpu/aarch64/aarch64-exception-frame-print.c 
b/cpukit/score/cpu/aarch64/aarch64-exception-frame-print.c
index cd919c3214..59b5d06032 100644
--- a/cpukit/score/cpu/aarch64/aarch64-exception-frame-print.c
+++ b/cpukit/score/cpu/aarch64/aarch64-exception-frame-print.c
@@ -65,7 +65,7 @@ void _CPU_Exception_frame_print( const CPU_Exception_frame 
*frame )
 "X11  = 0x%016" PRIx64  " X28  = 0x%016" PRIx64 "\n"
 "X12  = 0x%016" PRIx64  " FP   = 0x%016" PRIx64 "\n"
 "X13  = 0x%016" PRIx64  " LR   = 0x%016" PRIxPTR "\n"
-"X14  = 0x%016" PRIx64  " SP   = 0x%016" PRIx64 "\n"
+"X14  = 0x%016" PRIx64  " SP   = 0x%016" PRIxPTR "\n"
 "X15  = 0x%016" PRIx64  " PC   = 0x%016" PRIxPTR "\n"
 "X16  = 0x%016" PRIx64  " DAIF = 0x%016" PRIx64 "\n"
 "VEC  = 0x%016" PRIxPTR " CPSR = 0x%016" PRIx64 "\n"
@@ -84,7 +84,7 @@ void _CPU_Exception_frame_print( const CPU_Exception_frame 
*frame )
 frame->register_x11, frame->register_x28,
 frame->register_x12, frame->register_fp,
 frame->register_x13, (intptr_t)frame->register_lr,
-frame->register_x14, frame->register_sp,
+frame->register_x14, (intptr_t)frame->register_sp,
 frame->register_x15, (intptr_t)frame->register_pc,
 frame->register_x16, frame->register_daif,
 (intptr_t) frame->vector, frame->register_cpsr,
-- 
2.20.1

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: [PATCH] wscript: Apply test state expectations correctly

2020-11-23 Thread Sebastian Huber

On 23/11/2020 17:21, Kinsey Moore wrote:


The variety of expected test states are not currently applied to tests
with names containing '-' correctly due to a failure to replace '-' with
'_' before adding the CPPFLAGS to the environment for that test. This
ensures that all additions of CPPFLAGS have that replacement performed
so that the CPPFLAGS are applied properly during compilation.

Thanks, looks good.

--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: [PATCH] score/aarch64: Resolve warning in exception dump

2020-11-23 Thread Sebastian Huber

On 23/11/2020 17:22, Kinsey Moore wrote:


This resolves a warning in the exception frame dump for AArch64 relating
to a missized printf format specifier.

Ok.

--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Qemu adds Host Requirement for Meson/Ninja

2020-11-23 Thread Joel Sherrill
Hi

With the recent update of Qemu to 5.x, it now uses Meson. I can add that to
the CentOS host section but this will need to be propagated to other hosts.
I will have to try this on our Ubuntu and FreeBSD test machines, but that
leaves quite a few other hosts.

Any ideas on the best way to accurately update the other hosts?

--joel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: Qemu adds Host Requirement for Meson/Ninja

2020-11-23 Thread Karel Gardas


Not sure, I understand what's going on here, but just over the weekend
build qemu git on ubuntu 20.04 lts and the only missing package in my
setup was ninja which I installed with just:

sudo apt install ninja

IIRC, so ubuntu at least of this particular version should be easy to go...

Karel

On 11/23/20 5:52 PM, Joel Sherrill wrote:
> Hi
> 
> With the recent update of Qemu to 5.x, it now uses Meson. I can add that
> to the CentOS host section but this will need to be propagated to other
> hosts. I will have to try this on our Ubuntu and FreeBSD test machines,
> but that leaves quite a few other hosts.
> 
> Any ideas on the best way to accurately update the other hosts?
> 
> --joel
> 
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
> 

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: Qemu adds Host Requirement for Meson/Ninja

2020-11-23 Thread Joel Sherrill
On Mon, Nov 23, 2020, 10:56 AM Karel Gardas  wrote:

>
> Not sure, I understand what's going on here, but just over the weekend
> build qemu git on ubuntu 20.04 lts and the only missing package in my
> setup was ninja which I installed with just:
>
> sudo apt install ninja
>

Thanks for this one.

>
> IIRC, so ubuntu at least of this particular version should be easy to go...
>

I didn't mean to imply it was difficult -- just that there are multiple
hosts with instructions and I don't think anyone of us is going to sit down
and run through Mint, Cygwin, Msys2, Raspbian, etc just.to write a
documentation patch. :)

This is going to linger. Perhaps I can add some boilerplate that Qemu
requires Meson and Ninja to those hosts with no mention of it.

>
> Karel
>
> On 11/23/20 5:52 PM, Joel Sherrill wrote:
> > Hi
> >
> > With the recent update of Qemu to 5.x, it now uses Meson. I can add that
> > to the CentOS host section but this will need to be propagated to other
> > hosts. I will have to try this on our Ubuntu and FreeBSD test machines,
> > but that leaves quite a few other hosts.
> >
> > Any ideas on the best way to accurately update the other hosts?
> >
> > --joel
> >
> > ___
> > devel mailing list
> > devel@rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
> >
>
>
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

waf examples: how to modify linker flags/how to process generated exe.

2020-11-23 Thread Karel Gardas


Hello,

I'm slowly researching amd64 BSP multiboot domain and I'm curious if it
is possible based on waf BSP's options to change either (or both)
linker/gcc linking options (E.g. to add -z max-page-size=1000) and or
process generated exe by other tool like objcopy (to create elf32 from
elf64).

My findings so far:

- GRUB is able to load 64bit ELF for both multiboot and multiboot2
standards.

- GRUB is able to load 32bit ELF generated from 64bit for multiboot

- Qemu supports multiboot only (not multiboot2!)

- Qemu is picky and supports only 32bit ELF for multiboot load

Caveat: by "load" I mean (in case of GRUB) that multiboot or multiboot2
command invoked with  parameter executes without complain from
GRUB itself. Also that grub-file --is-x86-multiboot(2)  exits with
0 result which signals GRUB claims that's multiboot(2) file.

Note: all my experiments so far are "how the heck to put multiboot(2)
header into RTEMS AMD64 BSP exe and make GRUB or Qemu or even both
happy" category. So it's just the first step for now. Putting multiboot
header into elf and in recognizable way...

For this, knowing some examples how to modify waf/wscript of the bsp
would be great to have...

Thanks!
Karel

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: [PATCH 2/3] score: Add CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Chris Johns
On 23/11/20 7:46 pm, Sebastian Huber wrote:
> On 22/11/2020 23:22, Chris Johns wrote:
>> On 20/11/20 7:31 pm, Sebastian Huber wrote:
>>> In order to better support applications which use the new
>>> rtems_task_construct() directive add the
>>> CONFIGURE_INIT_TASK_STORAGE_SIZE configuration option.  If this option
>>> is specified, then the Classic API initialization task is constructed
>>> with rtems_task_construct().
>> The name CONFIGURE_INIT_TASK_STORAGE_SIZE does not reflect the role described
>> here and is a little ambiguous unless you know the implementation detail.
>>
>> CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE ?
> I am not sure. The storage size is a property of the task. How this property 
> is
> achieved is a detail and may change.

Is it a property of a specific instance (Init) of a specific type (construct) of
task?

You have stated:

 "If this option is specified, then the Classic API initialization task
  is constructed with rtems_task_construct()."

This is how I am reading this sentence. Sure in time the task may not be
constructed and that may change but the effect needs to be a "constructed" task
or you would need another variables.

The key issue is the config option triggers a change in the type of Init task
and we should be as clear about that as we can.

Chris
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: Spike Hung for Almost Two Days

2020-11-23 Thread Chris Johns
On 24/11/20 1:34 am, Joel Sherrill wrote:
> On Mon, Nov 23, 2020, 8:10 AM Joel Sherrill  > wrote:
> 
> Hi
> 
> I started my Monday by checking in on a build sweep and noticed that a 
> test
> was hung and still running from Saturday. This is on CentOS. Anyone else
> ever see this from Spike?
> 
> 0 R joel     24992 24151 99  80   0 - 529380 -     Nov21 ?        
> 1-22:33:37
> spike --isa=RV64IMAFD
> ./riscv-rtems6/c/rv64imafd_medany/testsuites/libtests/dl10.exe
> 
> 
> After sending that, it occurred to me that the RTEMS tester should have 
> killed it :(

Did it try? That test should be tagged user input.

Chris
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: Spike Hung for Almost Two Days

2020-11-23 Thread Joel Sherrill
On Mon, Nov 23, 2020, 2:59 PM Chris Johns  wrote:

> On 24/11/20 1:34 am, Joel Sherrill wrote:
> > On Mon, Nov 23, 2020, 8:10 AM Joel Sherrill  > > wrote:
> >
> > Hi
> >
> > I started my Monday by checking in on a build sweep and noticed that
> a test
> > was hung and still running from Saturday. This is on CentOS. Anyone
> else
> > ever see this from Spike?
> >
> > 0 R joel 24992 24151 99  80   0 - 529380 - Nov21 ?
>  1-22:33:37
> > spike --isa=RV64IMAFD
> > ./riscv-rtems6/c/rv64imafd_medany/testsuites/libtests/dl10.exe
> >
> >
> > After sending that, it occurred to me that the RTEMS tester should have
> killed it :(
>
> Did it try? That test should be tagged user input.
>

I don't know. The logs tend to be deleted as it goes. And I've never seen
this happen before.

>
> Chris
>
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

[PATCH] Add CGEM definitions for ZynqMP

2020-11-23 Thread Kinsey Moore
---
 rtemsbsd/include/bsp/nexus-devices.h   |  7 +++
 rtemsbsd/include/machine/rtems-bsd-nexus-bus.h | 16 
 2 files changed, 23 insertions(+)

diff --git a/rtemsbsd/include/bsp/nexus-devices.h 
b/rtemsbsd/include/bsp/nexus-devices.h
index 630572a8..51bca3aa 100644
--- a/rtemsbsd/include/bsp/nexus-devices.h
+++ b/rtemsbsd/include/bsp/nexus-devices.h
@@ -100,6 +100,13 @@ RTEMS_BSD_DRIVER_XILINX_ZYNQ_SLCR;
 RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM0(ZYNQ_IRQ_ETHERNET_0);
 RTEMS_BSD_DRIVER_E1000PHY;
 
+#elif defined(LIBBSP_AARCH64_XILINX_ZYNQMP_BSP_H)
+
+#include 
+
+RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM0(ZYNQMP_IRQ_ETHERNET_0);
+RTEMS_BSD_DRIVER_E1000PHY;
+
 #elif defined(LIBBSP_ARM_ATSAM_BSP_H)
 
 RTEMS_BSD_DRIVER_USB;
diff --git a/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h 
b/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h
index ff545dc0..f1ca66d7 100644
--- a/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h
+++ b/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h
@@ -371,6 +371,22 @@ extern "C" {
   #define RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM1(_irq)   \
 RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM(1, 0xe000c000, _irq)
 #endif /* RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM1 */
+#if !defined(RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM0)
+  #define RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM0(_irq)\
+RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM(0, 0xff0b, _irq)
+#endif /* RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM0 */
+#if !defined(RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM1)
+  #define RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM1(_irq)   \
+RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM(1, 0xff0c, _irq)
+#endif /* RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM1 */
+#if !defined(RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM2)
+  #define RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM2(_irq)\
+RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM(2, 0xff0d, _irq)
+#endif /* RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM2 */
+#if !defined(RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM3)
+  #define RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM3(_irq)   \
+RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM(3, 0xff0e, _irq)
+#endif /* RTEMS_BSD_DRIVER_XILINX_ZYNQMP_CGEM3 */
 
 /*
  * Designware/Synopsys Ethernet MAC Controller.
-- 
2.20.1

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: Spike Hung for Almost Two Days

2020-11-23 Thread Chris Johns
On 24/11/20 8:27 am, Joel Sherrill wrote:
> On Mon, Nov 23, 2020, 2:59 PM Chris Johns  > wrote:
> On 24/11/20 1:34 am, Joel Sherrill wrote:
> > On Mon, Nov 23, 2020, 8:10 AM Joel Sherrill  
> > >> wrote:
> >
> >     Hi
> >
> >     I started my Monday by checking in on a build sweep and noticed 
> that a
> test
> >     was hung and still running from Saturday. This is on CentOS. Anyone 
> else
> >     ever see this from Spike?
> >
> >     0 R joel     24992 24151 99  80   0 - 529380 -     Nov21 ?      
>  1-22:33:37
> >     spike --isa=RV64IMAFD
> >     ./riscv-rtems6/c/rv64imafd_medany/testsuites/libtests/dl10.exe
> >
> >
> > After sending that, it occurred to me that the RTEMS tester should have
> killed it :(
> 
> Did it try? That test should be tagged user input.
> 
> I don't know. The logs tend to be deleted as it goes. And I've never seen this
> happen before.

I think the tester does a kill with an `exec` type test so a process that is
stuck in a kernel call may ignore the kill.

The point about the user input test is the kill or reset is done once the test
type banner message is seen on the console and I assume that normally happens.

Chris
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: [PATCH] Add CGEM definitions for ZynqMP

2020-11-23 Thread Sebastian Huber

On 23/11/2020 23:05, Kinsey Moore wrote:


  rtemsbsd/include/bsp/nexus-devices.h   |  7 +++
  rtemsbsd/include/machine/rtems-bsd-nexus-bus.h | 16 

Please check it in.

--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Re: waf examples: how to modify linker flags/how to process generated exe.

2020-11-23 Thread Sebastian Huber

Hello Karel,

a post-link step (for example a transformation of the ELF file into a 
boot loader image) is currently not supported by the new build system. 
For this the idea is to let the BSP optionally provide a "post-link" 
command line tool (a shell script for example) and then use a mechanism 
described here:


https://waf.io/blog/2016/09/waf-strip-binaries.html

Changing linker flags for a BSP is the easy part, see for example:

spec/build/bsps/i386/pc386/optrelocaddr.yml

--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

[PATCH v2 4/4] validation: Use CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Sebastian Huber
Update #4181.
---
 testsuites/validation/ts-default.h | 109 +++--
 1 file changed, 40 insertions(+), 69 deletions(-)

diff --git a/testsuites/validation/ts-default.h 
b/testsuites/validation/ts-default.h
index 0f7db65a8e..ba994cdd1a 100644
--- a/testsuites/validation/ts-default.h
+++ b/testsuites/validation/ts-default.h
@@ -35,12 +35,23 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 
 #include 
 
+#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
+
+#define MAX_TASKS 32
+
+#define TASK_ATTRIBUTES RTEMS_FLOATING_POINT
+
+#define TASK_STORAGE_SIZE \
+  RTEMS_TASK_STORAGE_SIZE( \
+MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, \
+TASK_ATTRIBUTES \
+  )
+
 static char buffer[ 512 ];
 
 static const T_action actions[] = {
@@ -70,12 +81,28 @@ static const T_config test_config = {
   .actions = actions
 };
 
-static void runner_task( rtems_task_argument arg )
+static rtems_chain_control free_task_storage =
+  RTEMS_CHAIN_INITIALIZER_EMPTY( free_task_storage );
+
+static union {
+  RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) char
+storage[ TASK_STORAGE_SIZE ];
+  rtems_chain_node node;
+} task_storage[ MAX_TASKS ];
+
+static void Init( rtems_task_argument arg )
 {
   int exit_code;
 
   (void) arg;
 
+  rtems_chain_initialize(
+&free_task_storage,
+task_storage,
+RTEMS_ARRAY_SIZE( task_storage ),
+sizeof( task_storage[ 0 ] )
+  );
+
   rtems_test_begin( rtems_test_name, TEST_STATE );
   T_register();
   exit_code = T_main( &test_config );
@@ -87,40 +114,6 @@ static void runner_task( rtems_task_argument arg )
   rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, (uint32_t) exit_code );
 }
 
-#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )
-
-#define ATTRIBUTES RTEMS_FLOATING_POINT
-
-#define TASK_STORAGE_SIZE \
-  RTEMS_TASK_STORAGE_SIZE( \
-MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, \
-ATTRIBUTES \
-  )
-
-#define MAX_TASKS 32
-
-RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT )
-static char runner_task_storage[ TASK_STORAGE_SIZE ];
-
-static const rtems_task_config runner_task_config = {
-  .name = rtems_build_name( 'R', 'U', 'N', ' ' ),
-  .initial_priority = 1,
-  .storage_area = runner_task_storage,
-  .storage_size = sizeof( runner_task_storage ),
-  .maximum_thread_local_storage_size = MAX_TLS_SIZE,
-  .initial_modes = RTEMS_DEFAULT_MODES,
-  .attributes = ATTRIBUTES
-};
-
-static rtems_chain_control free_task_storage =
-  RTEMS_CHAIN_INITIALIZER_EMPTY( free_task_storage );
-
-static union {
-  RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) char
-storage[ TASK_STORAGE_SIZE ];
-  rtems_chain_node node;
-} task_storage[ MAX_TASKS ];
-
 static void *task_stack_allocate( size_t size )
 {
   if ( size > sizeof( task_storage[ 0 ] ) ) {
@@ -138,35 +131,6 @@ static void task_stack_deallocate( void *stack )
   );
 }
 
-static void init_runner_task( void )
-{
-  rtems_id id;
-  rtems_status_code sc;
-
-  rtems_chain_initialize(
-&free_task_storage,
-task_storage,
-RTEMS_ARRAY_SIZE( task_storage ),
-sizeof( task_storage[ 0 ] )
-  );
-
-  sc = rtems_task_construct( &runner_task_config, &id );
-  if ( sc != RTEMS_SUCCESSFUL ) {
-rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, 1 );
-  }
-
-  sc = rtems_task_start( id, runner_task, 0 );
-  if ( sc != RTEMS_SUCCESSFUL ) {
-rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, 1 );
-  }
-}
-
-RTEMS_SYSINIT_ITEM(
-  init_runner_task,
-  RTEMS_SYSINIT_CLASSIC_USER_TASKS,
-  RTEMS_SYSINIT_ORDER_MIDDLE
-);
-
 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
 
 #define CONFIGURE_MAXIMUM_PROCESSORS 4
@@ -183,7 +147,8 @@ RTEMS_SYSINIT_ITEM(
 
 #define CONFIGURE_MAXIMUM_TASKS ( 1 + MAX_TASKS )
 
-#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 1
+#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE \
+  CONFIGURE_MAXIMUM_TASKS
 
 #define CONFIGURE_MAXIMUM_TIMERS 3
 
@@ -197,9 +162,7 @@ RTEMS_SYSINIT_ITEM(
 
 #define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
 
-#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
-
-#define CONFIGURE_IDLE_TASK_BODY _CPU_Thread_Idle_body
+#define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE MAX_TLS_SIZE
 
 #define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
 
@@ -207,6 +170,14 @@ RTEMS_SYSINIT_ITEM(
 
 #define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_deallocate
 
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT_TASK_ATTRIBUTES TASK_ATTRIBUTES
+
+#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
+
+#define CONFIGURE_INIT_TASK_STORAGE_SIZE TASK_STORAGE_SIZE
+
 #if defined(RTEMS_SMP)
 
 #define CONFIGURE_SCHEDULER_EDF_SMP
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 2/4] config: Add CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Sebastian Huber
In order to better support applications which use the new
rtems_task_construct() directive add the
CONFIGURE_INIT_TASK_STORAGE_SIZE configuration option.  If this option
is specified, then the Classic API initialization task is constructed
with rtems_task_construct().

Update #4181.
---
 cpukit/Makefile.am  |  1 +
 cpukit/doxygen/appl-config.h| 56 ++
 cpukit/include/rtems/confdefs/inittask.h| 58 +++---
 cpukit/include/rtems/rtems/tasksdata.h  | 45 +-
 cpukit/include/rtems/score/interr.h |  3 +-
 cpukit/rtems/src/taskconstructuser.c| 65 +
 cpukit/sapi/src/interrtext.c|  3 +-
 spec/build/cpukit/librtemscpu.yml   |  1 +
 spec/build/testsuites/sptests/grp.yml   |  2 +
 spec/build/testsuites/sptests/spfatal34.yml | 19 ++
 testsuites/sptests/spfatal34/init.c | 52 +
 testsuites/sptests/spfatal34/spfatal34.doc  | 11 
 testsuites/sptests/spfatal34/spfatal34.scn  |  8 +++
 testsuites/sptests/spinternalerror02/init.c |  2 +-
 14 files changed, 311 insertions(+), 15 deletions(-)
 create mode 100644 cpukit/rtems/src/taskconstructuser.c
 create mode 100644 spec/build/testsuites/sptests/spfatal34.yml
 create mode 100644 testsuites/sptests/spfatal34/init.c
 create mode 100644 testsuites/sptests/spfatal34/spfatal34.doc
 create mode 100644 testsuites/sptests/spfatal34/spfatal34.scn

diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index 8c7f9c1ed4..b7435d7eb6 100644
--- a/cpukit/Makefile.am
+++ b/cpukit/Makefile.am
@@ -790,6 +790,7 @@ librtemscpu_a_SOURCES += rtems/src/statustoerrno.c
 librtemscpu_a_SOURCES += rtems/src/systemeventreceive.c
 librtemscpu_a_SOURCES += rtems/src/systemeventsend.c
 librtemscpu_a_SOURCES += rtems/src/taskconstruct.c
+librtemscpu_a_SOURCES += rtems/src/taskconstructuser.c
 librtemscpu_a_SOURCES += rtems/src/taskcreate.c
 librtemscpu_a_SOURCES += rtems/src/taskdelete.c
 librtemscpu_a_SOURCES += rtems/src/taskexit.c
diff --git a/cpukit/doxygen/appl-config.h b/cpukit/doxygen/appl-config.h
index 00230ac2d6..ed96c2a344 100644
--- a/cpukit/doxygen/appl-config.h
+++ b/cpukit/doxygen/appl-config.h
@@ -1145,9 +1145,65 @@
  *   out by  does not overflow an integer of type https://en.cppreference.com/w/c/types/integer";>uintptr_t.
  * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * The
+ *
+ * * ``CONFIGURE_INIT_TASK_STACK_SIZE`` and
+ *
+ * * #CONFIGURE_INIT_TASK_STORAGE_SIZE
+ *
+ * configuration options are mutually exclusive.
+ * @endparblock
  */
 #define CONFIGURE_INIT_TASK_STACK_SIZE
 
+/* Generated from spec:/acfg/if/init-task-storage-size */
+
+/**
+ * @brief This configuration option is an integer define.
+ *
+ * The value of this configuration option defines the task storage size of the
+ * Classic API initialization task.
+ *
+ * @par Default Value
+ * The default value is 0.
+ *
+ * @par Value Constraints
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
+ *
+ * * It shall be defined using RTEMS_TASK_STORAGE_SIZE().
+ * @endparblock
+ *
+ * @par Notes
+ * @parblock
+ * A task storage area of the specified size is statically allocated for the
+ * Classic API initialization task.  It is defined by ```.
+ *
+ * If this configuration option is specified, then a maximum thread-local
+ * storage size defined by #CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE is used
+ * for the Classic API initialization task.
+ *
+ * If this configuration option is specified, then the Classic API
+ * initialization task should be accounted for in
+ * #CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE.
+ *
+ * The
+ *
+ * * #CONFIGURE_INIT_TASK_STACK_SIZE and
+ *
+ * * ``CONFIGURE_INIT_TASK_STORAGE_SIZE``
+ *
+ * configuration options are mutually exclusive.
+ * @endparblock
+ */
+#define CONFIGURE_INIT_TASK_STORAGE_SIZE
+
 /* Generated from spec:/acfg/if/rtems-init-tasks-table */
 
 /**
diff --git a/cpukit/include/rtems/confdefs/inittask.h 
b/cpukit/include/rtems/confdefs/inittask.h
index 25453f031d..4183e00e54 100644
--- a/cpukit/include/rtems/confdefs/inittask.h
+++ b/cpukit/include/rtems/confdefs/inittask.h
@@ -48,6 +48,7 @@
 #ifdef CONFIGURE_RTEMS_INIT_TASKS_TABLE
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -72,15 +73,6 @@
   #define CONFIGURE_INIT_TASK_PRIORITY 1
 #endif
 
-#ifndef CONFIGURE_INIT_TASK_STACK_SIZE
-  #define CONFIGURE_INIT_TASK_STACK_SIZE CONFIGURE_MINIMUM_TASK_STACK_SIZE
-#endif
-
-#if CONFIGURE_INIT_TASK_STACK_SIZE > CONFIGURE_MINIMUM_TASK_STACK_SIZE
-  #define _CONFIGURE_INIT_TASK_STACK_EXTRA \
-( CONFIGURE_INIT_TASK_STACK_SIZE - CONFIGURE_MINIMUM_TASK_STACK_SIZE )
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -113,6 +105,52 @@ RTEMS_STATIC_ASSERT(
 
 #pragma GCC diagnostic pop
 
+#ifdef CONFIGURE_INIT_TASK_STORAGE_SIZE
+
+#ifdef CONFIGU

[PATCH v2 3/4] config: Check CONFIGURE_INIT_TASK_STACK_SIZE

2020-11-23 Thread Sebastian Huber
---
 cpukit/include/rtems/confdefs/inittask.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/cpukit/include/rtems/confdefs/inittask.h 
b/cpukit/include/rtems/confdefs/inittask.h
index 4183e00e54..450a4f4b53 100644
--- a/cpukit/include/rtems/confdefs/inittask.h
+++ b/cpukit/include/rtems/confdefs/inittask.h
@@ -144,6 +144,8 @@ RTEMS_SYSINIT_ITEM(
 
 #ifndef CONFIGURE_INIT_TASK_STACK_SIZE
   #define CONFIGURE_INIT_TASK_STACK_SIZE CONFIGURE_MINIMUM_TASK_STACK_SIZE
+#elif CONFIGURE_INIT_TASK_STACK_SIZE < CONFIGURE_MINIMUM_TASK_STACK_SIZE
+  #error "CONFIGURE_INIT_TASK_STACK_SIZE must be greater than or equal to 
CONFIGURE_MINIMUM_TASK_STACK_SIZE"
 #endif
 
 #if CONFIGURE_INIT_TASK_STACK_SIZE > CONFIGURE_MINIMUM_TASK_STACK_SIZE
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 0/4] Add CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Sebastian Huber
Currently, the Classic API initialization task is created with
rtems_task_create(). In order to better support applications which use
the new rtems_task_construct() directive add the
CONFIGURE_INIT_TASK_STORAGE_SIZE configuration option which constructs
the Classic API initialization task with rtems_task_construct().

v2:

* Do not mention rtems_task_construct() in the
  CONFIGURE_INIT_TASK_STORAGE_SIZE documentation.

* Ensure that CONFIGURE_INIT_TASK_STACK_SIZE is greater than or equal to
  CONFIGURE_INIT_TASK_STACK_SIZE.

Sebastian Huber (4):
  Avoid INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL
  config: Add CONFIGURE_INIT_TASK_STORAGE_SIZE
  config: Check CONFIGURE_INIT_TASK_STACK_SIZE
  validation: Use CONFIGURE_INIT_TASK_STORAGE_SIZE

 cpukit/Makefile.am|   1 +
 cpukit/doxygen/appl-config.h  |  56 +
 cpukit/include/rtems/confdefs/inittask.h  |  73 ++--
 cpukit/include/rtems/rtems/tasksdata.h|  45 +++-
 cpukit/include/rtems/score/interr.h   |   5 +-
 cpukit/rtems/src/taskconstructuser.c  |  65 +++
 cpukit/rtems/src/taskinitusers.c  |   8 +-
 cpukit/sapi/src/interrtext.c  |   3 +-
 spec/build/cpukit/librtemscpu.yml |   1 +
 spec/build/testsuites/sptests/grp.yml |   4 +-
 .../sptests/{spfatal02.yml => spfatal34.yml}  |   4 +-
 testsuites/sptests/Makefile.am|   9 --
 testsuites/sptests/configure.ac   |   1 -
 testsuites/sptests/spfatal02/init.c   |  28 -
 testsuites/sptests/spfatal02/spfatal02.doc|  20 
 testsuites/sptests/spfatal02/spfatal02.scn|   3 -
 testsuites/sptests/spfatal34/init.c   |  52 +
 testsuites/sptests/spfatal34/spfatal34.doc|  11 ++
 testsuites/sptests/spfatal34/spfatal34.scn|   8 ++
 testsuites/sptests/spinternalerror02/init.c   |   2 +-
 testsuites/validation/ts-default.h| 109 +++---
 21 files changed, 351 insertions(+), 157 deletions(-)
 create mode 100644 cpukit/rtems/src/taskconstructuser.c
 rename spec/build/testsuites/sptests/{spfatal02.yml => spfatal34.yml} (80%)
 delete mode 100644 testsuites/sptests/spfatal02/init.c
 delete mode 100644 testsuites/sptests/spfatal02/spfatal02.doc
 delete mode 100644 testsuites/sptests/spfatal02/spfatal02.scn
 create mode 100644 testsuites/sptests/spfatal34/init.c
 create mode 100644 testsuites/sptests/spfatal34/spfatal34.doc
 create mode 100644 testsuites/sptests/spfatal34/spfatal34.scn

-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


[PATCH v2 1/4] Avoid INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL

2020-11-23 Thread Sebastian Huber
Replace a runtime check with a compile time assertion.  This makes the
INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL obsolete.

Update #4181.
---
 cpukit/include/rtems/confdefs/inittask.h| 13 ++
 cpukit/include/rtems/score/interr.h |  2 +-
 cpukit/rtems/src/taskinitusers.c|  8 +-
 spec/build/testsuites/sptests/grp.yml   |  2 --
 spec/build/testsuites/sptests/spfatal02.yml | 19 --
 testsuites/sptests/Makefile.am  |  9 ---
 testsuites/sptests/configure.ac |  1 -
 testsuites/sptests/spfatal02/init.c | 28 -
 testsuites/sptests/spfatal02/spfatal02.doc  | 20 ---
 testsuites/sptests/spfatal02/spfatal02.scn  |  3 ---
 10 files changed, 15 insertions(+), 90 deletions(-)
 delete mode 100644 spec/build/testsuites/sptests/spfatal02.yml
 delete mode 100644 testsuites/sptests/spfatal02/init.c
 delete mode 100644 testsuites/sptests/spfatal02/spfatal02.doc
 delete mode 100644 testsuites/sptests/spfatal02/spfatal02.scn

diff --git a/cpukit/include/rtems/confdefs/inittask.h 
b/cpukit/include/rtems/confdefs/inittask.h
index a91b9a5917..25453f031d 100644
--- a/cpukit/include/rtems/confdefs/inittask.h
+++ b/cpukit/include/rtems/confdefs/inittask.h
@@ -100,6 +100,19 @@ extern "C" {
   #define CONFIGURE_INIT_TASK_ARGUMENTS 0
 #endif
 
+/* Ignore potential warnings from the static assertion below */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Waddress"
+#pragma GCC diagnostic ignored "-Wpragmas"
+#pragma GCC diagnostic ignored "-Wtautological-pointer-compare"
+
+RTEMS_STATIC_ASSERT(
+  CONFIGURE_INIT_TASK_ENTRY_POINT != NULL,
+  CONFIGURE_INIT_TASK_ENTRY_POINT_MUST_NOT_BE_NULL
+);
+
+#pragma GCC diagnostic pop
+
 const rtems_initialization_tasks_table _RTEMS_tasks_User_task_table = {
   CONFIGURE_INIT_TASK_NAME,
   CONFIGURE_INIT_TASK_STACK_SIZE,
diff --git a/cpukit/include/rtems/score/interr.h 
b/cpukit/include/rtems/score/interr.h
index 4b06199ae9..b1f1061c82 100644
--- a/cpukit/include/rtems/score/interr.h
+++ b/cpukit/include/rtems/score/interr.h
@@ -189,7 +189,7 @@ typedef enum {
   INTERNAL_ERROR_NO_MEMORY_FOR_HEAP = 23,
   INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR = 24,
   INTERNAL_ERROR_RESOURCE_IN_USE = 25,
-  INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL = 26,
+  /* INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL = 26, */
   /* INTERNAL_ERROR_POSIX_INIT_THREAD_ENTRY_IS_NULL = 27, */
   INTERNAL_ERROR_THREAD_QUEUE_DEADLOCK = 28,
   INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE = 29,
diff --git a/cpukit/rtems/src/taskinitusers.c b/cpukit/rtems/src/taskinitusers.c
index 0b23d8bc86..f21c061670 100644
--- a/cpukit/rtems/src/taskinitusers.c
+++ b/cpukit/rtems/src/taskinitusers.c
@@ -29,7 +29,6 @@ void _RTEMS_tasks_Initialize_user_task( void )
   rtems_idid;
   rtems_status_code   return_value;
   const rtems_initialization_tasks_table *user_task;
-  rtems_task_entryentry_point;
 
   user_task = &_RTEMS_tasks_User_task_table;
   return_value = rtems_task_create(
@@ -44,14 +43,9 @@ void _RTEMS_tasks_Initialize_user_task( void )
 _Internal_error( INTERNAL_ERROR_RTEMS_INIT_TASK_CREATE_FAILED );
   }
 
-  entry_point = user_task->entry_point;
-  if ( entry_point == NULL ) {
-_Internal_error( INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL );
-  }
-
   return_value = rtems_task_start(
 id,
-entry_point,
+user_task->entry_point,
 user_task->argument
   );
   _Assert( rtems_is_status_successful( return_value ) );
diff --git a/spec/build/testsuites/sptests/grp.yml 
b/spec/build/testsuites/sptests/grp.yml
index 1c865777a7..b1bf85942d 100644
--- a/spec/build/testsuites/sptests/grp.yml
+++ b/spec/build/testsuites/sptests/grp.yml
@@ -218,8 +218,6 @@ links:
   uid: spextensions01
 - role: build-dependency
   uid: spfatal01
-- role: build-dependency
-  uid: spfatal02
 - role: build-dependency
   uid: spfatal03
 - role: build-dependency
diff --git a/spec/build/testsuites/sptests/spfatal02.yml 
b/spec/build/testsuites/sptests/spfatal02.yml
deleted file mode 100644
index 19e329a027..00
--- a/spec/build/testsuites/sptests/spfatal02.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-build-type: test-program
-cflags: []
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-cppflags: []
-cxxflags: []
-enabled-by: true
-features: c cprogram
-includes: []
-ldflags: []
-links: []
-source:
-- testsuites/sptests/spfatal02/init.c
-stlib: []
-target: testsuites/sptests/spfatal02.exe
-type: build
-use-after: []
-use-before: []
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am
index 14788f7fb1..8813d43513 100644
--- a/testsuites/sptests/Makefile.am
+++ b/testsuites/sptests/Makefile.am
@@ -904,15 +904,6 @@ spfatal01_CPPFLAGS = $(AM_CPPFLAGS) 
$(TEST_FLAGS_spfatal01) \
$(support_includes)
 endif
 
-if TEST_s

Re: [PATCH 2/3] score: Add CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Sebastian Huber

On 23/11/2020 21:23, Chris Johns wrote:


On 23/11/20 7:46 pm, Sebastian Huber wrote:

On 22/11/2020 23:22, Chris Johns wrote:

On 20/11/20 7:31 pm, Sebastian Huber wrote:

In order to better support applications which use the new
rtems_task_construct() directive add the
CONFIGURE_INIT_TASK_STORAGE_SIZE configuration option.  If this option
is specified, then the Classic API initialization task is constructed
with rtems_task_construct().

The name CONFIGURE_INIT_TASK_STORAGE_SIZE does not reflect the role described
here and is a little ambiguous unless you know the implementation detail.

CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE ?

I am not sure. The storage size is a property of the task. How this property is
achieved is a detail and may change.

Is it a property of a specific instance (Init) of a specific type (construct) of
task?

You have stated:

  "If this option is specified, then the Classic API initialization task
   is constructed with rtems_task_construct()."

This is how I am reading this sentence. Sure in time the task may not be
constructed and that may change but the effect needs to be a "constructed" task
or you would need another variables.

The key issue is the config option triggers a change in the type of Init task
and we should be as clear about that as we can.


I changed the documentation of CONFIGURE_INIT_TASK_STORAGE_SIZE to not 
mention rtems_task_construct(). This is just an implementation detail.


https://lists.rtems.org/pipermail/devel/2020-November/063457.html

--
embedded brains GmbH
Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
Phone: +49-89-18 94 741 - 16
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

embedded brains GmbH
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier: 
https://embedded-brains.de/datenschutzerklaerung/

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

[PATCH v2] c-user: Add CONFIGURE_INIT_TASK_STORAGE_SIZE

2020-11-23 Thread Sebastian Huber
Close #4181.
---
 c-user/config/classic-init-task.rst | 59 -
 1 file changed, 58 insertions(+), 1 deletion(-)

diff --git a/c-user/config/classic-init-task.rst 
b/c-user/config/classic-init-task.rst
index 4d3bf81..7b28acb 100644
--- a/c-user/config/classic-init-task.rst
+++ b/c-user/config/classic-init-task.rst
@@ -229,7 +229,64 @@ DESCRIPTION:
 Classic API initialization task.
 
 NOTES:
-None.
+The
+
+* ``CONFIGURE_INIT_TASK_STACK_SIZE`` and
+
+* :ref:`CONFIGURE_INIT_TASK_STORAGE_SIZE`
+
+configuration options are mutually exclusive.
+
+.. Generated from spec:/acfg/if/init-task-storage-size
+
+.. index:: CONFIGURE_INIT_TASK_STORAGE_SIZE
+
+.. _CONFIGURE_INIT_TASK_STORAGE_SIZE:
+
+CONFIGURE_INIT_TASK_STORAGE_SIZE
+
+
+CONSTANT:
+``CONFIGURE_INIT_TASK_STORAGE_SIZE``
+
+OPTION TYPE:
+This configuration option is an integer define.
+
+DEFAULT VALUE:
+The default value is 0.
+
+VALUE CONSTRAINTS:
+The value of this configuration option shall satisfy all of the following
+constraints:
+
+* It shall be greater than or equal to 
:ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+* It shall be defined using
+  :c:func:`RTEMS_TASK_STORAGE_SIZE`.
+
+DESCRIPTION:
+The value of this configuration option defines the task storage size of the
+Classic API initialization task.
+
+NOTES:
+A task storage area of the specified size is statically allocated for the
+Classic API initialization task.  It is defined by ```.
+
+If this configuration option is specified, then a maximum thread-local
+storage size defined by :ref:`CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE` 
is used for
+the Classic API initialization task.
+
+If this configuration option is specified, then the Classic API
+initialization task should be accounted for in
+:ref:`CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE`.
+
+The
+
+* :ref:`CONFIGURE_INIT_TASK_STACK_SIZE` and
+
+* ``CONFIGURE_INIT_TASK_STORAGE_SIZE``
+
+configuration options are mutually exclusive.
 
 .. Generated from spec:/acfg/if/rtems-init-tasks-table
 
-- 
2.26.2

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel