void show_stack(struct task_struct *task, unsigned long *sp) { unsigned long *stack; int i; /* * debugging aid: "show_stack(NULL);" prints the * back trace for this cpu. */ if(sp==NULL) sp=(unsigned long*)&sp; stack = sp; for(i=0; i < kstack_depth_to_print; i++) { if (((long) stack & (THREAD_SIZE-1)) == 0) break; if ((i % 4) == 0) { if (i) pr_cont("\n"); printk(" "); } else { pr_cont(" "); } pr_cont("%016lx", *stack++); } pr_cont("\n"); dik_show_trace(sp); }
void show_trace_task(struct task_struct * tsk) { struct thread_struct * thread = &tsk->thread; unsigned long fp, sp = thread->ksp, base = (unsigned long) thread; if (sp > base && sp+6*8 < base + 16*1024) { fp = ((unsigned long*)sp)[6]; if (fp > sp && fp < base + 16*1024) dik_show_trace((unsigned long *)fp); } }
void show_stack(struct task_struct *task, unsigned long *sp) { unsigned long *stack; int i; if(sp==NULL) sp=(unsigned long*)&sp; stack = sp; for(i=0; i < kstack_depth_to_print; i++) { if (((long) stack & (THREAD_SIZE-1)) == 0) break; if (i && ((i % 4) == 0)) printk("\n "); printk("%016lx ", *stack++); } printk("\n"); dik_show_trace(sp); }
void die_if_kernel(char * str, struct pt_regs *regs, long err, unsigned long *r9_15) { if (regs->ps & 8) return; #ifdef CONFIG_SMP printk("CPU %d ", hard_smp_processor_id()); #endif printk("%s(%d): %s %ld\n", current->comm, task_pid_nr(current), str, err); dik_show_regs(regs, r9_15); add_taint(TAINT_DIE); dik_show_trace((unsigned long *)(regs+1)); dik_show_code((unsigned int *)regs->pc); if (test_and_set_thread_flag (TIF_DIE_IF_KERNEL)) { printk("die_if_kernel recursion detected.\n"); local_irq_enable(); while (1); } do_exit(SIGSEGV); }
void die_if_kernel(char * str, struct pt_regs *regs, long err, unsigned long *r9_15) { if (regs->ps & 8) return; #ifdef __SMP__ printk("CPU %d ", hard_smp_processor_id()); #endif printk("%s(%d): %s %ld\n", current->comm, current->pid, str, err); dik_show_regs(regs, r9_15); dik_show_code((unsigned int *)regs->pc); dik_show_trace((unsigned long *)(regs+1)); if (current->tss.flags & (1UL << 63)) { printk("die_if_kernel recursion detected.\n"); sti(); while (1); } current->tss.flags |= (1UL << 63); do_exit(SIGSEGV); }