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: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
@@ -50,7 +50,8 @@ struct user_pt_regs {
|
|||||||
__u32 windowstart;
|
__u32 windowstart;
|
||||||
__u32 windowbase;
|
__u32 windowbase;
|
||||||
__u32 threadptr;
|
__u32 threadptr;
|
||||||
__u32 reserved[7 + 48];
|
__u32 syscall;
|
||||||
|
__u32 reserved[6 + 48];
|
||||||
__u32 a[64];
|
__u32 a[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ static int gpr_get(struct task_struct *target,
|
|||||||
.threadptr = regs->threadptr,
|
.threadptr = regs->threadptr,
|
||||||
.windowbase = regs->windowbase,
|
.windowbase = regs->windowbase,
|
||||||
.windowstart = regs->windowstart,
|
.windowstart = regs->windowstart,
|
||||||
|
.syscall = regs->syscall,
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(newregs.a,
|
memcpy(newregs.a,
|
||||||
@@ -91,6 +92,9 @@ static int gpr_set(struct task_struct *target,
|
|||||||
regs->sar = newregs.sar;
|
regs->sar = newregs.sar;
|
||||||
regs->threadptr = newregs.threadptr;
|
regs->threadptr = newregs.threadptr;
|
||||||
|
|
||||||
|
if (newregs.syscall)
|
||||||
|
regs->syscall = newregs.syscall;
|
||||||
|
|
||||||
if (newregs.windowbase != regs->windowbase ||
|
if (newregs.windowbase != regs->windowbase ||
|
||||||
newregs.windowstart != regs->windowstart) {
|
newregs.windowstart != regs->windowstart) {
|
||||||
u32 rotws, wmask;
|
u32 rotws, wmask;
|
||||||
|
|||||||
Reference in New Issue
Block a user