forked from Imagelibrary/rtems
Avoid INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL
Replace a runtime check with a compile time assertion. This makes the INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL obsolete. Update #4181.
This commit is contained in:
@@ -100,6 +100,27 @@ extern "C" {
|
|||||||
#define CONFIGURE_INIT_TASK_ARGUMENTS 0
|
#define CONFIGURE_INIT_TASK_ARGUMENTS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ignore the following warnings from g++ and clang in the static assertion
|
||||||
|
* below:
|
||||||
|
*
|
||||||
|
* warning: the address of 'void Init()' will never be NULL [-Waddress]
|
||||||
|
*
|
||||||
|
* warning: comparison of function 'Init' not equal to a null pointer is always
|
||||||
|
* true [-Wtautological-pointer-compare]
|
||||||
|
*/
|
||||||
|
#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 = {
|
const rtems_initialization_tasks_table _RTEMS_tasks_User_task_table = {
|
||||||
CONFIGURE_INIT_TASK_NAME,
|
CONFIGURE_INIT_TASK_NAME,
|
||||||
CONFIGURE_INIT_TASK_STACK_SIZE,
|
CONFIGURE_INIT_TASK_STACK_SIZE,
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ typedef enum {
|
|||||||
INTERNAL_ERROR_NO_MEMORY_FOR_HEAP = 23,
|
INTERNAL_ERROR_NO_MEMORY_FOR_HEAP = 23,
|
||||||
INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR = 24,
|
INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR = 24,
|
||||||
INTERNAL_ERROR_RESOURCE_IN_USE = 25,
|
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_POSIX_INIT_THREAD_ENTRY_IS_NULL = 27, */
|
||||||
INTERNAL_ERROR_THREAD_QUEUE_DEADLOCK = 28,
|
INTERNAL_ERROR_THREAD_QUEUE_DEADLOCK = 28,
|
||||||
INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE = 29,
|
INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE = 29,
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ void _RTEMS_tasks_Initialize_user_task( void )
|
|||||||
rtems_id id;
|
rtems_id id;
|
||||||
rtems_status_code return_value;
|
rtems_status_code return_value;
|
||||||
const rtems_initialization_tasks_table *user_task;
|
const rtems_initialization_tasks_table *user_task;
|
||||||
rtems_task_entry entry_point;
|
|
||||||
|
|
||||||
user_task = &_RTEMS_tasks_User_task_table;
|
user_task = &_RTEMS_tasks_User_task_table;
|
||||||
return_value = rtems_task_create(
|
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 );
|
_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(
|
return_value = rtems_task_start(
|
||||||
id,
|
id,
|
||||||
entry_point,
|
user_task->entry_point,
|
||||||
user_task->argument
|
user_task->argument
|
||||||
);
|
);
|
||||||
_Assert( rtems_is_status_successful( return_value ) );
|
_Assert( rtems_is_status_successful( return_value ) );
|
||||||
|
|||||||
@@ -218,8 +218,6 @@ links:
|
|||||||
uid: spextensions01
|
uid: spextensions01
|
||||||
- role: build-dependency
|
- role: build-dependency
|
||||||
uid: spfatal01
|
uid: spfatal01
|
||||||
- role: build-dependency
|
|
||||||
uid: spfatal02
|
|
||||||
- role: build-dependency
|
- role: build-dependency
|
||||||
uid: spfatal03
|
uid: spfatal03
|
||||||
- role: build-dependency
|
- role: build-dependency
|
||||||
|
|||||||
@@ -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: []
|
|
||||||
@@ -904,15 +904,6 @@ spfatal01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_spfatal01) \
|
|||||||
$(support_includes)
|
$(support_includes)
|
||||||
endif
|
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
|
if TEST_spfatal03
|
||||||
sp_tests += spfatal03
|
sp_tests += spfatal03
|
||||||
sp_screens += spfatal03/spfatal03.scn
|
sp_screens += spfatal03/spfatal03.scn
|
||||||
|
|||||||
@@ -137,7 +137,6 @@ RTEMS_TEST_CHECK([speventsystem01])
|
|||||||
RTEMS_TEST_CHECK([speventtransient01])
|
RTEMS_TEST_CHECK([speventtransient01])
|
||||||
RTEMS_TEST_CHECK([spextensions01])
|
RTEMS_TEST_CHECK([spextensions01])
|
||||||
RTEMS_TEST_CHECK([spfatal01])
|
RTEMS_TEST_CHECK([spfatal01])
|
||||||
RTEMS_TEST_CHECK([spfatal02])
|
|
||||||
RTEMS_TEST_CHECK([spfatal03])
|
RTEMS_TEST_CHECK([spfatal03])
|
||||||
RTEMS_TEST_CHECK([spfatal04])
|
RTEMS_TEST_CHECK([spfatal04])
|
||||||
RTEMS_TEST_CHECK([spfatal05])
|
RTEMS_TEST_CHECK([spfatal05])
|
||||||
|
|||||||
@@ -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"
|
|
||||||
@@ -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.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
*** TEST FATAL 2 ***
|
|
||||||
Fatal error (Classic API Init task start failure) hit
|
|
||||||
*** END OF TEST FATAL 2 ***
|
|
||||||
Reference in New Issue
Block a user