forked from Imagelibrary/rtems
Added code to the macros which checked directive status to also
check that the _Thread_Dispatch_disable_level is set to the proper value (0 99% of the time). This automatic check significantly reduces the chance of mismatching disable/enable dispatch pairs while doing internal RTEMS work.
This commit is contained in:
@@ -25,6 +25,7 @@ extern "C" {
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#define FOREVER 1 /* infinite loop */
|
#define FOREVER 1 /* infinite loop */
|
||||||
|
|
||||||
@@ -35,35 +36,58 @@ extern "C" {
|
|||||||
#define TEST_EXTERN extern
|
#define TEST_EXTERN extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define directive_failed( dirstat, failmsg ) \
|
#define check_dispatch_disable_level( _expect ) \
|
||||||
fatal_directive_status( dirstat, RTEMS_SUCCESSFUL, failmsg )
|
|
||||||
|
|
||||||
#define fatal_directive_status( stat, desired, msg ) \
|
|
||||||
do { \
|
do { \
|
||||||
if ( (stat) != (desired) ) { \
|
extern volatile rtems_unsigned32 _Thread_Dispatch_disable_level; \
|
||||||
printf( "\n%s FAILED -- expected (%d) got (%d)\n", \
|
if ( _Thread_Dispatch_disable_level != (_expect) ) { \
|
||||||
(msg), (desired), (stat) ); \
|
printf( "\n_Thread_Dispatch_disable_level is (%d) not %d\n", \
|
||||||
|
_Thread_Dispatch_disable_level, (_expect) ); \
|
||||||
fflush(stdout); \
|
fflush(stdout); \
|
||||||
exit( stat ); \
|
exit( 1 ); \
|
||||||
} \
|
} \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#define sprint_time(str,s1,tb,s2) \
|
#define directive_failed( _dirstat, _failmsg ) \
|
||||||
|
fatal_directive_status( _dirstat, RTEMS_SUCCESSFUL, _failmsg )
|
||||||
|
|
||||||
|
#define directive_failed_with_level( _dirstat, _failmsg, _level ) \
|
||||||
|
fatal_directive_status_with_level( \
|
||||||
|
_dirstat, RTEMS_SUCCESSFUL, _failmsg, _level )
|
||||||
|
|
||||||
|
#define fatal_directive_status( _stat, _desired, _msg ) \
|
||||||
|
fatal_directive_status_with_level( _stat, _desired, _msg, 0 )
|
||||||
|
|
||||||
|
#define fatal_directive_status_with_level( _stat, _desired, _msg, _level ) \
|
||||||
do { \
|
do { \
|
||||||
sprintf( (str), "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
check_dispatch_disable_level( _level ); \
|
||||||
s1, (tb)->hour, (tb)->minute, (tb)->second, \
|
if ( (_stat) != (_desired) ) { \
|
||||||
(tb)->month, (tb)->day, (tb)->year, s2 ); \
|
printf( "\n%s FAILED -- expected (%d) got (%d)\n", \
|
||||||
|
(_msg), (_desired), (_stat) ); \
|
||||||
|
fflush(stdout); \
|
||||||
|
exit( _stat ); \
|
||||||
|
} \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#define print_time(s1,tb,s2) \
|
#define sprint_time(_str, _s1, _tb, _s2) \
|
||||||
|
do { \
|
||||||
|
sprintf( (str), "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
||||||
|
_s1, (_tb)->hour, (_tb)->minute, (_tb)->second, \
|
||||||
|
(_tb)->month, (_tb)->day, (_tb)->year, _s2 ); \
|
||||||
|
} while ( 0 )
|
||||||
|
|
||||||
|
#define print_time(_s1, _tb, _s2) \
|
||||||
do { \
|
do { \
|
||||||
printf( "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
printf( "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
||||||
s1, (tb)->hour, (tb)->minute, (tb)->second, \
|
_s1, (_tb)->hour, (_tb)->minute, (_tb)->second, \
|
||||||
(tb)->month, (tb)->day, (tb)->year, s2 ); \
|
(_tb)->month, (_tb)->day, (_tb)->year, _s2 ); \
|
||||||
fflush(stdout); \
|
fflush(stdout); \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#define put_dot( c ) putchar( c ); fflush( stdout )
|
#define put_dot( _c ) \
|
||||||
|
do { \
|
||||||
|
putchar( _c ); \
|
||||||
|
fflush( stdout ); \
|
||||||
|
} while ( 0 )
|
||||||
|
|
||||||
#define new_line puts( "" )
|
#define new_line puts( "" )
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ extern "C" {
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#define FOREVER 1 /* infinite loop */
|
#define FOREVER 1 /* infinite loop */
|
||||||
|
|
||||||
@@ -35,35 +36,58 @@ extern "C" {
|
|||||||
#define TEST_EXTERN extern
|
#define TEST_EXTERN extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define directive_failed( dirstat, failmsg ) \
|
#define check_dispatch_disable_level( _expect ) \
|
||||||
fatal_directive_status( dirstat, RTEMS_SUCCESSFUL, failmsg )
|
|
||||||
|
|
||||||
#define fatal_directive_status( stat, desired, msg ) \
|
|
||||||
do { \
|
do { \
|
||||||
if ( (stat) != (desired) ) { \
|
extern volatile rtems_unsigned32 _Thread_Dispatch_disable_level; \
|
||||||
printf( "\n%s FAILED -- expected (%d) got (%d)\n", \
|
if ( _Thread_Dispatch_disable_level != (_expect) ) { \
|
||||||
(msg), (desired), (stat) ); \
|
printf( "\n_Thread_Dispatch_disable_level is (%d) not %d\n", \
|
||||||
|
_Thread_Dispatch_disable_level, (_expect) ); \
|
||||||
fflush(stdout); \
|
fflush(stdout); \
|
||||||
exit( stat ); \
|
exit( 1 ); \
|
||||||
} \
|
} \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#define sprint_time(str,s1,tb,s2) \
|
#define directive_failed( _dirstat, _failmsg ) \
|
||||||
|
fatal_directive_status( _dirstat, RTEMS_SUCCESSFUL, _failmsg )
|
||||||
|
|
||||||
|
#define directive_failed_with_level( _dirstat, _failmsg, _level ) \
|
||||||
|
fatal_directive_status_with_level( \
|
||||||
|
_dirstat, RTEMS_SUCCESSFUL, _failmsg, _level )
|
||||||
|
|
||||||
|
#define fatal_directive_status( _stat, _desired, _msg ) \
|
||||||
|
fatal_directive_status_with_level( _stat, _desired, _msg, 0 )
|
||||||
|
|
||||||
|
#define fatal_directive_status_with_level( _stat, _desired, _msg, _level ) \
|
||||||
do { \
|
do { \
|
||||||
sprintf( (str), "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
check_dispatch_disable_level( _level ); \
|
||||||
s1, (tb)->hour, (tb)->minute, (tb)->second, \
|
if ( (_stat) != (_desired) ) { \
|
||||||
(tb)->month, (tb)->day, (tb)->year, s2 ); \
|
printf( "\n%s FAILED -- expected (%d) got (%d)\n", \
|
||||||
|
(_msg), (_desired), (_stat) ); \
|
||||||
|
fflush(stdout); \
|
||||||
|
exit( _stat ); \
|
||||||
|
} \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#define print_time(s1,tb,s2) \
|
#define sprint_time(_str, _s1, _tb, _s2) \
|
||||||
|
do { \
|
||||||
|
sprintf( (str), "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
||||||
|
_s1, (_tb)->hour, (_tb)->minute, (_tb)->second, \
|
||||||
|
(_tb)->month, (_tb)->day, (_tb)->year, _s2 ); \
|
||||||
|
} while ( 0 )
|
||||||
|
|
||||||
|
#define print_time(_s1, _tb, _s2) \
|
||||||
do { \
|
do { \
|
||||||
printf( "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
printf( "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
|
||||||
s1, (tb)->hour, (tb)->minute, (tb)->second, \
|
_s1, (_tb)->hour, (_tb)->minute, (_tb)->second, \
|
||||||
(tb)->month, (tb)->day, (tb)->year, s2 ); \
|
(_tb)->month, (_tb)->day, (_tb)->year, _s2 ); \
|
||||||
fflush(stdout); \
|
fflush(stdout); \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#define put_dot( c ) putchar( c ); fflush( stdout )
|
#define put_dot( _c ) \
|
||||||
|
do { \
|
||||||
|
putchar( _c ); \
|
||||||
|
fflush( stdout ); \
|
||||||
|
} while ( 0 )
|
||||||
|
|
||||||
#define new_line puts( "" )
|
#define new_line puts( "" )
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user