Skip to content

Commit

Permalink
Merge pull request #5559 from gebart/pr/ps-stack-pointer
Browse files Browse the repository at this point in the history
sys/ps: Add current stack pointer to DEVELHELP output
  • Loading branch information
PeterKietzmann committed Jul 12, 2016
2 parents 9647370 + b02e0ec commit 048daf1
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 5 deletions.
10 changes: 10 additions & 0 deletions core/include/arch/thread_arch.h
Expand Up @@ -63,6 +63,16 @@ char *thread_arch_stack_init(thread_task_func_t task_func, void *arg, void *stac
*/
int thread_arch_isr_stack_usage(void);

/**
* @brief Get the current ISR stack pointer
*/
void *thread_arch_isr_stack_pointer(void);

/**
* @brief Get the start of the ISR stack
*/
void *thread_arch_isr_stack_start(void);

/**
* @brief Print the current stack to stdout
*/
Expand Down
12 changes: 12 additions & 0 deletions cpu/arm7_common/arm_cpu.c
Expand Up @@ -35,6 +35,18 @@ int thread_arch_isr_stack_usage(void)
return -1;
}

void *thread_arch_isr_stack_pointer(void)
{
/* TODO */
return (void *)-1;
}

void *thread_arch_isr_stack_start(void)
{
/* TODO */
return (void *)-1;
}

/*----------------------------------------------------------------------------
* Processor specific routine - here for ARM7
* sizeof(void*) = sizeof(int)
Expand Down
12 changes: 12 additions & 0 deletions cpu/atmega_common/thread_arch.c
Expand Up @@ -205,6 +205,18 @@ int thread_arch_isr_stack_usage(void)
return -1;
}

void *thread_arch_isr_stack_pointer(void)
{
/* TODO */
return (void *)-1;
}

void *thread_arch_isr_stack_start(void)
{
/* TODO */
return (void *)-1;
}

void thread_arch_start_threading(void) __attribute__((naked));
void thread_arch_start_threading(void)
{
Expand Down
11 changes: 11 additions & 0 deletions cpu/cortexm_common/thread_arch.c
Expand Up @@ -267,6 +267,17 @@ int thread_arch_isr_stack_usage(void)
return num_used_words * sizeof(*ptr);
}

void *thread_arch_isr_stack_pointer(void)
{
void *msp = (void *)__get_MSP();
return msp;
}

void *thread_arch_isr_stack_start(void)
{
return (void *)&_sstack;
}

__attribute__((naked)) void NORETURN thread_arch_start_threading(void)
{
__asm__ volatile (
Expand Down
12 changes: 12 additions & 0 deletions cpu/msp430-common/cpu.c
Expand Up @@ -40,6 +40,18 @@ int thread_arch_isr_stack_usage(void)
return -1;
}

void *thread_arch_isr_stack_pointer(void)
{
/* TODO */
return (void *)-1;
}

void *thread_arch_isr_stack_start(void)
{
/* TODO */
return (void *)-1;
}

NORETURN void cpu_switch_context_exit(void)
{
sched_active_thread = sched_threads[0];
Expand Down
10 changes: 10 additions & 0 deletions cpu/native/irq_cpu.c
Expand Up @@ -62,6 +62,16 @@ int _sig_pipefd[2];
static _native_callback_t native_irq_handlers[255];
char sigalt_stk[SIGSTKSZ];

void *thread_arch_isr_stack_pointer(void)
{
return native_isr_context.uc_stack.ss_sp;
}

void *thread_arch_isr_stack_start(void)
{
return __isr_stack;
}

void print_thread_sigmask(ucontext_t *cp)
{
sigset_t *p = &cp->uc_sigmask;
Expand Down
10 changes: 10 additions & 0 deletions cpu/x86/x86_threading.c
Expand Up @@ -117,6 +117,16 @@ void thread_yield_higher(void)
irq_restore(old_intr);
}

void *thread_arch_isr_stack_pointer(void)
{
return isr_context.uc_stack.ss_sp;
}

void *thread_arch_isr_stack_start(void)
{
return isr_stack;
}

void isr_cpu_switch_context_exit(void)
{
DEBUG("XXX: cpu_switch_context_exit(), num_tasks = %d\n", sched_num_threads);
Expand Down
12 changes: 7 additions & 5 deletions sys/ps/ps.c
Expand Up @@ -60,7 +60,7 @@ void ps(void)
#endif
"%-9sQ | pri "
#ifdef DEVELHELP
"| stack ( used) | location "
"| stack ( used) | base | current "
#endif
#ifdef MODULE_SCHEDSTATISTICS
"| runtime | switches"
Expand All @@ -72,9 +72,11 @@ void ps(void)
"state");

#ifdef DEVELHELP
int isr_usage = thread_arch_isr_stack_usage(); /* ISR stack usage */
int isr_usage = thread_arch_isr_stack_usage();
void *isr_start = thread_arch_isr_stack_start();
void *isr_sp = thread_arch_isr_stack_pointer();
printf("\t - | isr_stack | - - |"
" - | %5i (%5i) | -\n", ISR_STACKSIZE, isr_usage);
" - | %5i (%5i) | %10p | %10p\n", ISR_STACKSIZE, isr_usage, isr_start, isr_sp);
overall_stacksz += ISR_STACKSIZE;
if (isr_usage > 0) {
overall_used += isr_usage;
Expand Down Expand Up @@ -104,7 +106,7 @@ void ps(void)
#endif
" | %-8s %.1s | %3i"
#ifdef DEVELHELP
" | %5i (%5i) | %p "
" | %5i (%5i) | %10p | %10p "
#endif
#ifdef MODULE_SCHEDSTATISTICS
" | %6.3f%% | %8d"
Expand All @@ -116,7 +118,7 @@ void ps(void)
#endif
sname, queued, p->priority
#ifdef DEVELHELP
, p->stack_size, stacksz, (void *)p->stack_start
, p->stack_size, stacksz, (void *)p->stack_start, (void *)p->sp
#endif
#ifdef MODULE_SCHEDSTATISTICS
, runtime_ticks, switches
Expand Down

0 comments on commit 048daf1

Please sign in to comment.