[PATCH 1/2] stackchk: Refactor Stack_check_Dump_threads_usage

Sebastian Huber sebastian.huber at embedded-brains.de
Wed Jun 20 10:06:40 UTC 2018


Update #3459.
---
 cpukit/libmisc/stackchk/check.c | 109 ++++++++++++++++++----------------------
 1 file changed, 49 insertions(+), 60 deletions(-)

diff --git a/cpukit/libmisc/stackchk/check.c b/cpukit/libmisc/stackchk/check.c
index 4643e7601a..974d0eb5e5 100644
--- a/cpukit/libmisc/stackchk/check.c
+++ b/cpukit/libmisc/stackchk/check.c
@@ -137,13 +137,7 @@ static inline bool Stack_check_Frame_pointer_in_range(
 #define Stack_check_usable_stack_size(_the_stack) \
     ((_the_stack)->size - PATTERN_SIZE_BYTES)
 
-#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
-  /*
-   *  Did RTEMS allocate the interrupt stack? If so, put it in
-   *  Stack_Control format.
-   */
-  Stack_Control Stack_check_Interrupt_stack;
-#endif
+static Stack_Control Stack_check_Interrupt_stack;
 
 /*
  *  Fill an entire stack area with BYTE_PATTERN.  This will be used
@@ -337,43 +331,18 @@ static inline void *Stack_check_find_high_water_mark(
   return (void *)0;
 }
 
-/*
- *  Stack_check_Dump_threads_usage
- *
- *  Try to print out how much stack was actually used by the task.
- */
-static bool Stack_check_Dump_threads_usage(
-  Thread_Control *the_thread,
-  void           *arg
+static bool Stack_check_Dump_stack_usage(
+  const Stack_Control *stack,
+  const void          *current,
+  const char          *name,
+  uint32_t             id,
+  const rtems_printer *printer
 )
 {
-  uint32_t             size, used;
-  void                *low;
-  void                *high_water_mark;
-  void                *current;
-  Stack_Control       *stack;
-  char                 name[ 22 ];
-  const rtems_printer *printer;
-  uint32_t             id;
-
-  printer = arg;
-
-  /*
-   *  Obtain interrupt stack information
-   */
-  #if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
-    if (the_thread == (Thread_Control *) -1) {
-      if (!Stack_check_Interrupt_stack.area)
-        return false;
-      stack = &Stack_check_Interrupt_stack;
-      the_thread = 0;
-      current = 0;
-    } else
-  #endif
-    {
-      stack  = &the_thread->Start.Initial_stack;
-      current = (void *)_CPU_Context_Get_SP( &the_thread->Registers );
-    }
+  uint32_t  size;
+  uint32_t  used;
+  void     *low;
+  void     *high_water_mark;
 
   low  = Stack_check_usable_stack_start(stack);
   size = Stack_check_usable_stack_size(stack);
@@ -385,17 +354,6 @@ static bool Stack_check_Dump_threads_usage(
   else
     used = 0;
 
-#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
-  if ( the_thread == NULL ) {
-    id = 0xffffffff;
-    strlcpy( name, "INTR", sizeof( name ) );
-  } else
-#endif
-  {
-    id = the_thread->Object.id;
-    _Thread_Get_name( the_thread, name, sizeof( name ) );
-  }
-
   rtems_printf(
     printer,
     "0x%08" PRIx32 " %-21s 0x%08" PRIxPTR " 0x%08" PRIxPTR " 0x%08" PRIxPTR " %6" PRId32 " ",
@@ -416,6 +374,40 @@ static bool Stack_check_Dump_threads_usage(
   return false;
 }
 
+static bool Stack_check_Dump_threads_usage(
+  Thread_Control *the_thread,
+  void           *arg
+)
+{
+  char                 name[ 22 ];
+  const rtems_printer *printer;
+
+  printer = arg;
+  _Thread_Get_name( the_thread, name, sizeof( name ) );
+  Stack_check_Dump_stack_usage(
+    &the_thread->Start.Initial_stack,
+    (void *) _CPU_Context_Get_SP( &the_thread->Registers ),
+    name,
+    the_thread->Object.id,
+    printer
+  );
+  return false;
+}
+
+static void Stack_check_Dump_interrupt_stack_usage(
+  const Stack_Control *stack,
+  const rtems_printer *printer
+)
+{
+  Stack_check_Dump_stack_usage(
+    stack,
+    NULL,
+    "INTR",
+    0xffffffff,
+    printer
+  );
+}
+
 /*
  *  rtems_stack_checker_report_usage
  */
@@ -436,13 +428,10 @@ void rtems_stack_checker_report_usage_with_plugin(
     RTEMS_DECONST( rtems_printer *, printer )
   );
 
-  #if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
-    /* dump interrupt stack info if any */
-    Stack_check_Dump_threads_usage(
-      (Thread_Control *) -1,
-      RTEMS_DECONST( rtems_printer *, printer )
-    );
-  #endif
+  Stack_check_Dump_interrupt_stack_usage(
+    &Stack_check_Interrupt_stack,
+    printer
+  );
 }
 
 void rtems_stack_checker_report_usage( void )
-- 
2.13.7



More information about the devel mailing list