From 58bd67bb358513e6523ee5f94d7df55332a3a7b2 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 26 Aug 2019 14:58:54 +0200 Subject: record: Add more system events Reduce the system dependencies to allow tracing of very low level functions, for example the interrupt disable/enable. Introduce general purpose RTEMS_RECORD_CALLER and RTEMS_RECORD_LINE events. Update #3665. --- cpukit/Makefile.am | 1 + cpukit/include/rtems/record.h | 750 +++++++++++++++++++++++++++++- cpukit/include/rtems/recorddata.h | 130 +++--- cpukit/libtrace/record/record-text.c | 128 ++--- cpukit/libtrace/record/record-util.c | 704 ++++++++++++++++++++++++++++ testsuites/libtests/record02/init.c | 32 +- testsuites/libtests/record02/record02.scn | 305 +++++++++--- 7 files changed, 1838 insertions(+), 212 deletions(-) create mode 100644 cpukit/libtrace/record/record-util.c diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am index 3522916d8f..01ee40980f 100644 --- a/cpukit/Makefile.am +++ b/cpukit/Makefile.am @@ -477,6 +477,7 @@ librtemscpu_a_SOURCES += libtrace/record/record-server.c librtemscpu_a_SOURCES += libtrace/record/record-sysinit.c librtemscpu_a_SOURCES += libtrace/record/record-text.c librtemscpu_a_SOURCES += libtrace/record/record-userext.c +librtemscpu_a_SOURCES += libtrace/record/record-util.c librtemscpu_a_SOURCES += posix/src/adjtime.c librtemscpu_a_SOURCES += posix/src/aio_suspend.c librtemscpu_a_SOURCES += posix/src/barrierattrdestroy.c 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 #include #include -#include #include #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, diff --git a/cpukit/libtrace/record/record-text.c b/cpukit/libtrace/record/record-text.c index 5652ab051c..09f8d15d95 100644 --- a/cpukit/libtrace/record/record-text.c +++ b/cpukit/libtrace/record/record-text.c @@ -43,9 +43,21 @@ static const char * const event_text[] = { [ RTEMS_RECORD_VERSION ] = "VERSION", [ RTEMS_RECORD_ACCEPT_ENTRY ] = "ACCEPT_ENTRY", [ RTEMS_RECORD_ACCEPT_EXIT ] = "ACCEPT_EXIT", + [ RTEMS_RECORD_ADDRESS ] = "ADDRESS", + [ RTEMS_RECORD_ARG_0 ] = "ARG_0", + [ RTEMS_RECORD_ARG_1 ] = "ARG_1", + [ RTEMS_RECORD_ARG_2 ] = "ARG_2", + [ RTEMS_RECORD_ARG_3 ] = "ARG_3", + [ RTEMS_RECORD_ARG_4 ] = "ARG_4", + [ RTEMS_RECORD_ARG_5 ] = "ARG_5", + [ RTEMS_RECORD_ARG_6 ] = "ARG_6", + [ RTEMS_RECORD_ARG_7 ] = "ARG_7", + [ RTEMS_RECORD_ARG_8 ] = "ARG_8", + [ RTEMS_RECORD_ARG_9 ] = "ARG_9", [ RTEMS_RECORD_BIND_ENTRY ] = "BIND_ENTRY", [ RTEMS_RECORD_BIND_EXIT ] = "BIND_EXIT", [ RTEMS_RECORD_BUFFER ] = "BUFFER", + [ RTEMS_RECORD_CALLER ] = "CALLER", [ RTEMS_RECORD_CHOWN_ENTRY ] = "CHOWN_ENTRY", [ RTEMS_RECORD_CHOWN_EXIT ] = "CHOWN_EXIT", [ RTEMS_RECORD_CLOSE_ENTRY ] = "CLOSE_ENTRY", @@ -90,11 +102,21 @@ static const char * const event_text[] = { [ RTEMS_RECORD_IP6_OUTPUT ] = "IP6_OUTPUT", [ RTEMS_RECORD_IP_INPUT ] = "IP_INPUT", [ RTEMS_RECORD_IP_OUTPUT ] = "IP_OUTPUT", + [ RTEMS_RECORD_ISR_DISABLE ] = "ISR_DISABLE", + [ RTEMS_RECORD_ISR_ENABLE ] = "ISR_ENABLE", + [ RTEMS_RECORD_ISR_LOCK_ACQUIRE_ENTRY ] = "ISR_LOCK_ACQUIRE_ENTRY", + [ RTEMS_RECORD_ISR_LOCK_ACQUIRE_EXIT ] = "ISR_LOCK_ACQUIRE_EXIT", + [ RTEMS_RECORD_ISR_LOCK_ADDRESS ] = "ISR_LOCK_ADDRESS", + [ RTEMS_RECORD_ISR_LOCK_DESTROY ] = "ISR_LOCK_DESTROY", + [ RTEMS_RECORD_ISR_LOCK_INITIALIZE ] = "ISR_LOCK_INITIALIZE", + [ RTEMS_RECORD_ISR_LOCK_NAME ] = "ISR_LOCK_NAME", + [ RTEMS_RECORD_ISR_LOCK_RELEASE ] = "ISR_LOCK_RELEASE", [ RTEMS_RECORD_KEVENT_ENTRY ] = "KEVENT_ENTRY", [ RTEMS_RECORD_KEVENT_EXIT ] = "KEVENT_EXIT", [ RTEMS_RECORD_KQUEUE_ENTRY ] = "KQUEUE_ENTRY", [ RTEMS_RECORD_KQUEUE_EXIT ] = "KQUEUE_EXIT", [ RTEMS_RECORD_LENGTH ] = "LENGTH", + [ RTEMS_RECORD_LINE ] = "LINE", [ RTEMS_RECORD_LINK_ENTRY ] = "LINK_ENTRY", [ RTEMS_RECORD_LINK_EXIT ] = "LINK_EXIT", [ RTEMS_RECORD_LISTEN_ENTRY ] = "LISTEN_ENTRY", @@ -173,6 +195,26 @@ static const char * const event_text[] = { [ RTEMS_RECORD_SBWAIT_EXIT ] = "SBWAIT_EXIT", [ RTEMS_RECORD_SBWAKEUP_ENTRY ] = "SBWAKEUP_ENTRY", [ RTEMS_RECORD_SBWAKEUP_EXIT ] = "SBWAKEUP_EXIT", + [ RTEMS_RECORD_SCHEDULER_ADD_PROCESSOR ] = "SCHEDULER_ADD_PROCESSOR", + [ RTEMS_RECORD_SCHEDULER_ASK_FOR_HELP ] = "SCHEDULER_ASK_FOR_HELP", + [ RTEMS_RECORD_SCHEDULER_BLOCK ] = "SCHEDULER_BLOCK", + [ RTEMS_RECORD_SCHEDULER_CANCEL_JOB ] = "SCHEDULER_CANCEL_JOB", + [ RTEMS_RECORD_SCHEDULER_ID ] = "SCHEDULER_ID", + [ RTEMS_RECORD_SCHEDULER_MAP_PRIORITY ] = "SCHEDULER_MAP_PRIORITY", + [ RTEMS_RECORD_SCHEDULER_NAME ] = "SCHEDULER_NAME", + [ RTEMS_RECORD_SCHEDULER_PIN ] = "SCHEDULER_PIN", + [ RTEMS_RECORD_SCHEDULER_RECONSIDER_HELP_REQUEST ] = "SCHEDULER_RECONSIDER_HELP_REQUEST", + [ RTEMS_RECORD_SCHEDULER_RELEASE_JOB ] = "SCHEDULER_RELEASE_JOB", + [ RTEMS_RECORD_SCHEDULER_REMOVE_PROCESSOR ] = "SCHEDULER_REMOVE_PROCESSOR", + [ RTEMS_RECORD_SCHEDULER_SCHEDULE ] = "SCHEDULER_SCHEDULE", + [ RTEMS_RECORD_SCHEDULER_SET_AFFINITY ] = "SCHEDULER_SET_AFFINITY", + [ RTEMS_RECORD_SCHEDULER_TICK ] = "SCHEDULER_TICK", + [ RTEMS_RECORD_SCHEDULER_UNBLOCK ] = "SCHEDULER_UNBLOCK", + [ RTEMS_RECORD_SCHEDULER_UNMAP_PRIORITY ] = "SCHEDULER_UNMAP_PRIORITY", + [ RTEMS_RECORD_SCHEDULER_UNPIN ] = "SCHEDULER_UNPIN", + [ RTEMS_RECORD_SCHEDULER_UPDATE_PRIORITY ] = "SCHEDULER_UPDATE_PRIORITY", + [ RTEMS_RECORD_SCHEDULER_WITHDRAW_NODE ] = "SCHEDULER_WITHDRAW_NODE", + [ RTEMS_RECORD_SCHEDULER_YIELD ] = "SCHEDULER_YIELD", [ RTEMS_RECORD_SELECT_ENTRY ] = "SELECT_ENTRY", [ RTEMS_RECORD_SELECT_EXIT ] = "SELECT_EXIT", [ RTEMS_RECORD_SEND_ENTRY ] = "SEND_ENTRY", @@ -231,8 +273,12 @@ static const char * const event_text[] = { [ RTEMS_RECORD_TCP_INPUT ] = "TCP_INPUT", [ RTEMS_RECORD_TCP_OUTPUT ] = "TCP_OUTPUT", [ RTEMS_RECORD_THREAD_BEGIN ] = "THREAD_BEGIN", + [ RTEMS_RECORD_THREAD_CONTINUE_ENTRY ] = "THREAD_CONTINUE_ENTRY", + [ RTEMS_RECORD_THREAD_CONTINUE_EXIT ] = "THREAD_CONTINUE_EXIT", [ RTEMS_RECORD_THREAD_CREATE ] = "THREAD_CREATE", [ RTEMS_RECORD_THREAD_DELETE ] = "THREAD_DELETE", + [ RTEMS_RECORD_THREAD_DISPATCH_DISABLE ] = "THREAD_DISPATCH_DISABLE", + [ RTEMS_RECORD_THREAD_DISPATCH_ENABLE ] = "THREAD_DISPATCH_ENABLE", [ RTEMS_RECORD_THREAD_EXIT ] = "THREAD_EXIT", [ RTEMS_RECORD_THREAD_EXITTED ] = "THREAD_EXITTED", [ RTEMS_RECORD_THREAD_ID ] = "THREAD_ID", @@ -241,9 +287,14 @@ static const char * const event_text[] = { [ RTEMS_RECORD_THREAD_PRIO_CURRENT_LOW ] = "THREAD_PRIO_CURRENT_LOW", [ RTEMS_RECORD_THREAD_PRIO_REAL_HIGH ] = "THREAD_PRIO_REAL_HIGH", [ RTEMS_RECORD_THREAD_PRIO_REAL_LOW ] = "THREAD_PRIO_REAL_LOW", + [ RTEMS_RECORD_THREAD_QUEUE_ADDRESS ] = "THREAD_QUEUE_ADDRESS", + [ RTEMS_RECORD_THREAD_QUEUE_DESTROY ] = "THREAD_QUEUE_DESTROY", [ RTEMS_RECORD_THREAD_QUEUE_ENQUEUE ] = "THREAD_QUEUE_ENQUEUE", [ RTEMS_RECORD_THREAD_QUEUE_ENQUEUE_STICKY ] = "THREAD_QUEUE_ENQUEUE_STICKY", [ RTEMS_RECORD_THREAD_QUEUE_EXTRACT ] = "THREAD_QUEUE_EXTRACT", + [ RTEMS_RECORD_THREAD_QUEUE_ID ] = "THREAD_QUEUE_ID", + [ RTEMS_RECORD_THREAD_QUEUE_INITIALIZE ] = "THREAD_QUEUE_INITIALIZE", + [ RTEMS_RECORD_THREAD_QUEUE_NAME ] = "THREAD_QUEUE_NAME", [ RTEMS_RECORD_THREAD_QUEUE_SURRENDER ] = "THREAD_QUEUE_SURRENDER", [ RTEMS_RECORD_THREAD_QUEUE_SURRENDER_STICKY ] = "THREAD_QUEUE_SURRENDER_STICKY", [ RTEMS_RECORD_THREAD_RESOURCE_OBTAIN ] = "THREAD_RESOURCE_OBTAIN", @@ -258,6 +309,10 @@ static const char * const event_text[] = { [ RTEMS_RECORD_THREAD_SWITCH_IN ] = "THREAD_SWITCH_IN", [ RTEMS_RECORD_THREAD_SWITCH_OUT ] = "THREAD_SWITCH_OUT", [ RTEMS_RECORD_THREAD_TERMINATE ] = "THREAD_TERMINATE", + [ RTEMS_RECORD_THREAD_TIMER_INSERT_MONOTONIC ] = "THREAD_TIMER_INSERT_MONOTONIC", + [ RTEMS_RECORD_THREAD_TIMER_INSERT_REALTIME ] = "THREAD_TIMER_INSERT_REALTIME", + [ RTEMS_RECORD_THREAD_TIMER_INSERT_TICKS ] = "THREAD_TIMER_INSERT_TICKS", + [ RTEMS_RECORD_THREAD_TIMER_REMOVE ] = "THREAD_TIMER_REMOVE", [ RTEMS_RECORD_UDP_INPUT ] = "UDP_INPUT", [ RTEMS_RECORD_UDP_OUTPUT ] = "UDP_OUTPUT", [ RTEMS_RECORD_UMA_ALLOC_PTR ] = "UMA_ALLOC_PTR", @@ -270,6 +325,14 @@ static const char * const event_text[] = { [ RTEMS_RECORD_UNMOUNT_EXIT ] = "UNMOUNT_EXIT", [ RTEMS_RECORD_UPTIME_HIGH ] = "UPTIME_HIGH", [ RTEMS_RECORD_UPTIME_LOW ] = "UPTIME_LOW", + [ RTEMS_RECORD_WATCHDOG_ADDRESS ] = "WATCHDOG_ADDRESS", + [ RTEMS_RECORD_WATCHDOG_CPU ] = "WATCHDOG_CPU", + [ RTEMS_RECORD_WATCHDOG_INITIALIZE ] = "WATCHDOG_INITIALIZE", + [ RTEMS_RECORD_WATCHDOG_INSERT ] = "WATCHDOG_INSERT", + [ RTEMS_RECORD_WATCHDOG_PREINITIALIZE ] = "WATCHDOG_PREINITIALIZE", + [ RTEMS_RECORD_WATCHDOG_REMOVE ] = "WATCHDOG_REMOVE", + [ RTEMS_RECORD_WATCHDOG_ROUTINE ] = "WATCHDOG_ROUTINE", + [ RTEMS_RECORD_WATCHDOG_STATE ] = "WATCHDOG_STATE", [ RTEMS_RECORD_WORKSPACE_ALLOC ] = "WORKSPACE_ALLOC", [ RTEMS_RECORD_WORKSPACE_FREE ] = "WORKSPACE_FREE", [ RTEMS_RECORD_WORKSPACE_SIZE ] = "WORKSPACE_SIZE", @@ -278,70 +341,6 @@ static const char * const event_text[] = { [ RTEMS_RECORD_WRITE_EXIT ] = "WRITE_EXIT", [ RTEMS_RECORD_WRITEV_ENTRY ] = "WRITEV_ENTRY", [ RTEMS_RECORD_WRITEV_EXIT ] = "WRITEV_EXIT", - [ RTEMS_RECORD_SYSTEM_238 ] = "SYSTEM_238", - [ RTEMS_RECORD_SYSTEM_239 ] = "SYSTEM_239", - [ RTEMS_RECORD_SYSTEM_240 ] = "SYSTEM_240", - [ RTEMS_RECORD_SYSTEM_241 ] = "SYSTEM_241", - [ RTEMS_RECORD_SYSTEM_242 ] = "SYSTEM_242", - [ RTEMS_RECORD_SYSTEM_243 ] = "SYSTEM_243", - [ RTEMS_RECORD_SYSTEM_244 ] = "SYSTEM_244", - [ RTEMS_RECORD_SYSTEM_245 ] = "SYSTEM_245", - [ RTEMS_RECORD_SYSTEM_246 ] = "SYSTEM_246", - [ RTEMS_RECORD_SYSTEM_247 ] = "SYSTEM_247", - [ RTEMS_RECORD_SYSTEM_248 ] = "SYSTEM_248", - [ RTEMS_RECORD_SYSTEM_249 ] = "SYSTEM_249", - [ RTEMS_RECORD_SYSTEM_250 ] = "SYSTEM_250", - [ RTEMS_RECORD_SYSTEM_251 ] = "SYSTEM_251", - [ RTEMS_RECORD_SYSTEM_252 ] = "SYSTEM_252", - [ RTEMS_RECORD_SYSTEM_253 ] = "SYSTEM_253", - [ RTEMS_RECORD_SYSTEM_254 ] = "SYSTEM_254", - [ RTEMS_RECORD_SYSTEM_255 ] = "SYSTEM_255", - [ RTEMS_RECORD_SYSTEM_256 ] = "SYSTEM_256", - [ RTEMS_RECORD_SYSTEM_257 ] = "SYSTEM_257", - [ RTEMS_RECORD_SYSTEM_258 ] = "SYSTEM_258", - [ RTEMS_RECORD_SYSTEM_259 ] = "SYSTEM_259", - [ RTEMS_RECORD_SYSTEM_260 ] = "SYSTEM_260", - [ RTEMS_RECORD_SYSTEM_261 ] = "SYSTEM_261", - [ RTEMS_RECORD_SYSTEM_262 ] = "SYSTEM_262", - [ RTEMS_RECORD_SYSTEM_263 ] = "SYSTEM_263", - [ RTEMS_RECORD_SYSTEM_264 ] = "SYSTEM_264", - [ RTEMS_RECORD_SYSTEM_265 ] = "SYSTEM_265", - [ RTEMS_RECORD_SYSTEM_266 ] = "SYSTEM_266", - [ RTEMS_RECORD_SYSTEM_267 ] = "SYSTEM_267", - [ RTEMS_RECORD_SYSTEM_268 ] = "SYSTEM_268", - [ RTEMS_RECORD_SYSTEM_269 ] = "SYSTEM_269", - [ RTEMS_RECORD_SYSTEM_270 ] = "SYSTEM_270", - [ RTEMS_RECORD_SYSTEM_271 ] = "SYSTEM_271", - [ RTEMS_RECORD_SYSTEM_272 ] = "SYSTEM_272", - [ RTEMS_RECORD_SYSTEM_273 ] = "SYSTEM_273", - [ RTEMS_RECORD_SYSTEM_274 ] = "SYSTEM_274", - [ RTEMS_RECORD_SYSTEM_275 ] = "SYSTEM_275", - [ RTEMS_RECORD_SYSTEM_276 ] = "SYSTEM_276", - [ RTEMS_RECORD_SYSTEM_277 ] = "SYSTEM_277", - [ RTEMS_RECORD_SYSTEM_278 ] = "SYSTEM_278", - [ RTEMS_RECORD_SYSTEM_279 ] = "SYSTEM_279", - [ RTEMS_RECORD_SYSTEM_280 ] = "SYSTEM_280", - [ RTEMS_RECORD_SYSTEM_281 ] = "SYSTEM_281", - [ RTEMS_RECORD_SYSTEM_282 ] = "SYSTEM_282", - [ RTEMS_RECORD_SYSTEM_283 ] = "SYSTEM_283", - [ RTEMS_RECORD_SYSTEM_284 ] = "SYSTEM_284", - [ RTEMS_RECORD_SYSTEM_285 ] = "SYSTEM_285", - [ RTEMS_RECORD_SYSTEM_286 ] = "SYSTEM_286", - [ RTEMS_RECORD_SYSTEM_287 ] = "SYSTEM_287", - [ RTEMS_RECORD_SYSTEM_288 ] = "SYSTEM_288", - [ RTEMS_RECORD_SYSTEM_289 ] = "SYSTEM_289", - [ RTEMS_RECORD_SYSTEM_290 ] = "SYSTEM_290", - [ RTEMS_RECORD_SYSTEM_291 ] = "SYSTEM_291", - [ RTEMS_RECORD_SYSTEM_292 ] = "SYSTEM_292", - [ RTEMS_RECORD_SYSTEM_293 ] = "SYSTEM_293", - [ RTEMS_RECORD_SYSTEM_294 ] = "SYSTEM_294", - [ RTEMS_RECORD_SYSTEM_295 ] = "SYSTEM_295", - [ RTEMS_RECORD_SYSTEM_296 ] = "SYSTEM_296", - [ RTEMS_RECORD_SYSTEM_297 ] = "SYSTEM_297", - [ RTEMS_RECORD_SYSTEM_298 ] = "SYSTEM_298", - [ RTEMS_RECORD_SYSTEM_299 ] = "SYSTEM_299", - [ RTEMS_RECORD_SYSTEM_300 ] = "SYSTEM_300", - [ RTEMS_RECORD_SYSTEM_301 ] = "SYSTEM_301", [ RTEMS_RECORD_SYSTEM_302 ] = "SYSTEM_302", [ RTEMS_RECORD_SYSTEM_303 ] = "SYSTEM_303", [ RTEMS_RECORD_SYSTEM_304 ] = "SYSTEM_304", @@ -551,6 +550,7 @@ static const char * const event_text[] = { [ RTEMS_RECORD_SYSTEM_508 ] = "SYSTEM_508", [ RTEMS_RECORD_SYSTEM_509 ] = "SYSTEM_509", [ RTEMS_RECORD_SYSTEM_510 ] = "SYSTEM_510", + [ RTEMS_RECORD_SYSTEM_511 ] = "SYSTEM_511", [ RTEMS_RECORD_USER_0 ] = "USER_0", [ RTEMS_RECORD_USER_1 ] = "USER_1", [ RTEMS_RECORD_USER_2 ] = "USER_2", diff --git a/cpukit/libtrace/record/record-util.c b/cpukit/libtrace/record/record-util.c new file mode 100644 index 0000000000..a7189b1716 --- /dev/null +++ b/cpukit/libtrace/record/record-util.c @@ -0,0 +1,704 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2018, 2019 embedded brains GmbH + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +void rtems_record_line( void ) +{ + rtems_record_produce( + RTEMS_RECORD_LINE, + (rtems_record_data) RTEMS_RETURN_ADDRESS() + ); +} + +void rtems_record_line_2( + rtems_record_event event, + rtems_record_data data +) +{ + rtems_record_produce_2( + RTEMS_RECORD_LINE, + (rtems_record_data) RTEMS_RETURN_ADDRESS(), + event, + data + ); +} + +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 +) +{ + rtems_record_item items[ 3 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = event_0; + items[ 1 ].data = data_0; + items[ 2 ].event = event_1; + items[ 2 ].data = data_1; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +void rtems_record_line_arg( rtems_record_data data ) +{ + rtems_record_produce_2( + RTEMS_RECORD_LINE, + (rtems_record_data) RTEMS_RETURN_ADDRESS(), + RTEMS_RECORD_ARG_0, + data + ); +} + +void rtems_record_line_arg_2( + rtems_record_data data_0, + rtems_record_data data_1 +) +{ + rtems_record_item items[ 3 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +void rtems_record_line_arg_3( + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2 +) +{ + rtems_record_item items[ 4 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 5 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 6 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + items[ 5 ].event = RTEMS_RECORD_ARG_4; + items[ 5 ].data = data_4; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 7 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + items[ 5 ].event = RTEMS_RECORD_ARG_4; + items[ 5 ].data = data_4; + items[ 6 ].event = RTEMS_RECORD_ARG_5; + items[ 6 ].data = data_5; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 8 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + items[ 5 ].event = RTEMS_RECORD_ARG_4; + items[ 5 ].data = data_4; + items[ 6 ].event = RTEMS_RECORD_ARG_5; + items[ 6 ].data = data_5; + items[ 7 ].event = RTEMS_RECORD_ARG_6; + items[ 7 ].data = data_6; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 9 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + items[ 5 ].event = RTEMS_RECORD_ARG_4; + items[ 5 ].data = data_4; + items[ 6 ].event = RTEMS_RECORD_ARG_5; + items[ 6 ].data = data_5; + items[ 7 ].event = RTEMS_RECORD_ARG_6; + items[ 7 ].data = data_6; + items[ 8 ].event = RTEMS_RECORD_ARG_7; + items[ 8 ].data = data_7; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 10 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + items[ 5 ].event = RTEMS_RECORD_ARG_4; + items[ 5 ].data = data_4; + items[ 6 ].event = RTEMS_RECORD_ARG_5; + items[ 6 ].data = data_5; + items[ 7 ].event = RTEMS_RECORD_ARG_6; + items[ 7 ].data = data_6; + items[ 8 ].event = RTEMS_RECORD_ARG_7; + items[ 8 ].data = data_7; + items[ 9 ].event = RTEMS_RECORD_ARG_8; + items[ 9 ].data = data_8; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 11 ]; + + items[ 0 ].event = RTEMS_RECORD_LINE; + items[ 0 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 1 ].event = RTEMS_RECORD_ARG_0; + items[ 1 ].data = data_0; + items[ 2 ].event = RTEMS_RECORD_ARG_1; + items[ 2 ].data = data_1; + items[ 3 ].event = RTEMS_RECORD_ARG_2; + items[ 3 ].data = data_2; + items[ 4 ].event = RTEMS_RECORD_ARG_3; + items[ 4 ].data = data_3; + items[ 5 ].event = RTEMS_RECORD_ARG_4; + items[ 5 ].data = data_4; + items[ 6 ].event = RTEMS_RECORD_ARG_5; + items[ 6 ].data = data_5; + items[ 7 ].event = RTEMS_RECORD_ARG_6; + items[ 7 ].data = data_6; + items[ 8 ].event = RTEMS_RECORD_ARG_7; + items[ 8 ].data = data_7; + items[ 9 ].event = RTEMS_RECORD_ARG_8; + items[ 9 ].data = data_8; + items[ 10 ].event = RTEMS_RECORD_ARG_9; + items[ 10 ].data = data_9; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +void _Record_Caller( void *return_address ) +{ + rtems_record_produce_2( + RTEMS_RECORD_CALLER, + (rtems_record_data) return_address, + RTEMS_RECORD_LINE, + (rtems_record_data) RTEMS_RETURN_ADDRESS() + ); +} + +void _Record_Caller_3( + void *return_address, + rtems_record_event event, + rtems_record_data data +) +{ + rtems_record_item items[ 3 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = event; + items[ 2 ].data = data; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 4 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = event_0; + items[ 2 ].data = data_0; + items[ 3 ].event = event_1; + items[ 3 ].data = data_1; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +void _Record_Caller_arg( void *return_address, rtems_record_data data ) +{ + rtems_record_item items[ 3 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +void _Record_Caller_arg_2( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1 +) +{ + rtems_record_item items[ 4 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +void _Record_Caller_arg_3( + void *return_address, + rtems_record_data data_0, + rtems_record_data data_1, + rtems_record_data data_2 +) +{ + rtems_record_item items[ 5 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 6 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 7 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + items[ 6 ].event = RTEMS_RECORD_ARG_4; + items[ 6 ].data = data_4; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 8 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + items[ 6 ].event = RTEMS_RECORD_ARG_4; + items[ 6 ].data = data_4; + items[ 7 ].event = RTEMS_RECORD_ARG_5; + items[ 7 ].data = data_5; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 9 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + items[ 6 ].event = RTEMS_RECORD_ARG_4; + items[ 6 ].data = data_4; + items[ 7 ].event = RTEMS_RECORD_ARG_5; + items[ 7 ].data = data_5; + items[ 8 ].event = RTEMS_RECORD_ARG_6; + items[ 8 ].data = data_6; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 10 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + items[ 6 ].event = RTEMS_RECORD_ARG_4; + items[ 6 ].data = data_4; + items[ 7 ].event = RTEMS_RECORD_ARG_5; + items[ 7 ].data = data_5; + items[ 8 ].event = RTEMS_RECORD_ARG_6; + items[ 8 ].data = data_6; + items[ 9 ].event = RTEMS_RECORD_ARG_7; + items[ 9 ].data = data_7; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 11 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + items[ 6 ].event = RTEMS_RECORD_ARG_4; + items[ 6 ].data = data_4; + items[ 7 ].event = RTEMS_RECORD_ARG_5; + items[ 7 ].data = data_5; + items[ 8 ].event = RTEMS_RECORD_ARG_6; + items[ 8 ].data = data_6; + items[ 9 ].event = RTEMS_RECORD_ARG_7; + items[ 9 ].data = data_7; + items[ 10 ].event = RTEMS_RECORD_ARG_8; + items[ 10 ].data = data_8; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +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 +) +{ + rtems_record_item items[ 12 ]; + + items[ 0 ].event = RTEMS_RECORD_CALLER; + items[ 0 ].data = (rtems_record_data) return_address; + items[ 1 ].event = RTEMS_RECORD_LINE; + items[ 1 ].data = (rtems_record_data) RTEMS_RETURN_ADDRESS(); + items[ 2 ].event = RTEMS_RECORD_ARG_0; + items[ 2 ].data = data_0; + items[ 3 ].event = RTEMS_RECORD_ARG_1; + items[ 3 ].data = data_1; + items[ 4 ].event = RTEMS_RECORD_ARG_2; + items[ 4 ].data = data_2; + items[ 5 ].event = RTEMS_RECORD_ARG_3; + items[ 5 ].data = data_3; + items[ 6 ].event = RTEMS_RECORD_ARG_4; + items[ 6 ].data = data_4; + items[ 7 ].event = RTEMS_RECORD_ARG_5; + items[ 7 ].data = data_5; + items[ 8 ].event = RTEMS_RECORD_ARG_6; + items[ 8 ].data = data_6; + items[ 9 ].event = RTEMS_RECORD_ARG_7; + items[ 9 ].data = data_7; + items[ 10 ].event = RTEMS_RECORD_ARG_8; + items[ 10 ].data = data_8; + items[ 11 ].event = RTEMS_RECORD_ARG_9; + items[ 11 ].data = data_9; + rtems_record_produce_n( items, RTEMS_ARRAY_SIZE( items ) ); +} + +uint32_t rtems_record_interrupt_disable( void ) +{ + uint32_t level; + rtems_record_context context; + + _CPU_ISR_Disable( level ); + rtems_record_prepare_critical( &context, _Per_CPU_Get() ); + rtems_record_add( + &context, + RTEMS_RECORD_ISR_DISABLE, + (rtems_record_data) RTEMS_RETURN_ADDRESS() + ); + rtems_record_commit_critical( &context ); + + return level; +} + +void rtems_record_interrupt_enable( uint32_t level ) +{ + rtems_record_context context; + + rtems_record_prepare_critical( &context, _Per_CPU_Get() ); + rtems_record_add( + &context, + RTEMS_RECORD_ISR_ENABLE, + (rtems_record_data) RTEMS_RETURN_ADDRESS() + ); + rtems_record_commit_critical( &context ); + _CPU_ISR_Enable( level ); +} diff --git a/testsuites/libtests/record02/init.c b/testsuites/libtests/record02/init.c index 5979b5b445..cc08dfcb6f 100644 --- a/testsuites/libtests/record02/init.c +++ b/testsuites/libtests/record02/init.c @@ -100,6 +100,7 @@ static void Init(rtems_task_argument arg) Record_Stream_header header; rtems_record_client_status cs; int i; + uint32_t level; TEST_BEGIN(); ctx = &test_instance; @@ -108,6 +109,35 @@ static void Init(rtems_task_argument arg) rtems_task_wake_after(1); } + rtems_record_line(); + rtems_record_line_2(RTEMS_RECORD_USER_0, 0); + rtems_record_line_3(RTEMS_RECORD_USER_1, 1, RTEMS_RECORD_USER_2, 2); + rtems_record_line_arg(0); + rtems_record_line_arg_2(0, 1); + rtems_record_line_arg_3(0, 1, 2); + rtems_record_line_arg_4(0, 1, 2, 3); + rtems_record_line_arg_5(0, 1, 2, 3, 4); + rtems_record_line_arg_6(0, 1, 2, 3, 4, 5); + rtems_record_line_arg_7(0, 1, 2, 3, 4, 5, 6); + rtems_record_line_arg_8(0, 1, 2, 3, 4, 5, 6, 7); + rtems_record_line_arg_9(0, 1, 2, 3, 4, 5, 6, 7, 8); + rtems_record_line_arg_10(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); + rtems_record_caller(); + rtems_record_caller_3(RTEMS_RECORD_USER_0, 0); + rtems_record_caller_4(RTEMS_RECORD_USER_1, 1, RTEMS_RECORD_USER_2, 2); + rtems_record_caller_arg(0); + rtems_record_caller_arg_2(0, 1); + rtems_record_caller_arg_3(0, 1, 2); + rtems_record_caller_arg_4(0, 1, 2, 3); + rtems_record_caller_arg_5(0, 1, 2, 3, 4); + rtems_record_caller_arg_6(0, 1, 2, 3, 4, 5); + rtems_record_caller_arg_7(0, 1, 2, 3, 4, 5, 6); + rtems_record_caller_arg_8(0, 1, 2, 3, 4, 5, 6, 7); + rtems_record_caller_arg_9(0, 1, 2, 3, 4, 5, 6, 7, 8); + rtems_record_caller_arg_10(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); + level = rtems_record_interrupt_disable(); + rtems_record_interrupt_enable(level); + rtems_record_client_init(&ctx->client, client_handler, NULL); _Record_Stream_header_initialize(&header); cs = rtems_record_client_run(&ctx->client, &header, sizeof(header)); @@ -129,7 +159,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_RECORD_PER_PROCESSOR_ITEMS 128 +#define CONFIGURE_RECORD_PER_PROCESSOR_ITEMS 256 #define CONFIGURE_RECORD_EXTENSIONS_ENABLED diff --git a/testsuites/libtests/record02/record02.scn b/testsuites/libtests/record02/record02.scn index 4535cbbdca..aa886df9c6 100644 --- a/testsuites/libtests/record02/record02.scn +++ b/testsuites/libtests/record02/record02.scn @@ -1,84 +1,241 @@ *** BEGIN OF TEST RECORD 2 *** -*** TEST VERSION: 5.0.0.b2c060a507712f6043d7c7f0cf7b50661f25d8c3 +*** TEST VERSION: 5.0.0.807ea677b298ed13796d27c493c726c0bfe6e036 *** TEST STATE: EXPECTED-PASS *** TEST BUILD: RTEMS_NETWORKING RTEMS_POSIX_API -*** TEST TOOLS: 7.4.1 20190514 (RTEMS 5, RSB 639eed3c77c830a2ac9f36baca21919f8b7bf1be, Newlib 5c2a3661c) -*:0:VERSION:5 +*** TEST TOOLS: 7.4.1 20190514 (RTEMS 5, RSB e047d64adf806d37393eb12d02a7ce26633d2eba, Newlib 5c2a3661c) +*:0:VERSION:6 *:0:PROCESSOR_MAXIMUM:0 -*:0:PER_CPU_COUNT:80 +*:0:PER_CPU_COUNT:100 *:0:FREQUENCY:f4240 *:0:PROCESSOR:0 *:0:PER_CPU_TAIL:0 -*:0:PER_CPU_HEAD:46 -*:0:THREAD_CREATE:9010001 -*:0:THREAD_NAME:49494949 -*:0:THREAD_START:9010001 -*:0:UPTIME_LOW:852b4 +*:0:PER_CPU_HEAD:e3 +0.994328000:0:THREAD_CREATE:9010001 +0.994328000:0:THREAD_NAME:49494949 +0.994514999:0:THREAD_START:9010001 +*:0:UPTIME_LOW:9b307 *:0:UPTIME_HIGH:1 -1.000436999:0:THREAD_CREATE:a010001 -1.000436999:0:THREAD_NAME:55555555 -1.000627999:0:THREAD_START:a010001 -1.001891999:0:THREAD_BEGIN:a010001 -1.003466999:0:THREAD_SWITCH_OUT:a010001 -1.003466999:0:THREAD_STACK_CURRENT:d78 -1.003466999:0:THREAD_SWITCH_IN:9010001 -1.003533999:0:THREAD_BEGIN:9010001 -1.005078999:0:THREAD_SWITCH_OUT:9010001 -1.005078999:0:THREAD_STACK_CURRENT:d68 -1.005078999:0:THREAD_SWITCH_IN:a010001 -1.005218999:0:THREAD_SWITCH_OUT:a010001 -1.005218999:0:THREAD_STACK_CURRENT:d78 -1.005218999:0:THREAD_SWITCH_IN:9010001 -1.015067999:0:THREAD_SWITCH_OUT:9010001 -1.015067999:0:THREAD_STACK_CURRENT:d68 -1.015067999:0:THREAD_SWITCH_IN:a010001 -1.015207999:0:THREAD_SWITCH_OUT:a010001 -1.015207999:0:THREAD_STACK_CURRENT:d78 -1.015207999:0:THREAD_SWITCH_IN:9010001 -1.025067999:0:THREAD_SWITCH_OUT:9010001 -1.025067999:0:THREAD_STACK_CURRENT:d68 -1.025067999:0:THREAD_SWITCH_IN:a010001 -1.025207999:0:THREAD_SWITCH_OUT:a010001 -1.025207999:0:THREAD_STACK_CURRENT:d78 -1.025207999:0:THREAD_SWITCH_IN:9010001 -1.035067999:0:THREAD_SWITCH_OUT:9010001 -1.035067999:0:THREAD_STACK_CURRENT:d68 -1.035067999:0:THREAD_SWITCH_IN:a010001 -1.035207999:0:THREAD_SWITCH_OUT:a010001 -1.035207999:0:THREAD_STACK_CURRENT:d78 -1.035207999:0:THREAD_SWITCH_IN:9010001 -1.045067999:0:THREAD_SWITCH_OUT:9010001 -1.045067999:0:THREAD_STACK_CURRENT:d68 -1.045067999:0:THREAD_SWITCH_IN:a010001 -1.045207999:0:THREAD_SWITCH_OUT:a010001 -1.045207999:0:THREAD_STACK_CURRENT:d78 -1.045207999:0:THREAD_SWITCH_IN:9010001 -1.055067999:0:THREAD_SWITCH_OUT:9010001 -1.055067999:0:THREAD_STACK_CURRENT:d68 -1.055067999:0:THREAD_SWITCH_IN:a010001 -1.055207999:0:THREAD_SWITCH_OUT:a010001 -1.055207999:0:THREAD_STACK_CURRENT:d78 -1.055207999:0:THREAD_SWITCH_IN:9010001 -1.065067999:0:THREAD_SWITCH_OUT:9010001 -1.065067999:0:THREAD_STACK_CURRENT:d68 -1.065067999:0:THREAD_SWITCH_IN:a010001 -1.065207999:0:THREAD_SWITCH_OUT:a010001 -1.065207999:0:THREAD_STACK_CURRENT:d78 -1.065207999:0:THREAD_SWITCH_IN:9010001 -1.075067999:0:THREAD_SWITCH_OUT:9010001 -1.075067999:0:THREAD_STACK_CURRENT:d68 -1.075067999:0:THREAD_SWITCH_IN:a010001 -1.075207999:0:THREAD_SWITCH_OUT:a010001 -1.075207999:0:THREAD_STACK_CURRENT:d78 -1.075207999:0:THREAD_SWITCH_IN:9010001 -1.085067999:0:THREAD_SWITCH_OUT:9010001 -1.085067999:0:THREAD_STACK_CURRENT:d68 -1.085067999:0:THREAD_SWITCH_IN:a010001 -1.085207999:0:THREAD_SWITCH_OUT:a010001 -1.085207999:0:THREAD_STACK_CURRENT:d78 -1.085207999:0:THREAD_SWITCH_IN:9010001 -1.095067999:0:THREAD_SWITCH_OUT:9010001 -1.095067999:0:THREAD_STACK_CURRENT:d68 -1.095067999:0:THREAD_SWITCH_IN:a010001 +1.000563999:0:THREAD_CREATE:a010001 +1.000563999:0:THREAD_NAME:55555555 +1.000876999:0:THREAD_START:a010001 +1.003730999:0:THREAD_BEGIN:a010001 +1.005493999:0:THREAD_SWITCH_OUT:a010001 +1.005493999:0:THREAD_STACK_CURRENT:d38 +1.005493999:0:THREAD_SWITCH_IN:9010001 +1.005597999:0:THREAD_BEGIN:9010001 +1.013811999:0:THREAD_SWITCH_OUT:9010001 +1.013811999:0:THREAD_STACK_CURRENT:d40 +1.013811999:0:THREAD_SWITCH_IN:a010001 +1.014068999:0:THREAD_SWITCH_OUT:a010001 +1.014068999:0:THREAD_STACK_CURRENT:d38 +1.014068999:0:THREAD_SWITCH_IN:9010001 +1.023800999:0:THREAD_SWITCH_OUT:9010001 +1.023800999:0:THREAD_STACK_CURRENT:d40 +1.023800999:0:THREAD_SWITCH_IN:a010001 +1.024057999:0:THREAD_SWITCH_OUT:a010001 +1.024057999:0:THREAD_STACK_CURRENT:d38 +1.024057999:0:THREAD_SWITCH_IN:9010001 +1.033800999:0:THREAD_SWITCH_OUT:9010001 +1.033800999:0:THREAD_STACK_CURRENT:d40 +1.033800999:0:THREAD_SWITCH_IN:a010001 +1.034057999:0:THREAD_SWITCH_OUT:a010001 +1.034057999:0:THREAD_STACK_CURRENT:d38 +1.034057999:0:THREAD_SWITCH_IN:9010001 +1.043800999:0:THREAD_SWITCH_OUT:9010001 +1.043800999:0:THREAD_STACK_CURRENT:d40 +1.043800999:0:THREAD_SWITCH_IN:a010001 +1.044057999:0:THREAD_SWITCH_OUT:a010001 +1.044057999:0:THREAD_STACK_CURRENT:d38 +1.044057999:0:THREAD_SWITCH_IN:9010001 +1.053800999:0:THREAD_SWITCH_OUT:9010001 +1.053800999:0:THREAD_STACK_CURRENT:d40 +1.053800999:0:THREAD_SWITCH_IN:a010001 +1.054057999:0:THREAD_SWITCH_OUT:a010001 +1.054057999:0:THREAD_STACK_CURRENT:d38 +1.054057999:0:THREAD_SWITCH_IN:9010001 +1.063800999:0:THREAD_SWITCH_OUT:9010001 +1.063800999:0:THREAD_STACK_CURRENT:d40 +1.063800999:0:THREAD_SWITCH_IN:a010001 +1.064057999:0:THREAD_SWITCH_OUT:a010001 +1.064057999:0:THREAD_STACK_CURRENT:d38 +1.064057999:0:THREAD_SWITCH_IN:9010001 +1.073800999:0:THREAD_SWITCH_OUT:9010001 +1.073800999:0:THREAD_STACK_CURRENT:d40 +1.073800999:0:THREAD_SWITCH_IN:a010001 +1.074057999:0:THREAD_SWITCH_OUT:a010001 +1.074057999:0:THREAD_STACK_CURRENT:d38 +1.074057999:0:THREAD_SWITCH_IN:9010001 +1.083800999:0:THREAD_SWITCH_OUT:9010001 +1.083800999:0:THREAD_STACK_CURRENT:d40 +1.083800999:0:THREAD_SWITCH_IN:a010001 +1.084057999:0:THREAD_SWITCH_OUT:a010001 +1.084057999:0:THREAD_STACK_CURRENT:d38 +1.084057999:0:THREAD_SWITCH_IN:9010001 +1.093800999:0:THREAD_SWITCH_OUT:9010001 +1.093800999:0:THREAD_STACK_CURRENT:d40 +1.093800999:0:THREAD_SWITCH_IN:a010001 +1.094057999:0:THREAD_SWITCH_OUT:a010001 +1.094057999:0:THREAD_STACK_CURRENT:d38 +1.094057999:0:THREAD_SWITCH_IN:9010001 +1.103800999:0:THREAD_SWITCH_OUT:9010001 +1.103800999:0:THREAD_STACK_CURRENT:d40 +1.103800999:0:THREAD_SWITCH_IN:a010001 +1.103883999:0:LINE:2001290 +1.103897999:0:LINE:200129c +1.103897999:0:USER_0:0 +1.103914999:0:LINE:20012b0 +1.103914999:0:USER_1:1 +1.103914999:0:USER_2:2 +1.103940999:0:LINE:20012b8 +1.103940999:0:ARG_0:0 +1.103958999:0:LINE:20012c4 +1.103958999:0:ARG_0:0 +1.103958999:0:ARG_1:1 +1.103987999:0:LINE:20012d4 +1.103987999:0:ARG_0:0 +1.103987999:0:ARG_1:1 +1.103987999:0:ARG_2:2 +1.104021999:0:LINE:20012e8 +1.104021999:0:ARG_0:0 +1.104021999:0:ARG_1:1 +1.104021999:0:ARG_2:2 +1.104021999:0:ARG_3:3 +1.104060999:0:LINE:2001300 +1.104060999:0:ARG_0:0 +1.104060999:0:ARG_1:1 +1.104060999:0:ARG_2:2 +1.104060999:0:ARG_3:3 +1.104060999:0:ARG_4:4 +1.104104999:0:LINE:200131c +1.104104999:0:ARG_0:0 +1.104104999:0:ARG_1:1 +1.104104999:0:ARG_2:2 +1.104104999:0:ARG_3:3 +1.104104999:0:ARG_4:4 +1.104104999:0:ARG_5:5 +1.104153999:0:LINE:200133c +1.104153999:0:ARG_0:0 +1.104153999:0:ARG_1:1 +1.104153999:0:ARG_2:2 +1.104153999:0:ARG_3:3 +1.104153999:0:ARG_4:4 +1.104153999:0:ARG_5:5 +1.104153999:0:ARG_6:6 +1.104208999:0:LINE:2001364 +1.104208999:0:ARG_0:0 +1.104208999:0:ARG_1:1 +1.104208999:0:ARG_2:2 +1.104208999:0:ARG_3:3 +1.104208999:0:ARG_4:4 +1.104208999:0:ARG_5:5 +1.104208999:0:ARG_6:6 +1.104208999:0:ARG_7:7 +1.104269999:0:LINE:2001390 +1.104269999:0:ARG_0:0 +1.104269999:0:ARG_1:1 +1.104269999:0:ARG_2:2 +1.104269999:0:ARG_3:3 +1.104269999:0:ARG_4:4 +1.104269999:0:ARG_5:5 +1.104269999:0:ARG_6:6 +1.104269999:0:ARG_7:7 +1.104269999:0:ARG_8:8 +1.104335999:0:LINE:20013c0 +1.104335999:0:ARG_0:0 +1.104335999:0:ARG_1:1 +1.104335999:0:ARG_2:2 +1.104335999:0:ARG_3:3 +1.104335999:0:ARG_4:4 +1.104335999:0:ARG_5:5 +1.104335999:0:ARG_6:6 +1.104335999:0:ARG_7:7 +1.104335999:0:ARG_8:8 +1.104335999:0:ARG_9:9 +1.104394999:0:CALLER:200cc20 +1.104394999:0:LINE:20013c8 +1.104412999:0:CALLER:200cc20 +1.104412999:0:LINE:20013d8 +1.104412999:0:USER_0:0 +1.104441999:0:CALLER:200cc20 +1.104441999:0:LINE:20013f0 +1.104441999:0:USER_1:1 +1.104441999:0:USER_2:2 +1.104473999:0:CALLER:200cc20 +1.104473999:0:LINE:20013fc +1.104473999:0:ARG_0:0 +1.104502999:0:CALLER:200cc20 +1.104502999:0:LINE:200140c +1.104502999:0:ARG_0:0 +1.104502999:0:ARG_1:1 +1.104537999:0:CALLER:200cc20 +1.104537999:0:LINE:2001420 +1.104537999:0:ARG_0:0 +1.104537999:0:ARG_1:1 +1.104537999:0:ARG_2:2 +1.104576999:0:CALLER:200cc20 +1.104576999:0:LINE:2001438 +1.104576999:0:ARG_0:0 +1.104576999:0:ARG_1:1 +1.104576999:0:ARG_2:2 +1.104576999:0:ARG_3:3 +1.104620999:0:CALLER:200cc20 +1.104620999:0:LINE:2001454 +1.104620999:0:ARG_0:0 +1.104620999:0:ARG_1:1 +1.104620999:0:ARG_2:2 +1.104620999:0:ARG_3:3 +1.104620999:0:ARG_4:4 +1.104669999:0:CALLER:200cc20 +1.104669999:0:LINE:2001478 +1.104669999:0:ARG_0:0 +1.104669999:0:ARG_1:1 +1.104669999:0:ARG_2:2 +1.104669999:0:ARG_3:3 +1.104669999:0:ARG_4:4 +1.104669999:0:ARG_5:5 +1.104724999:0:CALLER:200cc20 +1.104724999:0:LINE:200149c +1.104724999:0:ARG_0:0 +1.104724999:0:ARG_1:1 +1.104724999:0:ARG_2:2 +1.104724999:0:ARG_3:3 +1.104724999:0:ARG_4:4 +1.104724999:0:ARG_5:5 +1.104724999:0:ARG_6:6 +1.104785999:0:CALLER:200cc20 +1.104785999:0:LINE:20014c4 +1.104785999:0:ARG_0:0 +1.104785999:0:ARG_1:1 +1.104785999:0:ARG_2:2 +1.104785999:0:ARG_3:3 +1.104785999:0:ARG_4:4 +1.104785999:0:ARG_5:5 +1.104785999:0:ARG_6:6 +1.104785999:0:ARG_7:7 +1.104850999:0:CALLER:200cc20 +1.104850999:0:LINE:20014f0 +1.104850999:0:ARG_0:0 +1.104850999:0:ARG_1:1 +1.104850999:0:ARG_2:2 +1.104850999:0:ARG_3:3 +1.104850999:0:ARG_4:4 +1.104850999:0:ARG_5:5 +1.104850999:0:ARG_6:6 +1.104850999:0:ARG_7:7 +1.104850999:0:ARG_8:8 +1.104921999:0:CALLER:200cc20 +1.104921999:0:LINE:2001520 +1.104921999:0:ARG_0:0 +1.104921999:0:ARG_1:1 +1.104921999:0:ARG_2:2 +1.104921999:0:ARG_3:3 +1.104921999:0:ARG_4:4 +1.104921999:0:ARG_5:5 +1.104921999:0:ARG_6:6 +1.104921999:0:ARG_7:7 +1.104921999:0:ARG_8:8 +1.104921999:0:ARG_9:9 +1.104986999:0:ISR_DISABLE:2001528 +1.104996999:0:ISR_ENABLE:2001530 *** END OF TEST RECORD 2 *** -- cgit v1.2.3