Commit 8b7a87a0 authored by Max Filippov's avatar Max Filippov
Browse files

xtensa: expose syscall through user_pt_regs



Use one of the reserved slots in struct user_pt_regs to return syscall
number in the GPR regset. Update syscall number from the GPR regset only
when it's non-zero.

Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent ef1a935c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@ struct user_pt_regs {
	__u32 windowstart;
	__u32 windowbase;
	__u32 threadptr;
	__u32 reserved[7 + 48];
	__u32 syscall;
	__u32 reserved[6 + 48];
	__u32 a[64];
};

+4 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ static int gpr_get(struct task_struct *target,
		.threadptr = regs->threadptr,
		.windowbase = regs->windowbase,
		.windowstart = regs->windowstart,
		.syscall = regs->syscall,
	};

	memcpy(newregs.a,
@@ -91,6 +92,9 @@ static int gpr_set(struct task_struct *target,
	regs->sar = newregs.sar;
	regs->threadptr = newregs.threadptr;

	if (newregs.syscall)
		regs->syscall = newregs.syscall;

	if (newregs.windowbase != regs->windowbase ||
	    newregs.windowstart != regs->windowstart) {
		u32 rotws, wmask;