Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7dc640d authored by Vineet Gupta's avatar Vineet Gupta Committed by Sasha Levin
Browse files

ARC: Fix KSTK_ESP()



commit 13648b0118a24f4fc76c34e6c7b6ccf447e46a2a upstream.

/proc/<pid>/maps currently don't annotate stack vma with "[stack]"
This is because KSTK_ESP ie expected to return usermode SP of tsk while
currently it returns the kernel mode SP of a sleeping tsk.

While the fix is trivial, we also need to adjust the ARC kernel stack
unwinder to not use KSTK_SP and friends any more.

Reported-and-suggested-by: default avatarAlexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent 8ed378b1
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -75,18 +75,19 @@ unsigned long thread_saved_pc(struct task_struct *t);
#define release_segments(mm)        do { } while (0)

#define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
#define KSTK_ESP(tsk)   (task_pt_regs(tsk)->sp)

/*
 * Where abouts of Task's sp, fp, blink when it was last seen in kernel mode.
 * Look in process.c for details of kernel stack layout
 */
#define KSTK_ESP(tsk)   (tsk->thread.ksp)
#define TSK_K_ESP(tsk)		(tsk->thread.ksp)

#define KSTK_REG(tsk, off)	(*((unsigned int *)(KSTK_ESP(tsk) + \
#define TSK_K_REG(tsk, off)	(*((unsigned int *)(TSK_K_ESP(tsk) + \
					sizeof(struct callee_regs) + off)))

#define KSTK_BLINK(tsk) KSTK_REG(tsk, 4)
#define KSTK_FP(tsk)    KSTK_REG(tsk, 0)
#define TSK_K_BLINK(tsk)	TSK_K_REG(tsk, 4)
#define TSK_K_FP(tsk)		TSK_K_REG(tsk, 0)

extern void start_thread(struct pt_regs * regs, unsigned long pc,
			 unsigned long usp);
+3 −3
Original line number Diff line number Diff line
@@ -64,9 +64,9 @@ static void seed_unwind_frame_info(struct task_struct *tsk,

		frame_info->task = tsk;

		frame_info->regs.r27 = KSTK_FP(tsk);
		frame_info->regs.r28 = KSTK_ESP(tsk);
		frame_info->regs.r31 = KSTK_BLINK(tsk);
		frame_info->regs.r27 = TSK_K_FP(tsk);
		frame_info->regs.r28 = TSK_K_ESP(tsk);
		frame_info->regs.r31 = TSK_K_BLINK(tsk);
		frame_info->regs.r63 = (unsigned int)__switch_to;

		/* In the prologue of __switch_to, first FP is saved on stack