The terminate method was added to rtems_extensions_table. This resulted in NULL or random addresses being called at task termination. --- cpukit/libmisc/capture/capture.c | 37 ++++++++++++++++++++++++++++--------- cpukit/libmisc/capture/capture.h | 3 ++- 2 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/cpukit/libmisc/capture/capture.c b/cpukit/libmisc/capture/capture.c index da9d785..cc47a51 100644 --- a/cpukit/libmisc/capture/capture.c +++ b/cpukit/libmisc/capture/capture.c @@ -883,6 +883,21 @@ rtems_capture_exitted_task (rtems_tcb* exitted_task) rtems_capture_task_stack_usage (et); } +static void +rtems_capture_terminated_task (rtems_tcb* terminated_task) +{ + rtems_capture_delete_task (terminated_task, terminated_task ); +} + +static void +rtems_capture_fatal( + Internal_errors_Source source, + bool is_internal, + Internal_errors_t code +) +{ +} + /* * rtems_capture_switch_task * @@ -1006,16 +1021,20 @@ rtems_capture_open (uint32_t size, rtems_capture_timestamp timestamp __attribu /* * Create the extension table. This is copied so we - * can create it as a local. + * can create it as a local. + * Zero the area out first so that any new methods will be NULL. */ - 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; + + memset( &capture_extensions, 0, sizeof(rtems_extensions_table) ); + 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 = rtems_capture_fatal; + capture_extensions.thread_terminate = rtems_capture_terminated_task; /* * Register the user extension handlers for the CAPture Engine. diff --git a/cpukit/libmisc/capture/capture.h b/cpukit/libmisc/capture/capture.h index c9cebc9..7663d8b 100644 --- a/cpukit/libmisc/capture/capture.h +++ b/cpukit/libmisc/capture/capture.h @@ -246,7 +246,8 @@ typedef enum rtems_capture_trigger_e rtems_capture_restart, rtems_capture_delete, rtems_capture_begin, - rtems_capture_exitted + rtems_capture_exitted, + rtems_capture_terminated } rtems_capture_trigger_t; /** -- 1.8.1.4 _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel