Commit f737561c authored by Vineet Gupta's avatar Vineet Gupta

ARC: stack unwinding: reorganize how initial register state setup

This is a non-functional change, if anything a better fall-back
handling.
Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent e42404fa
...@@ -42,11 +42,23 @@ static int ...@@ -42,11 +42,23 @@ static int
seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
struct unwind_frame_info *frame_info) struct unwind_frame_info *frame_info)
{ {
if (regs) {
/*
* Asynchronous unwinding of intr/exception
* - Just uses the pt_regs passed
*/
frame_info->task = tsk;
frame_info->regs.r27 = regs->fp;
frame_info->regs.r28 = regs->sp;
frame_info->regs.r31 = regs->blink;
frame_info->regs.r63 = regs->ret;
frame_info->call_frame = 0;
} else if (tsk == NULL || tsk == current) {
/* /*
* synchronous unwinding (e.g. dump_stack) * synchronous unwinding (e.g. dump_stack)
* - uses current values of SP and friends * - uses current values of SP and friends
*/ */
if (regs == NULL && (tsk == NULL || tsk == current)) {
unsigned long fp, sp, blink, ret; unsigned long fp, sp, blink, ret;
frame_info->task = current; frame_info->task = current;
...@@ -63,7 +75,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, ...@@ -63,7 +75,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
frame_info->regs.r31 = blink; frame_info->regs.r31 = blink;
frame_info->regs.r63 = ret; frame_info->regs.r63 = ret;
frame_info->call_frame = 0; frame_info->call_frame = 0;
} else if (regs == NULL) { } else {
/* /*
* Asynchronous unwinding of a likely sleeping task * Asynchronous unwinding of a likely sleeping task
* - first ensure it is actually sleeping * - first ensure it is actually sleeping
...@@ -94,20 +106,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, ...@@ -94,20 +106,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
frame_info->regs.r28 += 60; frame_info->regs.r28 += 60;
frame_info->call_frame = 0; frame_info->call_frame = 0;
} else {
/*
* Asynchronous unwinding of intr/exception
* - Just uses the pt_regs passed
*/
frame_info->task = tsk;
frame_info->regs.r27 = regs->fp;
frame_info->regs.r28 = regs->sp;
frame_info->regs.r31 = regs->blink;
frame_info->regs.r63 = regs->ret;
frame_info->call_frame = 0;
} }
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment