cpukit, testsuite: Add rtems_printf and rtems_printer support.

This change adds rtems_printf and related functions and wraps the
RTEMS print plugin support into a user API. All references to the
plugin are removed and replaced with the rtems_printer interface.

Printk and related functions are made to return a valid number of
characters formatted and output.

The function attribute to check printf functions has been added
to rtems_printf and printk. No changes to remove warrnings are part
of this patch set.

The testsuite has been moved over to the rtems_printer. The testsuite
has a mix of rtems_printer access and direct print control via the
tmacros.h header file. The support for begink/endk has been removed
as it served no purpose and only confused the code base. The testsuite
has not been refactored to use rtems_printf. This is future work.
This commit is contained in:
Chris Johns
2016-05-20 18:39:50 +10:00
parent b1860df53d
commit 24d0ee57a4
90 changed files with 806 additions and 561 deletions

View File

@@ -387,8 +387,7 @@ static inline void *Stack_check_find_high_water_mark(
*
* Try to print out how much stack was actually used by the task.
*/
static void *print_context;
static rtems_printk_plugin_t print_handler;
static const rtems_printer* printer;
static void Stack_check_Dump_threads_usage(
Thread_Control *the_thread
@@ -438,8 +437,8 @@ static void Stack_check_Dump_threads_usage(
if ( the_thread )
#endif
{
(*print_handler)(
print_context,
rtems_printf(
printer,
"0x%08" PRIx32 " %4s",
the_thread->Object.id,
rtems_object_get_name( the_thread->Object.id, sizeof(name), name )
@@ -447,12 +446,12 @@ static void Stack_check_Dump_threads_usage(
}
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
rtems_printf( printer, "0x%08" PRIx32 " INTR", ~0 );
}
#endif
(*print_handler)(
print_context,
rtems_printf(
printer,
" %010p - %010p %010p %8" PRId32 " ",
stack->area,
stack->area + stack->size - 1,
@@ -461,9 +460,9 @@ static void Stack_check_Dump_threads_usage(
);
if (Stack_check_Initialized == 0) {
(*print_handler)( print_context, "Unavailable\n" );
rtems_printf( printer, "Unavailable\n" );
} else {
(*print_handler)( print_context, "%8" PRId32 "\n", used );
rtems_printf( printer, "%8" PRId32 "\n", used );
}
@@ -489,18 +488,16 @@ static void Stack_check_Dump_threads_usage(
*/
void rtems_stack_checker_report_usage_with_plugin(
void *context,
rtems_printk_plugin_t print
const rtems_printer* printer_
)
{
if ( !print )
if ( printer != NULL || ! rtems_print_printer_valid ( printer_ ) )
return;
print_context = context;
print_handler = print;
printer = printer_;
(*print)( context, "Stack usage by thread\n");
(*print)( context,
rtems_printf( printer, "Stack usage by thread\n");
rtems_printf( printer,
" ID NAME LOW HIGH CURRENT AVAILABLE USED\n"
);
@@ -512,11 +509,12 @@ void rtems_stack_checker_report_usage_with_plugin(
Stack_check_Dump_threads_usage((Thread_Control *) -1);
#endif
print_context = NULL;
print_handler = NULL;
printer = NULL;
}
void rtems_stack_checker_report_usage( void )
{
rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin );
rtems_printer printer;
rtems_print_printer_printk(&printer);
rtems_stack_checker_report_usage_with_plugin( &printer );
}