diff options
Diffstat (limited to 'arch/mips/kernel/process.c')
| -rw-r--r-- | arch/mips/kernel/process.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index d2112d3cf115..b30cb2573aaf 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -103,7 +103,6 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp)  		__init_dsp();  	regs->cp0_epc = pc;  	regs->regs[29] = sp; -	current_thread_info()->addr_limit = USER_DS;  }  void exit_thread(void) @@ -373,18 +372,18 @@ unsigned long thread_saved_pc(struct task_struct *tsk)  #ifdef CONFIG_KALLSYMS -/* used by show_backtrace() */ -unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, -			   unsigned long pc, unsigned long *ra) +/* generic stack unwinding function */ +unsigned long notrace unwind_stack_by_address(unsigned long stack_page, +					      unsigned long *sp, +					      unsigned long pc, +					      unsigned long *ra)  { -	unsigned long stack_page;  	struct mips_frame_info info;  	unsigned long size, ofs;  	int leaf;  	extern void ret_from_irq(void);  	extern void ret_from_exception(void); -	stack_page = (unsigned long)task_stack_page(task);  	if (!stack_page)  		return 0; @@ -443,6 +442,15 @@ unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,  	*ra = 0;  	return __kernel_text_address(pc) ? pc : 0;  } +EXPORT_SYMBOL(unwind_stack_by_address); + +/* used by show_backtrace() */ +unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, +			   unsigned long pc, unsigned long *ra) +{ +	unsigned long stack_page = (unsigned long)task_stack_page(task); +	return unwind_stack_by_address(stack_page, sp, pc, ra); +}  #endif  /*  |