Commit f737561c authored by Vineet Gupta's avatar Vineet Gupta
Browse files

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
Loading
Loading
Loading
Loading
+18 −19
Original line number Diff line number Diff line
@@ -42,11 +42,23 @@ static int
seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
		       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)
		 *  - uses current values of SP and friends
		 */
	if (regs == NULL && (tsk == NULL || tsk == current)) {
		unsigned long fp, sp, blink, ret;
		frame_info->task = current;

@@ -63,7 +75,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
		frame_info->regs.r31 = blink;
		frame_info->regs.r63 = ret;
		frame_info->call_frame = 0;
	} else if (regs == NULL) {
	} else {
		/*
		 * Asynchronous unwinding of a likely sleeping task
		 *  - first ensure it is actually sleeping
@@ -94,20 +106,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
		frame_info->regs.r28 += 60;
		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;
}