/*while (((long) stack & (THREAD_SIZE-1)) != 0) { addr = *stack; if (__kernel_text_address(addr)) { printk("%08lx:	[<%08lx>]", (unsigned long) stack, addr); print_symbol(" %s", addr); printk("\n"); } stack++; }*/ 
void show_trace(struct task_struct* task, unsigned long * stack){	unsigned long ebp;	struct thread_info *context;	/* Turn this into BUG_ON if possible. */	if (!stack) {		stack = (unsigned long*) &stack;		printk("show_trace: got NULL stack, implicit assumption task == current");		WARN_ON(1);	}	if (!task)		task = current;	if (task != current) {		//ebp = (unsigned long) KSTK_EBP(task);		/* Which one? No actual difference - just coding style.*/		ebp = (unsigned long) PT_REGS_EBP(&task->thread.regs);	} else {		asm ("movl %%ebp, %0" : "=r" (ebp) : );	}	context = (struct thread_info *)		((unsigned long)stack & (~(THREAD_SIZE - 1)));	print_context_stack(context, stack, ebp);	/*while (((long) stack & (THREAD_SIZE-1)) != 0) {		addr = *stack;		if (__kernel_text_address(addr)) {			printk("%08lx:	[<%08lx>]", (unsigned long) stack, addr);			print_symbol(" %s", addr);			printk("\n");		}		stack++;	}*/	printk("\n");}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/fad1c45c939bb246a488be1fa06f539e85b80545/sysrq.c/buggy/arch/um/sys-i386/sysrq.c