diff options
Diffstat (limited to 'cpukit/include')
-rw-r--r-- | cpukit/include/rtems/record.h | 750 | ||||
-rw-r--r-- | cpukit/include/rtems/recorddata.h | 130 |
2 files changed, 807 insertions, 73 deletions
diff --git a/cpukit/include/rtems/record.h b/cpukit/include/rtems/record.h index 0446c2ae69..2d1b2f4809 100644 --- a/cpukit/include/rtems/record.h +++ b/cpukit/include/rtems/record.h @@ -34,7 +34,6 @@ #include <rtems/score/cpu.h> #include <rtems/score/percpu.h> #include <rtems/score/watchdog.h> -#include <rtems/rtems/intr.h> #include <rtems/counter.h> #ifdef __cplusplus @@ -57,10 +56,10 @@ typedef struct { } Record_Configuration; typedef struct { - Record_Control *control; - unsigned int head; - uint32_t now; - rtems_interrupt_level level; + Record_Control *control; + unsigned int head; + uint32_t now; + uint32_t level; } rtems_record_context; extern const Record_Configuration _Record_Configuration; @@ -165,6 +164,114 @@ typedef struct RTEMS_PACKED { void _Record_Stream_header_initialize( Record_Stream_header *header ); +void _Record_Caller( void *return_address ); + +void _Record_Caller_3( + void *return_address, + rtems_record_event event, + rtems_record_data data +); + +void _Record_Caller_4( + void *return_address, + rtems_record_event event_0, + rtems_record_data data_0, + rtems_record_event event_1, + rtems_record_data data_1 +); + +void _Record_Caller_arg( void *return_address, rtems_record_data data ); + +void _Record_Caller_arg_2( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1 +); + +void _Record_Caller_arg_3( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2 +); + +void _Record_Caller_arg_4( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3 +); + +void _Record_Caller_arg_5( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4 +); + +void _Record_Caller_arg_6( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5 +); + +void _Record_Caller_arg_7( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6 +); + +void _Record_Caller_arg_8( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6, + rtems_record_data data_7 +); + +void _Record_Caller_arg_9( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6, + rtems_record_data data_7, + rtems_record_data data_8 +); + +void _Record_Caller_arg_10( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6, + rtems_record_data data_7, + rtems_record_data data_8, + rtems_record_data data_9 +); + /** * @addtogroup RTEMSRecord * @@ -212,12 +319,13 @@ RTEMS_INLINE_ROUTINE void rtems_record_prepare_critical( */ RTEMS_INLINE_ROUTINE void rtems_record_prepare( rtems_record_context *context ) { - rtems_interrupt_level level; + uint32_t level; const Per_CPU_Control *cpu_self; Record_Control *control; unsigned int head; - rtems_interrupt_local_disable( level ); + _CPU_ISR_Disable( level ); + RTEMS_COMPILER_MEMORY_BARRIER(); context->now = RTEMS_RECORD_TIME_EVENT( _Record_Now(), 0 ); context->level = level; cpu_self = _Per_CPU_Get(); @@ -277,7 +385,8 @@ RTEMS_INLINE_ROUTINE void rtems_record_commit_critical( rtems_record_context *co RTEMS_INLINE_ROUTINE void rtems_record_commit( rtems_record_context *context ) { rtems_record_commit_critical( context ); - rtems_interrupt_local_enable( context->level ); + RTEMS_COMPILER_MEMORY_BARRIER(); + _CPU_ISR_Enable( context->level ); } /** @@ -314,6 +423,631 @@ void rtems_record_produce_n( size_t n ); +/** + * @brief Generates an RTEMS_RECORD_LINE event. + * + * The event data is the address of the call to this function. + */ +void rtems_record_line( void ); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and an extra event. + * + * The event data is the address of the call to this function. + * + * @param event The record event without a time stamp for the second item. + * @param data The record data for the second item. + */ +void rtems_record_line_2( + rtems_record_event event, + rtems_record_data data +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and two extra events. + * + * The event data is the address of the call to this function. + * + * @param event_0 The record event without a time stamp for the second item. + * @param data_0 The record data for the second item. + * @param event_1 The record event without a time stamp for the third item. + * @param data_1 The record data for the third item. + */ +void rtems_record_line_3( + rtems_record_event event_0, + rtems_record_data data_0, + rtems_record_event event_1, + rtems_record_data data_1 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and one argument event. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data The RTEMS_RECORD_ARG_0 event data. + */ +void rtems_record_line_arg( rtems_record_data data ); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and two argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + */ +void rtems_record_line_arg_2( + rtems_record_data data_0, + rtems_record_data data_1 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and three argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + */ +void rtems_record_line_arg_3( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and four argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + */ +void rtems_record_line_arg_4( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and five argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + */ +void rtems_record_line_arg_5( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and six argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + */ +void rtems_record_line_arg_6( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and seven argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + */ +void rtems_record_line_arg_7( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and eight argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + * @param data_7 The RTEMS_RECORD_ARG_7 event data. + */ +void rtems_record_line_arg_8( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6, + rtems_record_data data_7 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and nine argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + * @param data_7 The RTEMS_RECORD_ARG_7 event data. + * @param data_8 The RTEMS_RECORD_ARG_8 event data. + */ +void rtems_record_line_arg_9( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6, + rtems_record_data data_7, + rtems_record_data data_8 +); + +/** + * @brief Generates an RTEMS_RECORD_LINE event and ten argument events. + * + * The event data of the RTEMS_RECORD_LINE event is the address of the call to + * this function. + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + * @param data_7 The RTEMS_RECORD_ARG_7 event data. + * @param data_8 The RTEMS_RECORD_ARG_8 event data. + * @param data_9 The RTEMS_RECORD_ARG_9 event data. + */ +void rtems_record_line_arg_10( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2, + rtems_record_data data_3, + rtems_record_data data_4, + rtems_record_data data_5, + rtems_record_data data_6, + rtems_record_data data_7, + rtems_record_data data_8, + rtems_record_data data_9 +); + +/** + * @brief Generates an RTEMS_RECORD_CALLER and an RTEMS_RECORD_LINE event. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller(). + */ + +#define rtems_record_caller() _Record_Caller( RTEMS_RETURN_ADDRESS() ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER, an RTEMS_RECORD_LINE event, and an + * extra event. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_3(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_3(). + * + * @param event The record event without a time stamp for the third item. + * @param data The record data for the third item. + */ +#define rtems_record_caller_3( event, data ) \ + _Record_Caller_3( RTEMS_RETURN_ADDRESS(), event, data ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER, an RTEMS_RECORD_LINE event, and two + * extra events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_4(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_4(). + * + * @param event_0 The record event without a time stamp for the third item. + * @param data_0 The record data for the third item. + * @param event_1 The record event without a time stamp for the fourth item. + * @param data_1 The record data for the fourth item. + */ +#define rtems_record_caller_4( event_0, data_0, event_1, data_1 ) \ + _Record_Caller_4( \ + RTEMS_RETURN_ADDRESS(), \ + event_0, \ + data_0, \ + event_1, \ + data_1 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and one argument event. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg(). + * + * @param data The RTEMS_RECORD_ARG_0 event data. + */ +#define rtems_record_caller_arg( data ) \ + _Record_Caller_arg( RTEMS_RETURN_ADDRESS(), data ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and two argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_2(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_2(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + */ +#define rtems_record_caller_arg_2( data_0, data_1 ) \ + _Record_Caller_arg_2( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and three argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_3(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_3(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + */ +#define rtems_record_caller_arg_3( data_0, data_1, data_2 ) \ + _Record_Caller_arg_3( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and four argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_4(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_4(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + */ +#define rtems_record_caller_arg_4( data_0, data_1, data_2, data_3 ) \ + _Record_Caller_arg_4( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and five argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_5(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_5(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + */ +#define rtems_record_caller_arg_5( data_0, data_1, data_2, data_3, data_4 ) \ + _Record_Caller_arg_5( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and six argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_6(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_6(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + */ +#define rtems_record_caller_arg_6( \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5 \ +) \ + _Record_Caller_arg_6( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and seven argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_7(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_7(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + */ +#define rtems_record_caller_arg_7( \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6 \ +) \ + _Record_Caller_arg_7( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and eight argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_8(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_8(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + * @param data_7 The RTEMS_RECORD_ARG_7 event data. + */ +#define rtems_record_caller_arg_8( \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6, \ + data_7 \ +) \ + _Record_Caller_arg_8( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6, \ + data_7 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and nine argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_9(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_9(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + * @param data_7 The RTEMS_RECORD_ARG_7 event data. + * @param data_8 The RTEMS_RECORD_ARG_8 event data. + */ +#define rtems_record_caller_arg_9( \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6, \ + data_7, \ + data_8 \ +) \ + _Record_Caller_arg_9( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6, \ + data_7, \ + data_8 \ + ) + +/** + * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event, + * and ten argument events. + * + * The RTEMS_RECORD_CALLER event data is the return address of the function + * calling rtems_record_caller_arg_10(). + * + * The RTEMS_RECORD_LINE event data is the address of the call to + * rtems_record_caller_arg_10(). + * + * @param data_0 The RTEMS_RECORD_ARG_0 event data. + * @param data_1 The RTEMS_RECORD_ARG_1 event data. + * @param data_2 The RTEMS_RECORD_ARG_2 event data. + * @param data_3 The RTEMS_RECORD_ARG_3 event data. + * @param data_4 The RTEMS_RECORD_ARG_4 event data. + * @param data_5 The RTEMS_RECORD_ARG_5 event data. + * @param data_6 The RTEMS_RECORD_ARG_6 event data. + * @param data_7 The RTEMS_RECORD_ARG_7 event data. + * @param data_8 The RTEMS_RECORD_ARG_8 event data. + * @param data_10 The RTEMS_RECORD_ARG_10 event data. + */ +#define rtems_record_caller_arg_10( \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6, \ + data_7, \ + data_8, \ + data_9 \ +) \ + _Record_Caller_arg_10( \ + RTEMS_RETURN_ADDRESS(), \ + data_0, \ + data_1, \ + data_2, \ + data_3, \ + data_4, \ + data_5, \ + data_6, \ + data_7, \ + data_8, \ + data_9 \ + ) + +/** + * @brief Disables interrupts and generates an RTEMS_RECORD_ISR_DISABLE event. + * + * @return The previous interrupt level. + */ +uint32_t rtems_record_interrupt_disable( void ); + +/** + * @brief Restores the previous interrupt level and generates an + * RTEMS_RECORD_ISR_ENABLE event. + * + * @param level The previous interrupt level. Must be the return value of the + * corresponding rtems_record_interrupt_disable(). + */ +void rtems_record_interrupt_enable( uint32_t level ); + typedef void ( *rtems_record_drain_visitor )( const rtems_record_item *items, size_t count, diff --git a/cpukit/include/rtems/recorddata.h b/cpukit/include/rtems/recorddata.h index 607955c596..3b03be9890 100644 --- a/cpukit/include/rtems/recorddata.h +++ b/cpukit/include/rtems/recorddata.h @@ -55,7 +55,7 @@ extern "C" { * The record version reflects the record event definitions. It is reported by * the RTEMS_RECORD_VERSION event. */ -#define RTEMS_RECORD_THE_VERSION 5 +#define RTEMS_RECORD_THE_VERSION 6 /** * @brief The items are in 32-bit little-endian format. @@ -98,9 +98,21 @@ typedef enum { */ RTEMS_RECORD_ACCEPT_ENTRY, RTEMS_RECORD_ACCEPT_EXIT, + RTEMS_RECORD_ADDRESS, + RTEMS_RECORD_ARG_0, + RTEMS_RECORD_ARG_1, + RTEMS_RECORD_ARG_2, + RTEMS_RECORD_ARG_3, + RTEMS_RECORD_ARG_4, + RTEMS_RECORD_ARG_5, + RTEMS_RECORD_ARG_6, + RTEMS_RECORD_ARG_7, + RTEMS_RECORD_ARG_8, + RTEMS_RECORD_ARG_9, RTEMS_RECORD_BIND_ENTRY, RTEMS_RECORD_BIND_EXIT, RTEMS_RECORD_BUFFER, + RTEMS_RECORD_CALLER, RTEMS_RECORD_CHOWN_ENTRY, RTEMS_RECORD_CHOWN_EXIT, RTEMS_RECORD_CLOSE_ENTRY, @@ -145,11 +157,21 @@ typedef enum { RTEMS_RECORD_IP6_OUTPUT, RTEMS_RECORD_IP_INPUT, RTEMS_RECORD_IP_OUTPUT, + RTEMS_RECORD_ISR_DISABLE, + RTEMS_RECORD_ISR_ENABLE, + RTEMS_RECORD_ISR_LOCK_ACQUIRE_ENTRY, + RTEMS_RECORD_ISR_LOCK_ACQUIRE_EXIT, + RTEMS_RECORD_ISR_LOCK_ADDRESS, + RTEMS_RECORD_ISR_LOCK_DESTROY, + RTEMS_RECORD_ISR_LOCK_INITIALIZE, + RTEMS_RECORD_ISR_LOCK_NAME, + RTEMS_RECORD_ISR_LOCK_RELEASE, RTEMS_RECORD_KEVENT_ENTRY, RTEMS_RECORD_KEVENT_EXIT, RTEMS_RECORD_KQUEUE_ENTRY, RTEMS_RECORD_KQUEUE_EXIT, RTEMS_RECORD_LENGTH, + RTEMS_RECORD_LINE, RTEMS_RECORD_LINK_ENTRY, RTEMS_RECORD_LINK_EXIT, RTEMS_RECORD_LISTEN_ENTRY, @@ -228,6 +250,26 @@ typedef enum { RTEMS_RECORD_SBWAIT_EXIT, RTEMS_RECORD_SBWAKEUP_ENTRY, RTEMS_RECORD_SBWAKEUP_EXIT, + RTEMS_RECORD_SCHEDULER_ADD_PROCESSOR, + RTEMS_RECORD_SCHEDULER_ASK_FOR_HELP, + RTEMS_RECORD_SCHEDULER_BLOCK, + RTEMS_RECORD_SCHEDULER_CANCEL_JOB, + RTEMS_RECORD_SCHEDULER_ID, + RTEMS_RECORD_SCHEDULER_MAP_PRIORITY, + RTEMS_RECORD_SCHEDULER_NAME, + RTEMS_RECORD_SCHEDULER_PIN, + RTEMS_RECORD_SCHEDULER_RECONSIDER_HELP_REQUEST, + RTEMS_RECORD_SCHEDULER_RELEASE_JOB, + RTEMS_RECORD_SCHEDULER_REMOVE_PROCESSOR, + RTEMS_RECORD_SCHEDULER_SCHEDULE, + RTEMS_RECORD_SCHEDULER_SET_AFFINITY, + RTEMS_RECORD_SCHEDULER_TICK, + RTEMS_RECORD_SCHEDULER_UNBLOCK, + RTEMS_RECORD_SCHEDULER_UNMAP_PRIORITY, + RTEMS_RECORD_SCHEDULER_UNPIN, + RTEMS_RECORD_SCHEDULER_UPDATE_PRIORITY, + RTEMS_RECORD_SCHEDULER_WITHDRAW_NODE, + RTEMS_RECORD_SCHEDULER_YIELD, RTEMS_RECORD_SELECT_ENTRY, RTEMS_RECORD_SELECT_EXIT, RTEMS_RECORD_SEND_ENTRY, @@ -286,8 +328,12 @@ typedef enum { RTEMS_RECORD_TCP_INPUT, RTEMS_RECORD_TCP_OUTPUT, RTEMS_RECORD_THREAD_BEGIN, + RTEMS_RECORD_THREAD_CONTINUE_ENTRY, + RTEMS_RECORD_THREAD_CONTINUE_EXIT, RTEMS_RECORD_THREAD_CREATE, RTEMS_RECORD_THREAD_DELETE, + RTEMS_RECORD_THREAD_DISPATCH_DISABLE, + RTEMS_RECORD_THREAD_DISPATCH_ENABLE, RTEMS_RECORD_THREAD_EXIT, RTEMS_RECORD_THREAD_EXITTED, RTEMS_RECORD_THREAD_ID, @@ -296,9 +342,14 @@ typedef enum { RTEMS_RECORD_THREAD_PRIO_CURRENT_LOW, RTEMS_RECORD_THREAD_PRIO_REAL_HIGH, RTEMS_RECORD_THREAD_PRIO_REAL_LOW, + RTEMS_RECORD_THREAD_QUEUE_ADDRESS, + RTEMS_RECORD_THREAD_QUEUE_DESTROY, RTEMS_RECORD_THREAD_QUEUE_ENQUEUE, RTEMS_RECORD_THREAD_QUEUE_ENQUEUE_STICKY, RTEMS_RECORD_THREAD_QUEUE_EXTRACT, + RTEMS_RECORD_THREAD_QUEUE_ID, + RTEMS_RECORD_THREAD_QUEUE_INITIALIZE, + RTEMS_RECORD_THREAD_QUEUE_NAME, RTEMS_RECORD_THREAD_QUEUE_SURRENDER, RTEMS_RECORD_THREAD_QUEUE_SURRENDER_STICKY, RTEMS_RECORD_THREAD_RESOURCE_OBTAIN, @@ -313,6 +364,10 @@ typedef enum { RTEMS_RECORD_THREAD_SWITCH_IN, RTEMS_RECORD_THREAD_SWITCH_OUT, RTEMS_RECORD_THREAD_TERMINATE, + RTEMS_RECORD_THREAD_TIMER_INSERT_MONOTONIC, + RTEMS_RECORD_THREAD_TIMER_INSERT_REALTIME, + RTEMS_RECORD_THREAD_TIMER_INSERT_TICKS, + RTEMS_RECORD_THREAD_TIMER_REMOVE, RTEMS_RECORD_UDP_INPUT, RTEMS_RECORD_UDP_OUTPUT, RTEMS_RECORD_UMA_ALLOC_PTR, @@ -325,6 +380,14 @@ typedef enum { RTEMS_RECORD_UNMOUNT_EXIT, RTEMS_RECORD_UPTIME_HIGH, RTEMS_RECORD_UPTIME_LOW, + RTEMS_RECORD_WATCHDOG_ADDRESS, + RTEMS_RECORD_WATCHDOG_CPU, + RTEMS_RECORD_WATCHDOG_INITIALIZE, + RTEMS_RECORD_WATCHDOG_INSERT, + RTEMS_RECORD_WATCHDOG_PREINITIALIZE, + RTEMS_RECORD_WATCHDOG_REMOVE, + RTEMS_RECORD_WATCHDOG_ROUTINE, + RTEMS_RECORD_WATCHDOG_STATE, RTEMS_RECORD_WORKSPACE_ALLOC, RTEMS_RECORD_WORKSPACE_FREE, RTEMS_RECORD_WORKSPACE_SIZE, @@ -335,70 +398,6 @@ typedef enum { RTEMS_RECORD_WRITEV_EXIT, /* Unused system events */ - RTEMS_RECORD_SYSTEM_238, - RTEMS_RECORD_SYSTEM_239, - RTEMS_RECORD_SYSTEM_240, - RTEMS_RECORD_SYSTEM_241, - RTEMS_RECORD_SYSTEM_242, - RTEMS_RECORD_SYSTEM_243, - RTEMS_RECORD_SYSTEM_244, - RTEMS_RECORD_SYSTEM_245, - RTEMS_RECORD_SYSTEM_246, - RTEMS_RECORD_SYSTEM_247, - RTEMS_RECORD_SYSTEM_248, - RTEMS_RECORD_SYSTEM_249, - RTEMS_RECORD_SYSTEM_250, - RTEMS_RECORD_SYSTEM_251, - RTEMS_RECORD_SYSTEM_252, - RTEMS_RECORD_SYSTEM_253, - RTEMS_RECORD_SYSTEM_254, - RTEMS_RECORD_SYSTEM_255, - RTEMS_RECORD_SYSTEM_256, - RTEMS_RECORD_SYSTEM_257, - RTEMS_RECORD_SYSTEM_258, - RTEMS_RECORD_SYSTEM_259, - RTEMS_RECORD_SYSTEM_260, - RTEMS_RECORD_SYSTEM_261, - RTEMS_RECORD_SYSTEM_262, - RTEMS_RECORD_SYSTEM_263, - RTEMS_RECORD_SYSTEM_264, - RTEMS_RECORD_SYSTEM_265, - RTEMS_RECORD_SYSTEM_266, - RTEMS_RECORD_SYSTEM_267, - RTEMS_RECORD_SYSTEM_268, - RTEMS_RECORD_SYSTEM_269, - RTEMS_RECORD_SYSTEM_270, - RTEMS_RECORD_SYSTEM_271, - RTEMS_RECORD_SYSTEM_272, - RTEMS_RECORD_SYSTEM_273, - RTEMS_RECORD_SYSTEM_274, - RTEMS_RECORD_SYSTEM_275, - RTEMS_RECORD_SYSTEM_276, - RTEMS_RECORD_SYSTEM_277, - RTEMS_RECORD_SYSTEM_278, - RTEMS_RECORD_SYSTEM_279, - RTEMS_RECORD_SYSTEM_280, - RTEMS_RECORD_SYSTEM_281, - RTEMS_RECORD_SYSTEM_282, - RTEMS_RECORD_SYSTEM_283, - RTEMS_RECORD_SYSTEM_284, - RTEMS_RECORD_SYSTEM_285, - RTEMS_RECORD_SYSTEM_286, - RTEMS_RECORD_SYSTEM_287, - RTEMS_RECORD_SYSTEM_288, - RTEMS_RECORD_SYSTEM_289, - RTEMS_RECORD_SYSTEM_290, - RTEMS_RECORD_SYSTEM_291, - RTEMS_RECORD_SYSTEM_292, - RTEMS_RECORD_SYSTEM_293, - RTEMS_RECORD_SYSTEM_294, - RTEMS_RECORD_SYSTEM_295, - RTEMS_RECORD_SYSTEM_296, - RTEMS_RECORD_SYSTEM_297, - RTEMS_RECORD_SYSTEM_298, - RTEMS_RECORD_SYSTEM_299, - RTEMS_RECORD_SYSTEM_300, - RTEMS_RECORD_SYSTEM_301, RTEMS_RECORD_SYSTEM_302, RTEMS_RECORD_SYSTEM_303, RTEMS_RECORD_SYSTEM_304, @@ -608,6 +607,7 @@ typedef enum { RTEMS_RECORD_SYSTEM_508, RTEMS_RECORD_SYSTEM_509, RTEMS_RECORD_SYSTEM_510, + RTEMS_RECORD_SYSTEM_511, /* There are 512 events reserved for the user */ RTEMS_RECORD_USER_0, |