forked from Imagelibrary/rtems
sparc: Prefer RTEMS_FATAL_SOURCE_EXCEPTION
Prefer RTEMS_FATAL_SOURCE_EXCEPTION over INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT since the fatal code (rtems_exception_frame) provides more context.
This commit is contained in:
@@ -208,20 +208,6 @@ SYM(_SPARC_Bad_trap):
|
|||||||
std %f30, [%l7 + SPARC_EXCEPTION_OFFSET_FP(15)]
|
std %f30, [%l7 + SPARC_EXCEPTION_OFFSET_FP(15)]
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(SPARC_USE_LAZY_FP_SWITCH)
|
|
||||||
/*
|
|
||||||
* Call
|
|
||||||
* _Internal_error( INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT )
|
|
||||||
* if necessary.
|
|
||||||
*/
|
|
||||||
cmp %l3, 4
|
|
||||||
bne .Lno_fp_disable_trap
|
|
||||||
nop
|
|
||||||
call SYM(_Internal_error)
|
|
||||||
set 38, %o0
|
|
||||||
.Lno_fp_disable_trap:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call _Terminate( RTEMS_FATAL_SOURCE_EXCEPTION, %l0 ).
|
* Call _Terminate( RTEMS_FATAL_SOURCE_EXCEPTION, %l0 ).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -22,9 +22,28 @@
|
|||||||
|
|
||||||
const char rtems_test_name[] = "SPFATAL 30";
|
const char rtems_test_name[] = "SPFATAL 30";
|
||||||
|
|
||||||
#if (CPU_HARDWARE_FP == TRUE && CPU_ALL_TASKS_ARE_FP == FALSE) \
|
#if ( CPU_HARDWARE_FP == TRUE && CPU_ALL_TASKS_ARE_FP == FALSE ) || \
|
||||||
|| SPARC_HAS_FPU == 1
|
defined(SPARC_USE_LAZY_FP_SWITCH)
|
||||||
#define EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
|
||||||
|
#define EXPECTED_FATAL_SOURCE INTERNAL_ERROR_CORE
|
||||||
|
|
||||||
|
static bool is_expected_fatal_code( rtems_fatal_code code )
|
||||||
|
{
|
||||||
|
return code == INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(SPARC_USE_SYNCHRONOUS_FP_SWITCH)
|
||||||
|
|
||||||
|
#define EXPECTED_FATAL_SOURCE RTEMS_FATAL_SOURCE_EXCEPTION
|
||||||
|
|
||||||
|
static bool is_expected_fatal_code( rtems_fatal_code code )
|
||||||
|
{
|
||||||
|
const rtems_exception_frame *frame;
|
||||||
|
|
||||||
|
frame = (const rtems_exception_frame *) code;
|
||||||
|
return frame->trap == 4;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static volatile double f = 1.0;
|
static volatile double f = 1.0;
|
||||||
@@ -35,7 +54,7 @@ static void Init(rtems_task_argument arg)
|
|||||||
|
|
||||||
f *= 123.456;
|
f *= 123.456;
|
||||||
|
|
||||||
#ifdef EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
#ifdef EXPECTED_FATAL_SOURCE
|
||||||
rtems_test_assert(0);
|
rtems_test_assert(0);
|
||||||
#else
|
#else
|
||||||
TEST_END();
|
TEST_END();
|
||||||
@@ -43,7 +62,7 @@ static void Init(rtems_task_argument arg)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
#ifdef EXPECTED_FATAL_SOURCE
|
||||||
static void fatal_extension(
|
static void fatal_extension(
|
||||||
rtems_fatal_source source,
|
rtems_fatal_source source,
|
||||||
bool always_set_to_false,
|
bool always_set_to_false,
|
||||||
@@ -51,9 +70,9 @@ static void fatal_extension(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
source == INTERNAL_ERROR_CORE
|
source == EXPECTED_FATAL_SOURCE
|
||||||
&& !always_set_to_false
|
&& !always_set_to_false
|
||||||
&& code == INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
&& is_expected_fatal_code( code )
|
||||||
) {
|
) {
|
||||||
TEST_END();
|
TEST_END();
|
||||||
}
|
}
|
||||||
@@ -63,11 +82,11 @@ static void fatal_extension(
|
|||||||
{ .fatal = fatal_extension }, \
|
{ .fatal = fatal_extension }, \
|
||||||
RTEMS_TEST_INITIAL_EXTENSION
|
RTEMS_TEST_INITIAL_EXTENSION
|
||||||
|
|
||||||
#else /* EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT */
|
#else /* EXPECTED_FATAL_SOURCE */
|
||||||
|
|
||||||
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
||||||
|
|
||||||
#endif /* EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT */
|
#endif /* EXPECTED_FATAL_SOURCE */
|
||||||
|
|
||||||
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,27 @@
|
|||||||
|
|
||||||
const char rtems_test_name[] = "SPFATAL 31";
|
const char rtems_test_name[] = "SPFATAL 31";
|
||||||
|
|
||||||
#if SPARC_HAS_FPU == 1
|
#if defined(SPARC_USE_LAZY_FP_SWITCH)
|
||||||
#define EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
|
||||||
|
#define EXPECTED_FATAL_SOURCE INTERNAL_ERROR_CORE
|
||||||
|
|
||||||
|
static bool is_expected_fatal_code( rtems_fatal_code code )
|
||||||
|
{
|
||||||
|
return code == INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(SPARC_USE_SYNCHRONOUS_FP_SWITCH)
|
||||||
|
|
||||||
|
#define EXPECTED_FATAL_SOURCE RTEMS_FATAL_SOURCE_EXCEPTION
|
||||||
|
|
||||||
|
static bool is_expected_fatal_code( rtems_fatal_code code )
|
||||||
|
{
|
||||||
|
const rtems_exception_frame *frame;
|
||||||
|
|
||||||
|
frame = (const rtems_exception_frame *) code;
|
||||||
|
return frame->trap == 4;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static volatile double f = 1.0;
|
static volatile double f = 1.0;
|
||||||
@@ -49,7 +68,7 @@ static void Init(rtems_task_argument arg)
|
|||||||
sc = rtems_task_wake_after(2);
|
sc = rtems_task_wake_after(2);
|
||||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||||
|
|
||||||
#ifdef EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
#ifdef EXPECTED_FATAL_SOURCE
|
||||||
rtems_test_assert(0);
|
rtems_test_assert(0);
|
||||||
#else
|
#else
|
||||||
TEST_END();
|
TEST_END();
|
||||||
@@ -57,7 +76,7 @@ static void Init(rtems_task_argument arg)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
#ifdef EXPECTED_FATAL_SOURCE
|
||||||
static void fatal_extension(
|
static void fatal_extension(
|
||||||
rtems_fatal_source source,
|
rtems_fatal_source source,
|
||||||
bool always_set_to_false,
|
bool always_set_to_false,
|
||||||
@@ -65,9 +84,9 @@ static void fatal_extension(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
source == INTERNAL_ERROR_CORE
|
source == EXPECTED_FATAL_SOURCE
|
||||||
&& !always_set_to_false
|
&& !always_set_to_false
|
||||||
&& code == INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
|
&& is_expected_fatal_code( code )
|
||||||
) {
|
) {
|
||||||
TEST_END();
|
TEST_END();
|
||||||
}
|
}
|
||||||
@@ -77,11 +96,11 @@ static void fatal_extension(
|
|||||||
{ .fatal = fatal_extension }, \
|
{ .fatal = fatal_extension }, \
|
||||||
RTEMS_TEST_INITIAL_EXTENSION
|
RTEMS_TEST_INITIAL_EXTENSION
|
||||||
|
|
||||||
#else /* EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT */
|
#else /* EXPECTED_FATAL_SOURCE */
|
||||||
|
|
||||||
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
||||||
|
|
||||||
#endif /* EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT */
|
#endif /* EXPECTED_FATAL_SOURCE */
|
||||||
|
|
||||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user