[PATCH v2 1/4] Avoid INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL

Joel Sherrill joel at rtems.org
Tue Nov 24 21:19:13 UTC 2020


On Tue, Nov 24, 2020 at 1:34 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> 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"
>

This comment applies to every place pragmas are used like this.

If they are just potential, the pragmas are not needed. If this is really
disabling
a specific warning, tell the read what the warning is.

Is this correct code and gcc should not be generating a warning? That
should be associated with a gcc ticket for false warnings.

pragmas are to be used lightly and with documented justification.

I am not sure how this would be captured in coding guidelines but this is
an
exceptional thing to use and thus must come with exceptional comments.

+
> +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_id                                id;
>    rtems_status_code                       return_value;
>    const rtems_initialization_tasks_table *user_task;
> -  rtems_task_entry                        entry_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..0000000000
> --- 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_spfatal02
> -sp_tests += spfatal02
> -sp_screens += spfatal02/spfatal02.scn
> -sp_docs += spfatal02/spfatal02.doc
> -spfatal02_SOURCES = spfatal02/init.c
> -spfatal02_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_spfatal02) \
> -       $(support_includes)
> -endif
> -
>  if TEST_spfatal03
>  sp_tests += spfatal03
>  sp_screens += spfatal03/spfatal03.scn
> diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/
> configure.ac
> index 099ff0412b..4ca55e6a36 100644
> --- a/testsuites/sptests/configure.ac
> +++ b/testsuites/sptests/configure.ac
> @@ -137,7 +137,6 @@ RTEMS_TEST_CHECK([speventsystem01])
>  RTEMS_TEST_CHECK([speventtransient01])
>  RTEMS_TEST_CHECK([spextensions01])
>  RTEMS_TEST_CHECK([spfatal01])
> -RTEMS_TEST_CHECK([spfatal02])
>  RTEMS_TEST_CHECK([spfatal03])
>  RTEMS_TEST_CHECK([spfatal04])
>  RTEMS_TEST_CHECK([spfatal05])
> diff --git a/testsuites/sptests/spfatal02/init.c
> b/testsuites/sptests/spfatal02/init.c
> deleted file mode 100644
> index 2700b4dd50..0000000000
> --- a/testsuites/sptests/spfatal02/init.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -#ifdef HAVE_CONFIG_H
> -#include "config.h"
> -#endif
> -
> -#include "../spfatal_support/spfatal.h"
> -
> -/*
> - * Classic API Init task create failure
> - */
> -
> -#define CONFIGURE_INIT_TASK_ENTRY_POINT NULL
> -
> -#define FATAL_ERROR_TEST_NAME            "2"
> -#define FATAL_ERROR_DESCRIPTION          "Classic API Init task start
> failure"
> -#define FATAL_ERROR_EXPECTED_SOURCE      INTERNAL_ERROR_CORE
> -#define FATAL_ERROR_EXPECTED_ERROR \
> -  INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL
> -
> -static void force_error(void)
> -{
> -/*
> - *  Case 2: Null entry
> - */
> -
> -  /* we will not run this far */
> -}
> -
> -#include "../spfatal_support/spfatalimpl.h"
> diff --git a/testsuites/sptests/spfatal02/spfatal02.doc
> b/testsuites/sptests/spfatal02/spfatal02.doc
> deleted file mode 100644
> index 1e62051b52..0000000000
> --- a/testsuites/sptests/spfatal02/spfatal02.doc
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -#  COPYRIGHT (c) 1989-2009.
> -#  On-Line Applications Research Corporation (OAR).
> -#
> -#  The license and distribution terms for this file may be
> -#  found in the file LICENSE in this distribution or at
> -#  http://www.rtems.org/license/LICENSE.
> -#
> -
> -This file describes the directives and concepts tested by this test set.
> -
> -test set name:  spfatal02
> -
> -directives:
> -
> -  rtems_task_start for a user initialization task
> -
> -concepts:
> -
> -+ Ensure that when rtems_task_start returns an error when creating a
> Classic
> -  API user initialization task is properly treated as a fatal error.
> diff --git a/testsuites/sptests/spfatal02/spfatal02.scn
> b/testsuites/sptests/spfatal02/spfatal02.scn
> deleted file mode 100644
> index a6e6d93501..0000000000
> --- a/testsuites/sptests/spfatal02/spfatal02.scn
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -*** TEST FATAL 2 ***
> -Fatal error (Classic API Init task start failure) hit
> -*** END OF TEST FATAL 2 ***
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20201124/9e43034a/attachment-0001.html>


More information about the devel mailing list