forked from Imagelibrary/rtems
capture: Fix capture engine to handle new extensions.
This commit is contained in:
@@ -51,11 +51,41 @@
|
|||||||
RTEMS_CAPTURE_DELETED_BY_EVENT | \
|
RTEMS_CAPTURE_DELETED_BY_EVENT | \
|
||||||
RTEMS_CAPTURE_DELETED_EVENT | \
|
RTEMS_CAPTURE_DELETED_EVENT | \
|
||||||
RTEMS_CAPTURE_BEGIN_EVENT | \
|
RTEMS_CAPTURE_BEGIN_EVENT | \
|
||||||
RTEMS_CAPTURE_EXITTED_EVENT)
|
RTEMS_CAPTURE_EXITTED_EVENT | \
|
||||||
|
RTEMS_CAPTURE_TERMINATED_EVENT)
|
||||||
#else
|
#else
|
||||||
#define RTEMS_CAPTURE_RECORD_EVENTS (0)
|
#define RTEMS_CAPTURE_RECORD_EVENTS (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool
|
||||||
|
rtems_capture_create_task (rtems_tcb* current_task,
|
||||||
|
rtems_tcb* new_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_start_task (rtems_tcb* current_task,
|
||||||
|
rtems_tcb* started_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_restart_task (rtems_tcb* current_task,
|
||||||
|
rtems_tcb* restarted_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_delete_task (rtems_tcb* current_task,
|
||||||
|
rtems_tcb* deleted_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_switch_task (rtems_tcb* current_task,
|
||||||
|
rtems_tcb* heir_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_begin_task (rtems_tcb* begin_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_exitted_task (rtems_tcb* exitted_task);
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtems_capture_terminated_task (rtems_tcb* terminated_task);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global capture flags.
|
* Global capture flags.
|
||||||
*/
|
*/
|
||||||
@@ -88,6 +118,18 @@ static rtems_id capture_reader;
|
|||||||
static rtems_interrupt_lock capture_lock =
|
static rtems_interrupt_lock capture_lock =
|
||||||
RTEMS_INTERRUPT_LOCK_INITIALIZER("capture");
|
RTEMS_INTERRUPT_LOCK_INITIALIZER("capture");
|
||||||
|
|
||||||
|
static const rtems_extensions_table capture_extensions = {
|
||||||
|
.thread_create = rtems_capture_create_task,
|
||||||
|
.thread_start = rtems_capture_start_task,
|
||||||
|
.thread_restart = rtems_capture_restart_task,
|
||||||
|
.thread_delete = rtems_capture_delete_task,
|
||||||
|
.thread_switch = rtems_capture_switch_task,
|
||||||
|
.thread_begin = rtems_capture_begin_task,
|
||||||
|
.thread_exitted = rtems_capture_exitted_task,
|
||||||
|
.fatal = NULL,
|
||||||
|
.thread_terminate = rtems_capture_terminated_task
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RTEMS Event text.
|
* RTEMS Event text.
|
||||||
*/
|
*/
|
||||||
@@ -101,6 +143,7 @@ static const char* capture_event_text[] =
|
|||||||
"RESTARTED",
|
"RESTARTED",
|
||||||
"DELETED_BY",
|
"DELETED_BY",
|
||||||
"DELETED",
|
"DELETED",
|
||||||
|
"TERMINATED",
|
||||||
"BEGIN",
|
"BEGIN",
|
||||||
"EXITTED",
|
"EXITTED",
|
||||||
"SWITCHED_OUT",
|
"SWITCHED_OUT",
|
||||||
@@ -787,21 +830,28 @@ rtems_capture_exitted_task (rtems_tcb* exitted_task)
|
|||||||
static void
|
static void
|
||||||
rtems_capture_terminated_task (rtems_tcb* terminated_task)
|
rtems_capture_terminated_task (rtems_tcb* terminated_task)
|
||||||
{
|
{
|
||||||
rtems_capture_delete_task (terminated_task, terminated_task);
|
/*
|
||||||
|
* Get the capture task control block so we can trace this
|
||||||
|
* event.
|
||||||
|
*/
|
||||||
|
rtems_capture_task_t* tt;
|
||||||
|
|
||||||
|
tt = terminated_task->extensions[capture_extension_index];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The task pointers may not be known as the task may have
|
||||||
|
* been created before the capture engine was open. Add them.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (tt == NULL)
|
||||||
|
tt = rtems_capture_create_capture_task (terminated_task);
|
||||||
|
|
||||||
|
if (rtems_capture_trigger (NULL, tt, RTEMS_CAPTURE_TERMINATED))
|
||||||
|
rtems_capture_record (tt, RTEMS_CAPTURE_TERMINATED_EVENT);
|
||||||
|
|
||||||
|
rtems_capture_task_stack_usage (tt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* This function is called when a fatal error occurs.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
rtems_capture_fatal(
|
|
||||||
Internal_errors_Source source,
|
|
||||||
bool is_internal,
|
|
||||||
Internal_errors_t code
|
|
||||||
)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function is called when a context is switched.
|
* This function is called when a context is switched.
|
||||||
*/
|
*/
|
||||||
@@ -887,7 +937,6 @@ rtems_capture_switch_task (rtems_tcb* current_task,
|
|||||||
rtems_status_code
|
rtems_status_code
|
||||||
rtems_capture_open (uint32_t size, rtems_capture_timestamp timestamp __attribute__((unused)))
|
rtems_capture_open (uint32_t size, rtems_capture_timestamp timestamp __attribute__((unused)))
|
||||||
{
|
{
|
||||||
rtems_extensions_table capture_extensions;
|
|
||||||
rtems_name name;
|
rtems_name name;
|
||||||
rtems_status_code sc;
|
rtems_status_code sc;
|
||||||
|
|
||||||
@@ -912,19 +961,6 @@ rtems_capture_open (uint32_t size, rtems_capture_timestamp timestamp __attribu
|
|||||||
capture_ceiling = 0;
|
capture_ceiling = 0;
|
||||||
capture_floor = 255;
|
capture_floor = 255;
|
||||||
|
|
||||||
/*
|
|
||||||
* Create the extension table. This is copied so we
|
|
||||||
* can create it as a local.
|
|
||||||
*/
|
|
||||||
capture_extensions.thread_create = rtems_capture_create_task;
|
|
||||||
capture_extensions.thread_start = rtems_capture_start_task;
|
|
||||||
capture_extensions.thread_restart = rtems_capture_restart_task;
|
|
||||||
capture_extensions.thread_delete = rtems_capture_delete_task;
|
|
||||||
capture_extensions.thread_switch = rtems_capture_switch_task;
|
|
||||||
capture_extensions.thread_begin = rtems_capture_begin_task;
|
|
||||||
capture_extensions.thread_exitted = rtems_capture_exitted_task;
|
|
||||||
capture_extensions.fatal = NULL;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register the user extension handlers for the CAPture Engine.
|
* Register the user extension handlers for the CAPture Engine.
|
||||||
*/
|
*/
|
||||||
@@ -1341,6 +1377,8 @@ rtems_capture_map_trigger (rtems_capture_trigger_t trigger)
|
|||||||
return RTEMS_CAPTURE_BEGIN;
|
return RTEMS_CAPTURE_BEGIN;
|
||||||
case rtems_capture_exitted:
|
case rtems_capture_exitted:
|
||||||
return RTEMS_CAPTURE_EXITTED;
|
return RTEMS_CAPTURE_EXITTED;
|
||||||
|
case rtems_capture_terminated:
|
||||||
|
return RTEMS_CAPTURE_TERMINATED;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ typedef struct rtems_capture_control_s
|
|||||||
#define RTEMS_CAPTURE_DELETE (1 << 4)
|
#define RTEMS_CAPTURE_DELETE (1 << 4)
|
||||||
#define RTEMS_CAPTURE_BEGIN (1 << 5)
|
#define RTEMS_CAPTURE_BEGIN (1 << 5)
|
||||||
#define RTEMS_CAPTURE_EXITTED (1 << 6)
|
#define RTEMS_CAPTURE_EXITTED (1 << 6)
|
||||||
|
#define RTEMS_CAPTURE_TERMINATED (1 << 7)
|
||||||
|
|
||||||
#define RTEMS_CAPTURE_FROM_TRIGS (RTEMS_CAPTURE_SWITCH | \
|
#define RTEMS_CAPTURE_FROM_TRIGS (RTEMS_CAPTURE_SWITCH | \
|
||||||
RTEMS_CAPTURE_CREATE | \
|
RTEMS_CAPTURE_CREATE | \
|
||||||
@@ -208,12 +209,13 @@ typedef struct rtems_capture_record_s
|
|||||||
#define RTEMS_CAPTURE_RESTARTED_EVENT UINT32_C (0x00200000)
|
#define RTEMS_CAPTURE_RESTARTED_EVENT UINT32_C (0x00200000)
|
||||||
#define RTEMS_CAPTURE_DELETED_BY_EVENT UINT32_C (0x00400000)
|
#define RTEMS_CAPTURE_DELETED_BY_EVENT UINT32_C (0x00400000)
|
||||||
#define RTEMS_CAPTURE_DELETED_EVENT UINT32_C (0x00800000)
|
#define RTEMS_CAPTURE_DELETED_EVENT UINT32_C (0x00800000)
|
||||||
#define RTEMS_CAPTURE_BEGIN_EVENT UINT32_C (0x01000000)
|
#define RTEMS_CAPTURE_TERMINATED_EVENT UINT32_C (0x01000000)
|
||||||
#define RTEMS_CAPTURE_EXITTED_EVENT UINT32_C (0x02000000)
|
#define RTEMS_CAPTURE_BEGIN_EVENT UINT32_C (0x02000000)
|
||||||
#define RTEMS_CAPTURE_SWITCHED_OUT_EVENT UINT32_C (0x04000000)
|
#define RTEMS_CAPTURE_EXITTED_EVENT UINT32_C (0x04000000)
|
||||||
#define RTEMS_CAPTURE_SWITCHED_IN_EVENT UINT32_C (0x08000000)
|
#define RTEMS_CAPTURE_SWITCHED_OUT_EVENT UINT32_C (0x08000000)
|
||||||
#define RTEMS_CAPTURE_TIMESTAMP UINT32_C (0x10000000)
|
#define RTEMS_CAPTURE_SWITCHED_IN_EVENT UINT32_C (0x10000000)
|
||||||
#define RTEMS_CAPTURE_EVENT_END (28)
|
#define RTEMS_CAPTURE_TIMESTAMP UINT32_C (0x20000000)
|
||||||
|
#define RTEMS_CAPTURE_EVENT_END (29)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Capture trigger modes
|
* @brief Capture trigger modes
|
||||||
@@ -240,7 +242,8 @@ typedef enum rtems_capture_trigger_e
|
|||||||
rtems_capture_restart,
|
rtems_capture_restart,
|
||||||
rtems_capture_delete,
|
rtems_capture_delete,
|
||||||
rtems_capture_begin,
|
rtems_capture_begin,
|
||||||
rtems_capture_exitted
|
rtems_capture_exitted,
|
||||||
|
rtems_capture_terminated
|
||||||
} rtems_capture_trigger_t;
|
} rtems_capture_trigger_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user